0

먼저이 법을 모르는 사람들을 위해 실제로는 매우 간단하다는 것을 두려워하지 마십시오. 이 링크 http://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model에서이 법칙을 수학적으로 볼 수 있습니다. 섹션 표기법으로 가서 N (x) = 1/sqrt (2 * PI)로 시작하는 함수를 살펴보십시오 ... 추측 하듯이 C에서 Black-Scholes 모델을 구현 중입니다. 이 기능을 구현하는 방법을 알고 있지만 온라인 구현을 찾았지만 행복해야하는지 잘 모르겠습니다. 조금 벗어난 것처럼 보입니다. 이것은 사용중인 코드입니다.표준 정규 누적 분포 함수를 C (또는 다른 언어)로 구현하는 방법

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

글쎄요, 다른 프로그램의 결과와 비교해 볼 때 약간 다른 점이 있습니다. 구현 방법이 올바른지 누가 알 수있는 방법이 없습니다. 구현 방법이 올바른지 알고 싶습니다. 왜 그런가? – PiggyGenius

+0

이 코드에서 얻은 다양한 결과와 "약간 다른"다른 방법의 다른 결과를 게시 할 것을 제안하십시오. – chux

답변

3

표준 정규 누적 분포 함수는 정확히 (1/2)*(1 + erf(z/sqrt(2)))입니다. 여기서 erf은 많은 C 프로그래밍 라이브러리에서 발견되는 가우스 오차 함수입니다. 사용중인 개발 환경을 확인하십시오. erf이 이미 해당 라이브러리 중 하나에 포함되어있는 것이 좋습니다.

+1

예를 들어 Linux (http://man7.org/linux/man-pages/man3/erf.3.html)에서; Windows (http://msdn.microsoft.com/en-us/library/hh308428.aspx)에서; Boost (http://www.boost.org/doc/libs/1_39_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_function.html). –

+0

대단히 고맙습니다. 나중에 알려 드리겠습니다. – PiggyGenius

+0

빠른 업데이트, erf는 math.h에 있습니다. Robert Dodier가 말했습니다. 나는 그의 솔루션을 구현했으며 완벽하게 작동합니다. 고맙습니다. – PiggyGenius