【发布时间】:2011-06-23 11:35:15
【问题描述】:
在寻找 Excel 的 NORMDIST 的 C++ 实现时(累积)
我找到的函数this on a website:
static double normdist(double x, double mean, double standard_dev)
{
double res;
double x=(x - mean) / standard_dev;
if (x == 0)
{
res=0.5;
}
else
{
double oor2pi = 1/(sqrt(double(2) * 3.14159265358979323846));
double t = 1 / (double(1) + 0.2316419 * fabs(x));
t *= oor2pi * exp(-0.5 * x * x)
* (0.31938153 + t
* (-0.356563782 + t
* (1.781477937 + t
* (-1.821255978 + t * 1.330274429))));
if (x >= 0)
{
res = double(1) - t;
}
else
{
res = t;
}
}
return res;
}
我有限的数学知识让我想到了Taylor series,但我无法确定这些数字的来源:
0.2316419,
0.31938153,
-0.356563782,
1.781477937,
-1.821255978,
1.330274429
任何人都可以建议它们来自哪里,以及它们是如何得到的?
【问题讨论】:
-
嗯,
3.14159265358979323846非常接近PI... ;) -
关于 Math.StackEchange 的这个问题似乎是相关的:Abramowitz and Stegun approximation for cumulative normal distribution
标签: c++ excel function math magic-numbers