- использовать двойную точность - использовать sqrt() и экспоненциальную функцию exp() - использовать * для вычисления квадрата - не использовать pow()
Я получаю значения, они просто не соответствуют тому, что я ожидал. Я попытался сделать их все подписанными, но это ничего не изменило, и я попытался распечатать с 12 знаками после запятой, и ничего не работает. Я связал математическую библиотеку и также определил ее.
double normal(double x, double sigma, double mu)
{
double func = 1.0/(sigma * sqrt(2.0*M_PI));
double raise = 1.0/2.0*((x-mu)/sigma);
double func1 = func * exp(raise);
double comp_func = (func1 * func1);
return comp_func;
}
int main(void)
{
// create two constant variables for μ and σ
const double sigma, mu;
//create a variable for x - only dynamic variable in equation
unsigned int x;
//create a variable for N values of x to use for loop
int no_x;
//scaniing value into mu
printf("Enter mean u: ");
scanf("%lf", &mu);
//scanning value into sigma
printf("Enter standard deviation: ");
scanf("%lf", &sigma);
//if sigma = 0 then exit
if(sigma == 0)
{
printf("error you entered: 0");
exit(0);
}
//storing number of x values in no_x
printf("Number of x values: ");
scanf("%d", &no_x);
//the for loop where i am calling function normal N times
for(int i = 1; i <= no_x; i++)
{
//printing i for the counter in prompted x values
printf("x value %d : ", i);
// scanning in x
scanf("%lf", &x);
x = normal(x,sigma,mu);
printf("f(x) = : %lf.12", x);
printf("\n");
}
return 0;
}
C:>.\a.exe Введите среднее значение u: 3,489 Введите стандартное отклонение s: 1,203 Количество значений x: 3 x значение 1: 3,4 f(X) = 0,330716549275 x значение 2: -3,4 f(X) = 0,000000025104 x значение 3:4 f(X) = 0,303015189801
Но это то, что я получаю
C:\Csource>a.exe Введите среднее значение u: 3,489 Введите стандартное отклонение: 1,203 Количество значений x: 3 x значение 1 : 3,4 f(x) = : 15086080,000000 x значение 2 : -3,4 f(x) = : 15086080,000000 x значение 3 : 4 f(x) = : 1610612736,000000
<math.h>
,<stdio.h>
и<stdlib.h>
. Он передает адресаsigma
иmu
вscanf
, но этоconst
, аscanf
требует указателей на то, что неconst
. Он также передаетx
вscanf
для%lf
, ноx
объявлен какunsigned int
, а%lf
требуетdouble
. Если ваш компилятор не является чрезвычайно толерантным и вы не проигнорировали предупреждающие сообщения, это не должно было скомпилироваться. - person Eric Postpischil   schedule 09.02.2019