(value, mean, stdev)
| 119300 | } // Approximation from West (2009) |
| 119301 | // Better Approximations to Cumulative Normal Functions |
| 119302 | function 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. |
| 119338 | function 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); |
no outgoing calls
no test coverage detected