如何正确使用exp和开方性质

问题描述 投票:1回答:2

-use双精度次使用的sqrt()和指数函数EXP() - 使用*计算方 - 不要使用POW()

我得到他们只是没有什么,什么我的预期值。我试图把他们都签订了,但它并没有改变任何东西,我试着打印出与12位小数并没有什么似乎working.I有联系的数学库,并将其定义为好。

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×值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×值1:3.4 F(X)=:15086080.000000 x值2:-3.4 F(X)=:15086080.000000 X值3:4 F(X)=:1610612736.000000

c signed normal-distribution negative-number exp
2个回答
1
投票

插入这些行:

#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);
}

0
投票
#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数学可以是相当棘手的工作后,这个代码,谢谢你上面还有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.