带参数的C/C++中的累积正态分布函数

Cumulative Normal Distribution Function in C/C++ with parameters

本文关键字:正态分布 函数 C++ 参数      更新时间:2023-10-16

我想在C++中实现matlab normcdf函数的等价物,我已经发现了这个有用的帖子:C/C++中的累积正态分布函数指向这个实现http://www.johndcook.com/cpp_phi.html.但我希望它有可选的μ和西格玛参数,就像在matlab中一样。

可以吗,当我改变这个:

x = fabs(x)/sqrt(2.0);

至:

x = fabs(x - mu)/sqrt(2.0 * sigma * sigma);

或者我应该做点别的?

小心-您想要保存x-mu的符号,而不仅仅是x:的符号

int sign = 1;
if (x < mu)
    sign = -1;
x = fabs(x-mu)/sqrt(2.0*sigma*sigma);

否则,缩放是正确的。

您可以添加

x = (x-mu)/fabs(sigma);

作为函数的第一行,在不改变符号检查的情况下获得正确的结果。理想情况下,应该为sigma<=0.0抛出一个异常,而不是在此处使用fabs

与此无关的是,您链接到的实现实际上是一个单精度近似,只是将float替换为double(因此最大误差为惊人的7e-8;-)
如果您对从VB进行翻译感到满意,West将在http://www.wilmott.com/pdfs/090721_west.pdf.
不幸的是,作为PDF,您无法复制和粘贴所有的幻数,因此在检查是否正确复制时,您必须非常小心!