private static function PHPExcel_Calculation_Statistical::_inverse_ncdf3 in Loft Data Grids 6.2
Same name and namespace in other branches
- 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php \PHPExcel_Calculation_Statistical::_inverse_ncdf3()
File
- vendor/
phpoffice/ phpexcel/ Classes/ PHPExcel/ Calculation/ Statistical.php, line 586
Class
- PHPExcel_Calculation_Statistical
- PHPExcel_Calculation_Statistical
Code
private static function _inverse_ncdf3($p) {
// ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3.
// Produces the normal deviate Z corresponding to a given lower
// tail area of P; Z is accurate to about 1 part in 10**16.
//
// This is a PHP version of the original FORTRAN code that can
// be found at http://lib.stat.cmu.edu/apstat/
$split1 = 0.425;
$split2 = 5;
$const1 = 0.180625;
$const2 = 1.6;
// coefficients for p close to 0.5
$a0 = 3.3871328727963665;
$a1 = 133.14166789178438;
$a2 = 1971.5909503065513;
$a3 = 13731.69376550946;
$a4 = 45921.95393154987;
$a5 = 67265.77092700871;
$a6 = 33430.57558358813;
$a7 = 2509.0809287301227;
$b1 = 42.31333070160091;
$b2 = 687.1870074920579;
$b3 = 5394.196021424751;
$b4 = 21213.794301586597;
$b5 = 39307.89580009271;
$b6 = 28729.085735721943;
$b7 = 5226.495278852854;
// coefficients for p not close to 0, 0.5 or 1.
$c0 = 1.4234371107496835;
$c1 = 4.630337846156546;
$c2 = 5.769497221460691;
$c3 = 3.6478483247632045;
$c4 = 1.2704582524523684;
$c5 = 0.2417807251774506;
$c6 = 0.022723844989269184;
$c7 = 0.0007745450142783414;
$d1 = 2.053191626637759;
$d2 = 1.6763848301838038;
$d3 = 0.6897673349851;
$d4 = 0.14810397642748008;
$d5 = 0.015198666563616457;
$d6 = 0.0005475938084995345;
$d7 = 1.0507500716444169E-9;
// coefficients for p near 0 or 1.
$e0 = 6.657904643501103;
$e1 = 5.463784911164114;
$e2 = 1.7848265399172913;
$e3 = 0.29656057182850487;
$e4 = 0.026532189526576124;
$e5 = 0.0012426609473880784;
$e6 = 2.7115555687434876E-5;
$e7 = 2.0103343992922881E-7;
$f1 = 0.599832206555888;
$f2 = 0.1369298809227358;
$f3 = 0.014875361290850615;
$f4 = 0.0007868691311456133;
$f5 = 1.8463183175100548E-5;
$f6 = 1.421511758316446E-7;
$f7 = 2.0442631033899397E-15;
$q = $p - 0.5;
// computation for p close to 0.5
if (abs($q) <= split1) {
$R = $const1 - $q * $q;
$z = $q * ((((((($a7 * $R + $a6) * $R + $a5) * $R + $a4) * $R + $a3) * $R + $a2) * $R + $a1) * $R + $a0) / ((((((($b7 * $R + $b6) * $R + $b5) * $R + $b4) * $R + $b3) * $R + $b2) * $R + $b1) * $R + 1);
}
else {
if ($q < 0) {
$R = $p;
}
else {
$R = 1 - $p;
}
$R = pow(-log($R), 2);
// computation for p not close to 0, 0.5 or 1.
if ($R <= $split2) {
$R = $R - $const2;
$z = ((((((($c7 * $R + $c6) * $R + $c5) * $R + $c4) * $R + $c3) * $R + $c2) * $R + $c1) * $R + $c0) / ((((((($d7 * $R + $d6) * $R + $d5) * $R + $d4) * $R + $d3) * $R + $d2) * $R + $d1) * $R + 1);
}
else {
// computation for p near 0 or 1.
$R = $R - $split2;
$z = ((((((($e7 * $R + $e6) * $R + $e5) * $R + $e4) * $R + $e3) * $R + $e2) * $R + $e1) * $R + $e0) / ((((((($f7 * $R + $f6) * $R + $f5) * $R + $f4) * $R + $f3) * $R + $f2) * $R + $f1) * $R + 1);
}
if ($q < 0) {
$z = -$z;
}
}
return $z;
}