1

首先,对于那些不知道这个法律的人来说,不要害怕它实际上很简单。在此链接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;
}

我想让你告诉我这个法律的执行是否正确以及为什么正确。非常感谢您提前。

4

1 回答 1

5

标准正态累积分布函数正是高斯误差函数的(1/2)*(1 + erf(z/sqrt(2)))所在erf,它在许多 C 编程库中都可以找到。检查您正在使用的开发环境——很有可能erf已经在它的某个库中。

于 2014-11-30T23:28:35.920 回答