PHPpow()
不想处理以下内容:
pow(-5,1/3);
虽然实际上它应该工作。我怎样才能在 PHP 中做到这一点?
你基本上在这里取负数的第三根。
这在实数空间中并不总是可能的。因此,在某些情况下,您需要一个虚数单位来求解该方程。
似乎 php 只输出NAN
底数为负且指数 < 1 的情况。
正如 PeeHaa 所指出的,文档指出,对于某些指数,结果可能是“奇怪的”。
在代数上以下是有效的:
-x^(p) == -1*(x^p)
您可以将其用作解决方法。用代码说话:
$x = pow(5,1/3)*-1;
但是要小心像 n/m 这样的指数,其中 m 是偶数!
您也可以使用以下函数来覆盖它:
function real_pow($base, $exponent){
if($base < 0){
if($exponent >= 1) return pow($base * -1, $exponent) * -1;
else{
if(is_nan(pow($base, $exponent))) return false;
else return pow($base, $exponent);
}
}else{
return pow($base, $exponent);
}
}
如果结果不是复数,此函数将返回有效的 pow。如果是,它将返回 false。
数学上-5 1/3被简单地定义为 -5 的立方根,约为 -1.71。
但是,没有办法精确地表示浮点数的 1/3。所以,你要求 PHP 计算类似 -5 0.33333333333333331482961的东西。
现在,如果该指数的精确有理展开式有一个偶数分母,则结果纯属虚构。如果精确的有理展开式有一个奇数分母,则结果是纯实数。问题是由于精度不够,无法确定分母是“偶数”还是“奇数”。
所以,PHP 不会打扰。它只是告诉你你做不到,这就是故事的结局。
$base=-5;
$exponent=1/3;
$result = ($base<0?-1:1)*pow(abs($base),$exponent);
它对于具有偶数分母的有理数是无效的,因为它会产生 PHP 无法处理的复数。您可以编写自己的类/函数或用谷歌搜索,网上有一些,但我从未测试过。