这里给出的普通CDF的实现是单精度近似,其已经用double替换了float,因此仅精确到7或8个有效(十进制)数字。

对于Hart的双精度近似的VB实现,请参见West对累积正态函数的更好近似的图2。

编辑:我将West的实现转换为C ++:

double

phi(double x)

{

static const double RT2PI = sqrt(4.0*acos(0.0));

static const double SPLIT = 7.07106781186547;

static const double N0 = 220.206867912376;

static const double N1 = 221.213596169931;

static const double N2 = 112.079291497871;

static const double N3 = 33.912866078383;

static const double N4 = 6.37396220353165;

static const double N5 = 0.700383064443688;

static const double N6 = 3.52624965998911e-02;

static const double M0 = 440.413735824752;

static const double M1 = 793.826512519948;

static const double M2 = 637.333633378831;

static const double M3 = 296.564248779674;

static const double M4 = 86.7807322029461;

static const double M5 = 16.064177579207;

static const double M6 = 1.75566716318264;

static const double M7 = 8.83883476483184e-02;

const double z = fabs(x);

double c = 0.0;

if(z<=37.0)

{

const double e = exp(-z*z/2.0);

if(z

{

const double n = (((((N6*z + N5)*z + N4)*z + N3)*z + N2)*z + N1)*z + N0;

const double d = ((((((M7*z + M6)*z + M5)*z + M4)*z + M3)*z + M2)*z + M1)*z + M0;

c = e*n/d;

}

else

{

const double f = z + 1.0/(z + 2.0/(z + 3.0/(z + 4.0/(z + 13.0/20.0))));

c = e/(RT2PI*f);

}

}

return x<=0.0 ? c : 1-c;

}

请注意,我已将表达式重新排列为更熟悉的系列形式和连续分数近似值。 West代码中的最后一个神奇数字是2&pi;的平方根,我通过利用身份acos(0)=&frac12在第一行推迟到编译器; &PI ;.

我已经对魔术数字进行了三次检查,但我总是错误地输入了一些东西。如果您发现拼写错误,请评论!

John Cook在他的回答中使用的测试数据的结果是

x phi Mathematica

-3 1.3498980316301150e-003 0.00134989803163

-1 1.5865525393145702e-001 0.158655253931

0 5.0000000000000000e-001 0.5

0.5 6.9146246127401301e-001 0.691462461274

2.1 9.8213557943718344e-001 0.982135579437

我从他们同意Mathematica结果的所有数字这一事实中得到一些小小的安慰。

用c语言编写正态分布函数,C / C ++中的累积正态分布函数相关推荐

  1. php正态分布,如何在PHP中生成累积正态分布

    这里有一个用于近似累积正态分布的php方法: 该方法将zscore作为输入.我的结果与excel的NORMDIST类似. function cumnormdist($x) { $b1 = 0.3193 ...

  2. 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数

    如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...

  3. pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换

    pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换 目录

  4. 如何用Python语言编写源程序,读取Excel中数据,并画出柱状图?

    现在,随着计算机的普及,以及数据量的增多,对大型数据的分析已经是我们手算不能解决的了,必须借助计算机:那么,学习计算机其实也和我们学习中文.英文一样,要学习他们的写作规则,掌握其中原理.所以,我们首先 ...

  5. imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...

    出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...

  6. python中sort函数源代码_Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  7. linux函数计时,Linux 中的计时——gettimeofday函数

    1.使用C语言进行计时 在用户空间中可以使用C语言函数gettimeofday 得到时间,它的调用格式是: #include int gettimeofday(struct timeval *tv, ...

  8. python format函数实例_python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...

  9. python items函数用法,Python中dictionary items()系列函数的用法实例

    本文实例讲述了Python中dictionary items()系列函数的用法,对Python程序设计有很好的参考借鉴价值.具体分析如下: 先来看一个示例: import html # availab ...

最新文章

  1. [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt
  2. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?
  3. tensorflow 模型预训练后的参数restore finetuning
  4. Jenkins Pipeline 构建复杂的Electron程序
  5. 破解简单的Android签名检查
  6. 【NLP】基于预训练的中文NLP工具介绍:ltp 和 fastHan
  7. redis的四大特性和原理
  8. go io.reader 多次读取_你应该掌握的 Go 高级并发模式:计时器
  9. VC++ 多线程同步实例
  10. 介绍Angular的注入服务
  11. 我去,还在这样读写 excel 这也太低效了吧!
  12. matlab如何生存对称矩阵,如何使用Matlab产生对称矩阵
  13. 生态环境之水污染网格化监测预警方案
  14. [poj 1741]Tree 点分治
  15. Matlab图形中输入希腊字母
  16. excel--转化IP地址为十进制
  17. 关于wps 行尾空格不能使用下划线
  18. 给定0-1矩阵,求连通域
  19. 知乎zse-96算法-js补环境方案
  20. 2020牛客暑期多校训练营(第六场)E——Easy Construction

热门文章

  1. 打开AR两重门之后,腾讯看到了什么?
  2. matlab中的length函数
  3. Cannot set property innerHTML of null
  4. Zynq UltraScale+ MPSoC-dp14 standalone
  5. inner_product函数实现向量内积矩阵乘法
  6. 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...
  7. 目前JAVA实习生普遍需要掌握的技术有哪些?
  8. VS Code的使用
  9. 数据库测压工具Sysbench的安装和使用
  10. Jetson nano 树莓派 传输视频帧直播 极低延迟