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

Function erfinv

docs/app/js/sanddance-app.js:119344–119417  ·  view source on GitHub ↗
(x)

Source from the content-addressed store, hash-verified

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
119344function 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;

Callers 1

quantileNormalFunction · 0.70

Calls 1

logMethod · 0.45

Tested by

no test coverage detected