用c语言编写正态分布函数,C / C ++中的累积正态分布函数
这里给出的普通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 ++中的累积正态分布函数相关推荐
- php正态分布,如何在PHP中生成累积正态分布
这里有一个用于近似累积正态分布的php方法: 该方法将zscore作为输入.我的结果与excel的NORMDIST类似. function cumnormdist($x) { $b1 = 0.3193 ...
- 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数
如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...
- pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换
pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换 目录
- 如何用Python语言编写源程序,读取Excel中数据,并画出柱状图?
现在,随着计算机的普及,以及数据量的增多,对大型数据的分析已经是我们手算不能解决的了,必须借助计算机:那么,学习计算机其实也和我们学习中文.英文一样,要学习他们的写作规则,掌握其中原理.所以,我们首先 ...
- imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...
出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...
- python中sort函数源代码_Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- linux函数计时,Linux 中的计时——gettimeofday函数
1.使用C语言进行计时 在用户空间中可以使用C语言函数gettimeofday 得到时间,它的调用格式是: #include int gettimeofday(struct timeval *tv, ...
- python format函数实例_python中强大的format函数实例详解
python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...
- python items函数用法,Python中dictionary items()系列函数的用法实例
本文实例讲述了Python中dictionary items()系列函数的用法,对Python程序设计有很好的参考借鉴价值.具体分析如下: 先来看一个示例: import html # availab ...
最新文章
- [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt
- python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?
- tensorflow 模型预训练后的参数restore finetuning
- Jenkins Pipeline 构建复杂的Electron程序
- 破解简单的Android签名检查
- 【NLP】基于预训练的中文NLP工具介绍:ltp 和 fastHan
- redis的四大特性和原理
- go io.reader 多次读取_你应该掌握的 Go 高级并发模式:计时器
- VC++ 多线程同步实例
- 介绍Angular的注入服务
- 我去,还在这样读写 excel 这也太低效了吧!
- matlab如何生存对称矩阵,如何使用Matlab产生对称矩阵
- 生态环境之水污染网格化监测预警方案
- [poj 1741]Tree 点分治
- Matlab图形中输入希腊字母
- excel--转化IP地址为十进制
- 关于wps 行尾空格不能使用下划线
- 给定0-1矩阵,求连通域
- 知乎zse-96算法-js补环境方案
- 2020牛客暑期多校训练营(第六场)E——Easy Construction
热门文章
- 打开AR两重门之后,腾讯看到了什么?
- matlab中的length函数
- Cannot set property innerHTML of null
- Zynq UltraScale+ MPSoC-dp14 standalone
- inner_product函数实现向量内积矩阵乘法
- 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...
- 目前JAVA实习生普遍需要掌握的技术有哪些?
- VS Code的使用
- 数据库测压工具Sysbench的安装和使用
- Jetson nano 树莓派 传输视频帧直播 极低延迟