| 87055 | |
| 87056 | |
| 87057 | function cumulativeNormal(value, mean, stdev) { |
| 87058 | mean = mean || 0; |
| 87059 | stdev = stdev == null ? 1 : stdev; |
| 87060 | let cd, |
| 87061 | z = (value - mean) / stdev, |
| 87062 | Z = Math.abs(z); |
| 87063 | |
| 87064 | if (Z > 37) { |
| 87065 | cd = 0; |
| 87066 | } else { |
| 87067 | let sum, |
| 87068 | exp = Math.exp(-Z * Z / 2); |
| 87069 | |
| 87070 | if (Z < 7.07106781186547) { |
| 87071 | sum = 3.52624965998911e-02 * Z + 0.700383064443688; |
| 87072 | sum = sum * Z + 6.37396220353165; |
| 87073 | sum = sum * Z + 33.912866078383; |
| 87074 | sum = sum * Z + 112.079291497871; |
| 87075 | sum = sum * Z + 221.213596169931; |
| 87076 | sum = sum * Z + 220.206867912376; |
| 87077 | cd = exp * sum; |
| 87078 | sum = 8.83883476483184e-02 * Z + 1.75566716318264; |
| 87079 | sum = sum * Z + 16.064177579207; |
| 87080 | sum = sum * Z + 86.7807322029461; |
| 87081 | sum = sum * Z + 296.564248779674; |
| 87082 | sum = sum * Z + 637.333633378831; |
| 87083 | sum = sum * Z + 793.826512519948; |
| 87084 | sum = sum * Z + 440.413735824752; |
| 87085 | cd = cd / sum; |
| 87086 | } else { |
| 87087 | sum = Z + 0.65; |
| 87088 | sum = Z + 4 / sum; |
| 87089 | sum = Z + 3 / sum; |
| 87090 | sum = Z + 2 / sum; |
| 87091 | sum = Z + 1 / sum; |
| 87092 | cd = exp / sum / 2.506628274631; |
| 87093 | } |
| 87094 | } |
| 87095 | |
| 87096 | return z > 0 ? 1 - cd : cd; |
| 87097 | } // Approximation of Probit function using inverse error function. |
| 87098 | |
| 87099 | |
| 87100 | function quantileNormal(p, mean, stdev) { |