PHP的pow()以负数作为输入不起作用

时间:2013-03-24 21:27:36

标签: php

PHP的pow()不想处理以下内容:

 pow(-5,1/3);

实际上它是is supposed to work。我怎么能用PHP做到这一点?

4 个答案:

答案 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并不打扰。它只是告诉你,你不能这样做,这就是故事的结局。