PHP pow函数返回NAN

3
当我执行以下命令时:
echo pow( -0.3741569180353 , 0.2 ) ;

我得到的结果是NAN

然而在Excel和计算器中,我得到的答案是-0.8215。

我有很多这样的计算,有什么解决方法可以修复这个问题吗?


3
请使用 PHP >= 5.6.0 并输入命令 echo -0.3741569180353 ** 0.2; - Mark Baker
2个回答

1
在与11号房间的专家咨询后,pow() 无法处理负数的根。答案应该是 0.8215 还是 -0.8215
有趣的是,使用 **(幂)运算符可以处理负数的根。
echo -0.3741569180353 ** 0.2 ;

由于**的优先级高于-,所以实际上你所做的是:
echo -(0.3741569180353 ** 0.2) ;

但是当我给一个变量赋值时,同样的问题$v1 = -0.3741569180353; $v2 = 0.2; echo $v1 ** $v2; - TVidz IN
$v1 = -0.3741569180353; $v2 = 0.2; echo $v1 ** $v2 ; Result : NAN echo -( abs($v1) ** $v2 ); Result : -0.82150603063756 ` - TVidz IN
1
$v1 = -0.3741569180353; $v2 = 0.2; echo $v1 ** $v2 ; 由于$v1是一个负数,所以该操作会产生一个复杂的结果,因此为NaN。echo -0.3741569180353 ** 0.2; 首先计算0.3741569180353 ** 0.2(因为**比-具有优先级),然后应用-一元运算符。 - Mark Baker
但是如果你有很多这样的计算,我建议你使用能够处理复数的库来工作。 - Mark Baker

0

给定一个负数 a,其整数次幂定义如下:

  • a00 - 通常视为正数;
  • a1a - 负数;
  • a2a*a - 正数;
  • an 对于奇数值的 n 是负数,对于偶数值的 n 是正数。

将负底数乘以非整数指数的幂是实数中没有定义的
(但在复数中定义了。)

pow() 函数是正确的。它返回NaN,因为结果不是实数。

这种行为甚至在文档的示例部分中都有明确说明:

echo pow(-1, 5.5); // PHP >=5.2.2: NAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接