JavaScript中负数的非整数次幂问题

3
我正在编写一个脚本,在某个时候需要执行此操作:Math.pow(-2,1.5)。结果应该大约为-2.82843,但是JavaScript返回NaN。(我在Google Chrome 17和Mozilla Firefox 11中尝试过。)如果指数是整数,例如在Math.pow(-2,3)中,那么JavaScript将返回正确答案,即-8。正数也可以正确地升到非整数幂; Math.pow(2,1.5)的值约为2.8284271247461903。是否有任何方法可以让JavaScript计算负数的非整数次幂的值?
1个回答

9
Math.pow(-2, 1.5) 返回 NaN,因为没有一个实数等于 -2 的 1.5 次幂。虽然有一个具有这个特性的复数,但是 Math.pow() 不使用复数进行计算。
这个简单的转换说明了这一点:
(-2)1.5 = (-2)1 * (-2)0.5 = (-2) * sqrt(-2) = (-2) * i * sqrt(2) = -2i * sqrt(2)

有没有一个我可以在Javascript中使用来计算复数的库? - wecsam
另外,为什么如果我在计算器上输入-2^1.5,它会给我一个实数? - wecsam
很容易实现,只需要一个原型和几个函数(所需的公式都在所有复分析入门书籍中)。Google搜索可以找到这个和其他一些库。它们似乎缺少像pow()或sqrt()这样的操作,但是这些操作相对于实数函数来说相对容易表达(其中一个警告是某些复杂函数的多值性,但通常可以选择最方便的值)。 - Adam Zalcman
3
-2^1.5 不等于 Math.pow(-2, 1.5)。后者是 (-2)^1.5。JavaScript 表达式 -2^1.5 是 -Math.pow(2, 1.5),它不会返回 NaN。 - Adam Zalcman
哦,糟糕。我应该知道的。我在数学课上从未犯过这个错误,但我在数学课外却犯了。 - wecsam

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