答案 0 :(得分:3)
你基本上是在这里取负数的第3个根。
在实数空间中并非总是如此。所以在某些情况下,你需要一个想象单位来解决这个等式。
对于基数为负且指数<1的情况,似乎php只输出NAN
。 1。
答案 1 :(得分:1)
正如PeeHaa所指出的那样,the docs指出,对于某些指数而言,结果可能是“奇怪的”。
代数以下是有效的:
-x^(p) == -1*(x^p)
您可以将其用作解决方法。在代码中说:
$x = pow(5,1/3)*-1;
但要警惕像m / n这样的指数,而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。
答案 2 :(得分:0)
$base=-5;
$exponent=1/3;
$result = ($base<0?-1:1)*pow(abs($base),$exponent);
对于具有均匀分母的有效性的指数是无效的,因为它产生了PHP无法处理的复数。您可以编写自己的类/函数或google它,网络中有一些,但我从未测试过。
答案 3 :(得分:0)
数学上 -5 1/3 被定义为-5的立方根,大约是-1.71。
但是,没有办法精确地表示浮点数的1/3。所以,你要求PHP计算类似-5 0.33333333333333331482961 的东西。
现在,如果该指数的精确理性扩张具有均匀分母,则结果纯粹是虚构的。如果确切的理性扩张具有奇数分母,则结果纯粹是真实的。问题在于,由于精度不够,无法确定分母是“偶数”还是“奇数”。
所以,PHP并不打扰。它只是告诉你,你不能这样做,这就是故事的结局。