如何用C(或其他语言)实现标准的正态累积分布函数

时间:2014-11-30 15:21:02

标签: c probability normal-distribution quantitative-finance probability-theory

首先,对于那些不了解这项法律的人,不要害怕它实际上非常简单。 在此链接http://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model上,您将从数学角度看到此法律。 继续部分符号并查看以N(x)= 1 / sqrt(2 * PI)开头的函数... 我正在C中实现Black-Scholes模型,你可能已经猜到了,我不知道如何实现这个功能,我已经在网上找到了一个实现,但我不确定我是否应该对此感到高兴,似乎一点点。 这是我正在使用的代码。

double N(double z){
    const double b1=0.31938153;
    const double b2=-0.356563782;
    const double b3=1.781477937;
    const double b4=-1.821255978;
    const double b5=1.330274429;
    const double p=0.2316419;

    double a=fabs(z);
    double t=1.0/(1.0+a*p);
    double w=1.0-1.0/sqrt(2*M_PI)*exp(-a*a/2)*(b1*t+b2*t*t+b3*pow(t,3)+b4*pow(t,4)+b5*pow(t,5));
    if(z<0.0)
        w=1.0-w;
    return w;
}

我希望您告诉我法律的实施是否正确及其原因。 非常感谢你提前。

1 个答案:

答案 0 :(得分:4)

标准正态累积分布函数正好是(1/2)*(1 + erf(z/sqrt(2))),其中erf是高斯误差函数,可在许多C编程库中找到。检查您正在使用的开发环境 - erf已经存在于其中一个库中的可能性很高。