0

これは、正規分布関数http://en.wikipedia.org/wiki/Normal_distributionを記述する正しい方法 ですか、それとも pow 関数を使用する必要がありますか? 私は本当に混乱しているので、助けていただければ幸いです:)

#include <stdio.h>
#define _USE_MATH_DEFINES 
#include <math.h>
#include <stdlib.h>
int main()
{
double u,s, N, x1,math1, math2, math3,n, v, x;

printf("Enter Mean: ");
scanf("%lf", &u);
printf("Enter Standard Deviation: ");
scanf("%lf", &s);
printf("Enter Number Of Inputs: ");
scanf("%lf", &N);

    for (v=1; v<=N; v++)
    {
    printf("Enter Value: ");
    scanf("%lf", &x);
    n=(-1/2);
    printf("f(x)= ");
    math1 =1/(s*sqrt(2*M_PI));
    math2= (x-u)/s * (x-u)/s;
    math3= M_E * exp(n);
    x1 = math1 * exp(math3)*exp(math2);
    printf("%lf  \n", x1);
    }
system("Pause");
 }
4

1 に答える 1

4

コードを読むのは難しすぎますが、間違っていると言えます。ここに短いバージョンがあります:

double twopi = 8.0 * atan(1.0); // preferable to using M_PI
double x = ..., sigma = ..., mu = ...;
double y = (1.0 / (sigma * sqrt(twopi))) *
    exp(-(x - mu)*(x - mu) / (2.0 * sigma * sigma));

数式を C の式に直接変換する方法に注目してください。これにより、コードが正しいことを簡単に確認できます。大量の一時変数を使用すると、少し難しくなりますmath1, math2, math3...

覚えておいてください:exp()は数学の対応する と同じものですexp。e xexp(x)も同様です。これに気付くと、コードにエラーが表示されます。

于 2013-01-30T21:54:09.613 に答える