c - 如何正确使用 exp 和 sqrt 属性



>使用双精度-使用 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.203x 值数:3x 值 1:3.4f(X( = 0.330716549275x 值 2:-3.4f(X( = 0.000000025104x 值 3:4f(X( = 0.303015189801

但这就是我收到的

C:\Csource>a.exe输入平均值 u:3.489输入标准差:1.203x 值数:3x 值 1 : 3.4f(x( = : 15086080.000000x 值 2 : -3.4f(x( = : 15086080.000000x 值 3 : 4f(x( = : 1610612736.000000

插入以下行:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

改变:

const double sigma, mu;

自:

double sigma, mu;

改变:

unsigned int x;

自:

double x;

normal函数的定义替换为:

double normal(double x, double sigma, double mu)
{   
     double func = 1.0/(sigma * sqrt(2.0*M_PI));
     double t = (x-mu)/sigma;
     return func * exp(-t*t/2);
}
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
#include<math.h>
#include<stdio.h>
#include <stdlib.h>
double normal(double x, double sigma, double mu)
{    
 double func = 1.0/(sigma * sqrt(2.0*M_PI));
 double t = (x-mu)/sigma;
 return func * exp((-0.5*t)* t);
}

我终于在整天调整了它之后让上面的代码工作,哈哈,C 数学可能相当棘手,也感谢您在上面的帮助。

相关内容

  • 没有找到相关文章

最新更新