MCPcopy Create free account
hub / github.com/microsoft/SandDance / cumulativeNormal

Function cumulativeNormal

docs/app/js/sanddance-app.js:119302–119337  ·  view source on GitHub ↗
(value, mean, stdev)

Source from the content-addressed store, hash-verified

119300} // Approximation from West (2009)
119301// Better Approximations to Cumulative Normal Functions
119302function cumulativeNormal(value, mean, stdev) {
119303 mean = mean || 0;
119304 stdev = stdev == null ? 1 : stdev;
119305 const z = (value - mean) / stdev, Z = Math.abs(z);
119306 let cd;
119307 if (Z > 37) cd = 0;
119308 else {
119309 const exp1 = Math.exp(-Z * Z / 2);
119310 let sum;
119311 if (Z < 7.07106781186547) {
119312 sum = 3.52624965998911e-02 * Z + 0.700383064443688;
119313 sum = sum * Z + 6.37396220353165;
119314 sum = sum * Z + 33.912866078383;
119315 sum = sum * Z + 112.079291497871;
119316 sum = sum * Z + 221.213596169931;
119317 sum = sum * Z + 220.206867912376;
119318 cd = exp1 * sum;
119319 sum = 8.83883476483184e-02 * Z + 1.75566716318264;
119320 sum = sum * Z + 16.064177579207;
119321 sum = sum * Z + 86.7807322029461;
119322 sum = sum * Z + 296.564248779674;
119323 sum = sum * Z + 637.333633378831;
119324 sum = sum * Z + 793.826512519948;
119325 sum = sum * Z + 440.413735824752;
119326 cd = cd / sum;
119327 } else {
119328 sum = Z + 0.65;
119329 sum = Z + 4 / sum;
119330 sum = Z + 3 / sum;
119331 sum = Z + 2 / sum;
119332 sum = Z + 1 / sum;
119333 cd = exp1 / sum / 2.506628274631;
119334 }
119335 }
119336 return z > 0 ? 1 - cd : cd;
119337} // Approximation of Probit function using inverse error function.
119338function quantileNormal(p, mean, stdev) {
119339 if (p < 0 || p > 1) return NaN;
119340 return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);

Callers 2

gaussianFunction · 0.70
cumulativeLogNormalFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected