normal_dis.cc 529 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include "soap_snp.h"

double Call_win::normal_value(double z) {
	if (z>6.0 || z<-6.0) {
		return 0.0;
	}
	else {
		double b1 = 0.31938153;
		double b2 = -0.356563782;
		double b3 = 1.781477937;
		double b4 = -1.821255978;
		double b5 = 1.330274429;
		double p = 0.2316419;
		double c2 = 0.39894228;

		double a = fabs(z);
		double t = 1.0/(1.0+a*p);
		double b = c2*exp((-z)*(z/2.0));
		double n = ((((b5*t+b4)*t+b3)*t+b2)*t+b1)*t;
		n = 1.0 - b*n;
		if (z < 0.0) n = 1.0 - n;
		return n>0.5?1-n:n;
	}
}