Minor tweaks to Excel functions to handle envelope cases
git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@85631 2327b42d-5241-43d6-9e2a-de5ac946f064
This commit is contained in:
parent
508be392e7
commit
f9e719dc52
|
@ -744,9 +744,11 @@ class PHPExcel_Calculation_Engineering {
|
||||||
*
|
*
|
||||||
* Returns the modified Bessel function, which is equivalent to the Bessel function evaluated for purely imaginary arguments
|
* Returns the modified Bessel function, which is equivalent to the Bessel function evaluated for purely imaginary arguments
|
||||||
*
|
*
|
||||||
|
* @TODO Better handling of the approximation method to support the differences between Excel/Gnumeric and Open/Libre Office
|
||||||
|
*
|
||||||
* @param float $x
|
* @param float $x
|
||||||
* @param float $n
|
* @param float $n
|
||||||
* @return int
|
* @return float
|
||||||
*/
|
*/
|
||||||
public static function BESSELI($x, $n) {
|
public static function BESSELI($x, $n) {
|
||||||
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
||||||
|
@ -757,26 +759,26 @@ class PHPExcel_Calculation_Engineering {
|
||||||
if ($n < 0) {
|
if ($n < 0) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
}
|
}
|
||||||
$f_2_PI = 2 * M_PI;
|
|
||||||
|
|
||||||
if (abs($x) <= 30) {
|
if (abs($x) <= 30) {
|
||||||
$fTerm = pow($x / 2, $n) / PHPExcel_Calculation_MathTrig::FACT($n);
|
$fResult = $fTerm = pow($x / 2, $n) / PHPExcel_Calculation_MathTrig::FACT($n);
|
||||||
$nK = 1;
|
$nK = 1;
|
||||||
$fResult = $fTerm;
|
|
||||||
$fSqrX = ($x * $x) / 4;
|
$fSqrX = ($x * $x) / 4;
|
||||||
do {
|
do {
|
||||||
$fTerm *= $fSqrX;
|
$fTerm *= $fSqrX;
|
||||||
$fTerm /= ($nK * ($nK + $n));
|
$fTerm /= ($nK * ($nK + $n));
|
||||||
$fResult += $fTerm;
|
$fResult += $fTerm;
|
||||||
} while ((abs($fTerm) > 1e-10) && (++$nK < 100));
|
} while ((abs($fTerm) > 1e-12) && (++$nK < 100));
|
||||||
} else {
|
} else {
|
||||||
|
$f_2_PI = 2 * M_PI;
|
||||||
|
|
||||||
$fXAbs = abs($x);
|
$fXAbs = abs($x);
|
||||||
$fResult = exp($fXAbs) / sqrt($f_2_PI * $fXAbs);
|
$fResult = exp($fXAbs) / sqrt($f_2_PI * $fXAbs);
|
||||||
if (($n && 1) && ($x < 0)) {
|
if (($n & 1) && ($x < 0)) {
|
||||||
$fResult = -$fResult;
|
$fResult = -$fResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $fResult;
|
return (is_nan($fResult)) ? PHPExcel_Calculation_Functions::NaN() : $fResult;
|
||||||
}
|
}
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
return PHPExcel_Calculation_Functions::VALUE();
|
||||||
} // function BESSELI()
|
} // function BESSELI()
|
||||||
|
@ -787,9 +789,11 @@ class PHPExcel_Calculation_Engineering {
|
||||||
*
|
*
|
||||||
* Returns the Bessel function
|
* Returns the Bessel function
|
||||||
*
|
*
|
||||||
|
* @TODO Better handling of the approximation method to support the differences between Excel/Gnumeric and Open/Libre Office
|
||||||
|
*
|
||||||
* @param float $x
|
* @param float $x
|
||||||
* @param float $n
|
* @param float $n
|
||||||
* @return int
|
* @return float
|
||||||
*/
|
*/
|
||||||
public static function BESSELJ($x, $n) {
|
public static function BESSELJ($x, $n) {
|
||||||
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
||||||
|
@ -800,28 +804,28 @@ class PHPExcel_Calculation_Engineering {
|
||||||
if ($n < 0) {
|
if ($n < 0) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
}
|
}
|
||||||
$f_PI_DIV_2 = M_PI / 2;
|
|
||||||
$f_PI_DIV_4 = M_PI / 4;
|
|
||||||
|
|
||||||
$fResult = 0;
|
$fResult = 0;
|
||||||
if (abs($x) <= 30) {
|
if (abs($x) <= 30) {
|
||||||
$fTerm = pow($x / 2, $n) / PHPExcel_Calculation_MathTrig::FACT($n);
|
$fResult = $fTerm = pow($x / 2, $n) / PHPExcel_Calculation_MathTrig::FACT($n);
|
||||||
$nK = 1;
|
$nK = 1;
|
||||||
$fResult = $fTerm;
|
|
||||||
$fSqrX = ($x * $x) / -4;
|
$fSqrX = ($x * $x) / -4;
|
||||||
do {
|
do {
|
||||||
$fTerm *= $fSqrX;
|
$fTerm *= $fSqrX;
|
||||||
$fTerm /= ($nK * ($nK + $n));
|
$fTerm /= ($nK * ($nK + $n));
|
||||||
$fResult += $fTerm;
|
$fResult += $fTerm;
|
||||||
} while ((abs($fTerm) > 1e-10) && (++$nK < 100));
|
} while ((abs($fTerm) > 1e-12) && (++$nK < 100));
|
||||||
} else {
|
} else {
|
||||||
|
$f_PI_DIV_2 = M_PI / 2;
|
||||||
|
$f_PI_DIV_4 = M_PI / 4;
|
||||||
|
|
||||||
$fXAbs = abs($x);
|
$fXAbs = abs($x);
|
||||||
$fResult = sqrt(M_2DIVPI / $fXAbs) * cos($fXAbs - $n * $f_PI_DIV_2 - $f_PI_DIV_4);
|
$fResult = sqrt(M_2DIVPI / $fXAbs) * cos($fXAbs - $n * $f_PI_DIV_2 - $f_PI_DIV_4);
|
||||||
if (($n && 1) && ($x < 0)) {
|
if (($n & 1) && ($x < 0)) {
|
||||||
$fResult = -$fResult;
|
$fResult = -$fResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $fResult;
|
return (is_nan($fResult)) ? PHPExcel_Calculation_Functions::NaN() : $fResult;
|
||||||
}
|
}
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
return PHPExcel_Calculation_Functions::VALUE();
|
||||||
} // function BESSELJ()
|
} // function BESSELJ()
|
||||||
|
@ -893,7 +897,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$fBk = $fBkp;
|
$fBk = $fBkp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $fBk;
|
return (is_nan($fBk)) ? PHPExcel_Calculation_Functions::NaN() : $fBk;
|
||||||
}
|
}
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
return PHPExcel_Calculation_Functions::VALUE();
|
||||||
} // function BESSELK()
|
} // function BESSELK()
|
||||||
|
@ -904,14 +908,14 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$y = ($fNum * $fNum);
|
$y = ($fNum * $fNum);
|
||||||
$f1 = -2957821389.0 + $y * (7062834065.0 + $y * (-512359803.6 + $y * (10879881.29 + $y * (-86327.92757 + $y * 228.4622733))));
|
$f1 = -2957821389.0 + $y * (7062834065.0 + $y * (-512359803.6 + $y * (10879881.29 + $y * (-86327.92757 + $y * 228.4622733))));
|
||||||
$f2 = 40076544269.0 + $y * (745249964.8 + $y * (7189466.438 + $y * (47447.26470 + $y * (226.1030244 + $y))));
|
$f2 = 40076544269.0 + $y * (745249964.8 + $y * (7189466.438 + $y * (47447.26470 + $y * (226.1030244 + $y))));
|
||||||
$fRet = $f1 / $f2 + M_2DIVPI * self::BESSELJ($fNum, 0) * log($fNum);
|
$fRet = $f1 / $f2 + 0.636619772 * self::BESSELJ($fNum, 0) * log($fNum);
|
||||||
} else {
|
} else {
|
||||||
$z = 8.0 / $fNum;
|
$z = 8.0 / $fNum;
|
||||||
$y = ($z * $z);
|
$y = ($z * $z);
|
||||||
$xx = $fNum - 0.785398164;
|
$xx = $fNum - 0.785398164;
|
||||||
$f1 = 1 + $y * (-0.1098628627e-2 + $y * (0.2734510407e-4 + $y * (-0.2073370639e-5 + $y * 0.2093887211e-6)));
|
$f1 = 1 + $y * (-0.1098628627e-2 + $y * (0.2734510407e-4 + $y * (-0.2073370639e-5 + $y * 0.2093887211e-6)));
|
||||||
$f2 = -0.1562499995e-1 + $y * (0.1430488765e-3 + $y * (-0.6911147651e-5 + $y * (0.7621095161e-6 + $y * (-0.934945152e-7))));
|
$f2 = -0.1562499995e-1 + $y * (0.1430488765e-3 + $y * (-0.6911147651e-5 + $y * (0.7621095161e-6 + $y * (-0.934945152e-7))));
|
||||||
$fRet = sqrt(M_2DIVPI / $fNum) * (sin($xx) * $f1 + $z * cos($xx) * $f2);
|
$fRet = sqrt(0.636619772 / $fNum) * (sin($xx) * $f1 + $z * cos($xx) * $f2);
|
||||||
}
|
}
|
||||||
return $fRet;
|
return $fRet;
|
||||||
} // function _Bessely0()
|
} // function _Bessely0()
|
||||||
|
@ -924,16 +928,16 @@ class PHPExcel_Calculation_Engineering {
|
||||||
(-0.4237922726e7 + $y * 0.8511937935e4)))));
|
(-0.4237922726e7 + $y * 0.8511937935e4)))));
|
||||||
$f2 = 0.2499580570e14 + $y * (0.4244419664e12 + $y * (0.3733650367e10 + $y * (0.2245904002e8 + $y *
|
$f2 = 0.2499580570e14 + $y * (0.4244419664e12 + $y * (0.3733650367e10 + $y * (0.2245904002e8 + $y *
|
||||||
(0.1020426050e6 + $y * (0.3549632885e3 + $y)))));
|
(0.1020426050e6 + $y * (0.3549632885e3 + $y)))));
|
||||||
$fRet = $f1 / $f2 + M_2DIVPI * ( self::BESSELJ($fNum, 1) * log($fNum) - 1 / $fNum);
|
$fRet = $f1 / $f2 + 0.636619772 * ( self::BESSELJ($fNum, 1) * log($fNum) - 1 / $fNum);
|
||||||
} else {
|
} else {
|
||||||
$z = 8.0 / $fNum;
|
// $z = 8.0 / $fNum;
|
||||||
$y = ($z * $z);
|
// $y = ($z * $z);
|
||||||
$xx = $fNum - 2.356194491;
|
// $xx = $fNum - 2.356194491;
|
||||||
$f1 = 1 + $y * (0.183105e-2 + $y * (-0.3516396496e-4 + $y * (0.2457520174e-5 + $y * (-0.240337019e6))));
|
// $f1 = 1 + $y * (0.183105e-2 + $y * (-0.3516396496e-4 + $y * (0.2457520174e-5 + $y * (-0.240337019e6))));
|
||||||
$f2 = 0.04687499995 + $y * (-0.2002690873e-3 + $y * (0.8449199096e-5 + $y * (-0.88228987e-6 + $y * 0.105787412e-6)));
|
// $f2 = 0.04687499995 + $y * (-0.2002690873e-3 + $y * (0.8449199096e-5 + $y * (-0.88228987e-6 + $y * 0.105787412e-6)));
|
||||||
$fRet = sqrt(M_2DIVPI / $fNum) * (sin($xx) * $f1 + $z * cos($xx) * $f2);
|
// $fRet = sqrt(0.636619772 / $fNum) * (sin($xx) * $f1 + $z * cos($xx) * $f2);
|
||||||
#i12430# ...but this seems to work much better.
|
#i12430# ...but this seems to work much better.
|
||||||
// $fRet = sqrt(M_2DIVPI / $fNum) * sin($fNum - 2.356194491);
|
$fRet = sqrt(0.636619772 / $fNum) * sin($fNum - 2.356194491);
|
||||||
}
|
}
|
||||||
return $fRet;
|
return $fRet;
|
||||||
} // function _Bessely1()
|
} // function _Bessely1()
|
||||||
|
@ -946,7 +950,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
*
|
*
|
||||||
* @param float $x
|
* @param float $x
|
||||||
* @param float $n
|
* @param float $n
|
||||||
* @return int
|
* @return float
|
||||||
*/
|
*/
|
||||||
public static function BESSELY($x, $ord) {
|
public static function BESSELY($x, $ord) {
|
||||||
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
$x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
||||||
|
@ -971,7 +975,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$fBy = $fByp;
|
$fBy = $fByp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $fBy;
|
return (is_nan($fBy)) ? PHPExcel_Calculation_Functions::NaN() : $fBy;
|
||||||
}
|
}
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
return PHPExcel_Calculation_Functions::VALUE();
|
||||||
} // function BESSELY()
|
} // function BESSELY()
|
||||||
|
@ -1022,7 +1026,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function BINTOHEX($x, $places=null) {
|
public static function BINTOHEX($x, $places=null) {
|
||||||
$x = floor(PHPExcel_Calculation_Functions::flattenSingleValue($x));
|
$x = PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
||||||
$places = PHPExcel_Calculation_Functions::flattenSingleValue($places);
|
$places = PHPExcel_Calculation_Functions::flattenSingleValue($places);
|
||||||
|
|
||||||
if (is_bool($x)) {
|
if (is_bool($x)) {
|
||||||
|
@ -1060,7 +1064,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function BINTOOCT($x, $places=null) {
|
public static function BINTOOCT($x, $places=null) {
|
||||||
$x = floor(PHPExcel_Calculation_Functions::flattenSingleValue($x));
|
$x = PHPExcel_Calculation_Functions::flattenSingleValue($x);
|
||||||
$places = PHPExcel_Calculation_Functions::flattenSingleValue($places);
|
$places = PHPExcel_Calculation_Functions::flattenSingleValue($places);
|
||||||
|
|
||||||
if (is_bool($x)) {
|
if (is_bool($x)) {
|
||||||
|
@ -1348,12 +1352,15 @@ class PHPExcel_Calculation_Engineering {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function COMPLEX($realNumber=0.0, $imaginary=0.0, $suffix='i') {
|
public static function COMPLEX($realNumber=0.0, $imaginary=0.0, $suffix='i') {
|
||||||
$realNumber = (is_null($realNumber)) ? 0.0 : (float) PHPExcel_Calculation_Functions::flattenSingleValue($realNumber);
|
$realNumber = (is_null($realNumber)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($realNumber);
|
||||||
$imaginary = (is_null($imaginary)) ? 0.0 : (float) PHPExcel_Calculation_Functions::flattenSingleValue($imaginary);
|
$imaginary = (is_null($imaginary)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($imaginary);
|
||||||
$suffix = (is_null($suffix)) ? 'i' : PHPExcel_Calculation_Functions::flattenSingleValue($suffix);
|
$suffix = (is_null($suffix)) ? 'i' : PHPExcel_Calculation_Functions::flattenSingleValue($suffix);
|
||||||
|
|
||||||
if (((is_numeric($realNumber)) && (is_numeric($imaginary))) &&
|
if (((is_numeric($realNumber)) && (is_numeric($imaginary))) &&
|
||||||
(($suffix == 'i') || ($suffix == 'j') || ($suffix == ''))) {
|
(($suffix == 'i') || ($suffix == 'j') || ($suffix == ''))) {
|
||||||
|
$realNumber = (float) $realNumber;
|
||||||
|
$imaginary = (float) $imaginary;
|
||||||
|
|
||||||
if ($suffix == '') $suffix = 'i';
|
if ($suffix == '') $suffix = 'i';
|
||||||
if ($realNumber == 0.0) {
|
if ($realNumber == 0.0) {
|
||||||
if ($imaginary == 0.0) {
|
if ($imaginary == 0.0) {
|
||||||
|
@ -1391,9 +1398,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
return $parsedComplex['imaginary'];
|
return $parsedComplex['imaginary'];
|
||||||
} // function IMAGINARY()
|
} // function IMAGINARY()
|
||||||
|
|
||||||
|
@ -1410,9 +1414,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
return $parsedComplex['real'];
|
return $parsedComplex['real'];
|
||||||
} // function IMREAL()
|
} // function IMREAL()
|
||||||
|
|
||||||
|
@ -1429,9 +1430,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
return sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']));
|
return sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']));
|
||||||
} // function IMABS()
|
} // function IMABS()
|
||||||
|
|
||||||
|
@ -1448,9 +1447,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($parsedComplex['real'] == 0.0) {
|
if ($parsedComplex['real'] == 0.0) {
|
||||||
if ($parsedComplex['imaginary'] == 0.0) {
|
if ($parsedComplex['imaginary'] == 0.0) {
|
||||||
|
@ -1483,10 +1479,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
|
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($parsedComplex['imaginary'] == 0.0) {
|
if ($parsedComplex['imaginary'] == 0.0) {
|
||||||
return $parsedComplex['real'];
|
return $parsedComplex['real'];
|
||||||
} else {
|
} else {
|
||||||
|
@ -1507,9 +1499,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($parsedComplex['imaginary'] == 0.0) {
|
if ($parsedComplex['imaginary'] == 0.0) {
|
||||||
return cos($parsedComplex['real']);
|
return cos($parsedComplex['real']);
|
||||||
|
@ -1531,9 +1520,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($parsedComplex['imaginary'] == 0.0) {
|
if ($parsedComplex['imaginary'] == 0.0) {
|
||||||
return sin($parsedComplex['real']);
|
return sin($parsedComplex['real']);
|
||||||
|
@ -1555,9 +1541,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
$theta = self::IMARGUMENT($complexNumber);
|
$theta = self::IMARGUMENT($complexNumber);
|
||||||
$d1 = cos($theta / 2);
|
$d1 = cos($theta / 2);
|
||||||
|
@ -1584,9 +1567,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
|
@ -1615,9 +1595,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
|
@ -1641,9 +1618,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
|
@ -1667,9 +1641,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
$complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber);
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) {
|
||||||
return '1';
|
return '1';
|
||||||
|
@ -1704,9 +1675,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
}
|
}
|
||||||
|
|
||||||
$parsedComplex = self::_parseComplex($complexNumber);
|
$parsedComplex = self::_parseComplex($complexNumber);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']));
|
$r = sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']));
|
||||||
$rPower = pow($r,$realNumber);
|
$rPower = pow($r,$realNumber);
|
||||||
|
@ -1735,14 +1703,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexDivisor = PHPExcel_Calculation_Functions::flattenSingleValue($complexDivisor);
|
$complexDivisor = PHPExcel_Calculation_Functions::flattenSingleValue($complexDivisor);
|
||||||
|
|
||||||
$parsedComplexDividend = self::_parseComplex($complexDividend);
|
$parsedComplexDividend = self::_parseComplex($complexDividend);
|
||||||
if (!is_array($parsedComplexDividend)) {
|
|
||||||
return $parsedComplexDividend;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parsedComplexDivisor = self::_parseComplex($complexDivisor);
|
$parsedComplexDivisor = self::_parseComplex($complexDivisor);
|
||||||
if (!is_array($parsedComplexDivisor)) {
|
|
||||||
return $parsedComplexDividend;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] != '') &&
|
if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] != '') &&
|
||||||
($parsedComplexDividend['suffix'] != $parsedComplexDivisor['suffix'])) {
|
($parsedComplexDividend['suffix'] != $parsedComplexDivisor['suffix'])) {
|
||||||
|
@ -1783,14 +1744,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$complexNumber2 = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber2);
|
$complexNumber2 = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber2);
|
||||||
|
|
||||||
$parsedComplex1 = self::_parseComplex($complexNumber1);
|
$parsedComplex1 = self::_parseComplex($complexNumber1);
|
||||||
if (!is_array($parsedComplex1)) {
|
|
||||||
return $parsedComplex1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parsedComplex2 = self::_parseComplex($complexNumber2);
|
$parsedComplex2 = self::_parseComplex($complexNumber2);
|
||||||
if (!is_array($parsedComplex2)) {
|
|
||||||
return $parsedComplex2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((($parsedComplex1['suffix'] != '') && ($parsedComplex2['suffix'] != '')) &&
|
if ((($parsedComplex1['suffix'] != '') && ($parsedComplex2['suffix'] != '')) &&
|
||||||
($parsedComplex1['suffix'] != $parsedComplex2['suffix'])) {
|
($parsedComplex1['suffix'] != $parsedComplex2['suffix'])) {
|
||||||
|
@ -1823,9 +1777,6 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
||||||
foreach ($aArgs as $arg) {
|
foreach ($aArgs as $arg) {
|
||||||
$parsedComplex = self::_parseComplex($arg);
|
$parsedComplex = self::_parseComplex($arg);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($activeSuffix == '') {
|
if ($activeSuffix == '') {
|
||||||
$activeSuffix = $parsedComplex['suffix'];
|
$activeSuffix = $parsedComplex['suffix'];
|
||||||
|
@ -1859,9 +1810,7 @@ class PHPExcel_Calculation_Engineering {
|
||||||
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
||||||
foreach ($aArgs as $arg) {
|
foreach ($aArgs as $arg) {
|
||||||
$parsedComplex = self::_parseComplex($arg);
|
$parsedComplex = self::_parseComplex($arg);
|
||||||
if (!is_array($parsedComplex)) {
|
|
||||||
return $parsedComplex;
|
|
||||||
}
|
|
||||||
$workValue = $returnValue;
|
$workValue = $returnValue;
|
||||||
if (($parsedComplex['suffix'] != '') && ($activeSuffix == '')) {
|
if (($parsedComplex['suffix'] != '') && ($activeSuffix == '')) {
|
||||||
$activeSuffix = $parsedComplex['suffix'];
|
$activeSuffix = $parsedComplex['suffix'];
|
||||||
|
|
|
@ -179,7 +179,11 @@ class PHPExcel_Calculation_MathTrig {
|
||||||
|
|
||||||
if (is_null($number)) {
|
if (is_null($number)) {
|
||||||
return 0;
|
return 0;
|
||||||
} elseif (is_numeric($number)) {
|
} elseif (is_bool($number)) {
|
||||||
|
$number = (int) $number;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_numeric($number)) {
|
||||||
$significance = 2 * self::SIGN($number);
|
$significance = 2 * self::SIGN($number);
|
||||||
return (int) self::CEILING($number,$significance);
|
return (int) self::CEILING($number,$significance);
|
||||||
}
|
}
|
||||||
|
@ -228,9 +232,10 @@ class PHPExcel_Calculation_MathTrig {
|
||||||
* @return int Double Factorial
|
* @return int Double Factorial
|
||||||
*/
|
*/
|
||||||
public static function FACTDOUBLE($factVal) {
|
public static function FACTDOUBLE($factVal) {
|
||||||
$factLoop = floor(PHPExcel_Calculation_Functions::flattenSingleValue($factVal));
|
$factLoop = PHPExcel_Calculation_Functions::flattenSingleValue($factVal);
|
||||||
|
|
||||||
if (is_numeric($factLoop)) {
|
if (is_numeric($factLoop)) {
|
||||||
|
$factLoop = floor($factLoop);
|
||||||
if ($factVal < 0) {
|
if ($factVal < 0) {
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
}
|
}
|
||||||
|
@ -289,8 +294,12 @@ class PHPExcel_Calculation_MathTrig {
|
||||||
$allPoweredFactors = array();
|
$allPoweredFactors = array();
|
||||||
// Loop through arguments
|
// Loop through arguments
|
||||||
foreach(PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $value) {
|
foreach(PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $value) {
|
||||||
if ($value == 0) {
|
if (!is_numeric($value)) {
|
||||||
|
return PHPExcel_Calculation_Functions::VALUE();
|
||||||
|
} elseif ($value == 0) {
|
||||||
break;
|
break;
|
||||||
|
} elseif($value < 0) {
|
||||||
|
return PHPExcel_Calculation_Functions::NaN();
|
||||||
}
|
}
|
||||||
$myFactors = self::_factors($value);
|
$myFactors = self::_factors($value);
|
||||||
$myCountedFactors = array_count_values($myFactors);
|
$myCountedFactors = array_count_values($myFactors);
|
||||||
|
@ -637,7 +646,11 @@ class PHPExcel_Calculation_MathTrig {
|
||||||
|
|
||||||
if (is_null($number)) {
|
if (is_null($number)) {
|
||||||
return 1;
|
return 1;
|
||||||
} elseif (is_numeric($number)) {
|
} elseif (is_bool($number)) {
|
||||||
|
$number = (int) $number;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_numeric($number)) {
|
||||||
$significance = self::SIGN($number);
|
$significance = self::SIGN($number);
|
||||||
if ($significance == 0) {
|
if ($significance == 0) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue