| 119342 | // the erfinv function" by Mike Giles, GPU Computing Gems, volume 2, 2010. |
| 119343 | // Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0 |
| 119344 | function erfinv(x) { |
| 119345 | // beware that the logarithm argument must be |
| 119346 | // commputed as (1.0 - x) * (1.0 + x), |
| 119347 | // it must NOT be simplified as 1.0 - x * x as this |
| 119348 | // would induce rounding errors near the boundaries +/-1 |
| 119349 | let w = -Math.log((1 - x) * (1 + x)), p; |
| 119350 | if (w < 6.25) { |
| 119351 | w -= 3.125; |
| 119352 | p = -0.00000000000000000000364441206401782; |
| 119353 | p = -0.00000000000000000016850591381820166 + p * w; |
| 119354 | p = 1.2858480715256400167e-18 + p * w; |
| 119355 | p = 1.115787767802518096e-17 + p * w; |
| 119356 | p = -0.0000000000000001333171662854621 + p * w; |
| 119357 | p = 2.0972767875968561637e-17 + p * w; |
| 119358 | p = 6.6376381343583238325e-15 + p * w; |
| 119359 | p = -0.00000000000004054566272975207 + p * w; |
| 119360 | p = -0.00000000000008151934197605472 + p * w; |
| 119361 | p = 2.6335093153082322977e-12 + p * w; |
| 119362 | p = -0.000000000012975133253453532 + p * w; |
| 119363 | p = -0.00000000005415412054294628 + p * w; |
| 119364 | p = 1.051212273321532285e-09 + p * w; |
| 119365 | p = -0.000000004112633980346984 + p * w; |
| 119366 | p = -0.000000029070369957882005 + p * w; |
| 119367 | p = 4.2347877827932403518e-07 + p * w; |
| 119368 | p = -0.0000013654692000834679 + p * w; |
| 119369 | p = -0.000013882523362786469 + p * w; |
| 119370 | p = 0.0001867342080340571352 + p * w; |
| 119371 | p = -0.000740702534166267 + p * w; |
| 119372 | p = -0.006033670871430149 + p * w; |
| 119373 | p = 0.24015818242558961693 + p * w; |
| 119374 | p = 1.6536545626831027356 + p * w; |
| 119375 | } else if (w < 16.0) { |
| 119376 | w = Math.sqrt(w) - 3.25; |
| 119377 | p = 2.2137376921775787049e-09; |
| 119378 | p = 9.0756561938885390979e-08 + p * w; |
| 119379 | p = -0.00000027517406297064545 + p * w; |
| 119380 | p = 1.8239629214389227755e-08 + p * w; |
| 119381 | p = 1.5027403968909827627e-06 + p * w; |
| 119382 | p = -0.000004013867526981546 + p * w; |
| 119383 | p = 2.9234449089955446044e-06 + p * w; |
| 119384 | p = 1.2475304481671778723e-05 + p * w; |
| 119385 | p = -0.000047318229009055734 + p * w; |
| 119386 | p = 6.8284851459573175448e-05 + p * w; |
| 119387 | p = 2.4031110387097893999e-05 + p * w; |
| 119388 | p = -0.0003550375203628475 + p * w; |
| 119389 | p = 0.00095328937973738049703 + p * w; |
| 119390 | p = -0.0016882755560235047 + p * w; |
| 119391 | p = 0.0024914420961078508066 + p * w; |
| 119392 | p = -0.003751208507569241 + p * w; |
| 119393 | p = 0.005370914553590063617 + p * w; |
| 119394 | p = 1.0052589676941592334 + p * w; |
| 119395 | p = 3.0838856104922207635 + p * w; |
| 119396 | } else if (Number.isFinite(w)) { |
| 119397 | w = Math.sqrt(w) - 5.0; |
| 119398 | p = -0.000000000027109920616438573; |
| 119399 | p = -0.0000000002555641816996525 + p * w; |
| 119400 | p = 1.5076572693500548083e-09 + p * w; |
| 119401 | p = -0.000000003789465440126737 + p * w; |