-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathStdNormalCDF.cpp
36 lines (25 loc) · 1.15 KB
/
StdNormalCDF.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "StdNormalCDF.h"
#include <math.h>
#include <vector>
#include <algorithm>
#include <cmath>
const double StdNormalCDF::A1 = 0.319381530;
const double StdNormalCDF::A2 = -0.35653782;
const double StdNormalCDF::A3 = 1.781477937;
const double StdNormalCDF::A4 = -1.821255978;
const double StdNormalCDF::A5 = 1.330274429;
const double StdNormalCDF::B = 0.2316419;
const double StdNormalCDF::NORMALIZER = 0.39894228; // really 1/sqrt(2*pi);
StdNormalCDF::StdNormalCDF(double x){}
double StdNormalCDF::operator()(double x) const {
double absoluteValue;
double intermediateValue;
double stdnormalCDFValue;
absoluteValue = fabs(x);
intermediateValue = 1.0 / ( 1.0 + (StdNormalCDF::B) * absoluteValue);
stdnormalCDFValue = 1.0 - (StdNormalCDF::NORMALIZER * exp(-absoluteValue *absoluteValue / 2) * (StdNormalCDF::A1 * intermediateValue + StdNormalCDF::A2 * intermediateValue *intermediateValue + StdNormalCDF::A3 * pow(intermediateValue,3) + StdNormalCDF::A4 * pow(intermediateValue,4) + StdNormalCDF::A5 * pow(intermediateValue,5)));
if(x < 0){
stdnormalCDFValue = 1.0 - stdnormalCDFValue;
}
return stdnormalCDFValue;
}