4

PHPpow()不想处理以下内容:

 pow(-5,1/3);

虽然实际上它应该工作。我怎样才能在 PHP 中做到这一点?

4

4 回答 4

3

你基本上在这里取负数的第三根。

这在实数空间中并不总是可能的。因此,在某些情况下,您需要一个虚数单位来求解该方程。

似乎 php 只输出NAN底数为负且指数 < 1 的情况。

于 2013-03-24T21:30:41.017 回答
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。

于 2013-03-24T21:38:05.667 回答
0

数学上-5 1/3被简单地定义为 -5 的立方根,约为 -1.71。

但是,没有办法精确地表示浮点数的 1/3。所以,你要求 PHP 计算类似 -5 0.33333333333333331482961的东西。

现在,如果该指数的精确有理展开式有一个偶数分母,则结果纯属虚构。如果精确的有理展开式有一个奇数分母,则结果是纯实数。问题是由于精度不够,无法确定分母是“偶数”还是“奇数”。

所以,PHP 不会打扰。它只是告诉你你做不到,这就是故事的结局。

于 2013-03-24T22:08:07.017 回答
0
$base=-5;
$exponent=1/3;

$result = ($base<0?-1:1)*pow(abs($base),$exponent);

它对于具有偶数分母的有理数是无效的,因为它会产生 PHP 无法处理的复数。您可以编写自己的类/函数或用谷歌搜索,网上有一些,但我从未测试过。

于 2013-03-24T21:52:13.467 回答