Math.pow(9,18)和9 ^ 18之间有什么区别?

Jav*_*ser 8 java floating-accuracy pow

我用的时候 Math.pow(9, 18) =150094635296999136

当我使用网络计算器9 ^ 18 = 150094635296999121(http://web2.0calc.com/)

当我使用谷歌计算器9 ^ 18 = 1.50094635×10 ^ 17

为什么会有所不同?

Jos*_*Lee 16

在该范围内,连续double值之间的差值为32. 150094635296999121是一个整数的正确答案,但该数字不能精确表示为a double.

您可以BigInteger用来获得确切的答案:

Math.pow(9, 18) == 150094635296999136
BigInteger.valueOf(9).pow(18) == 150094635296999121
Run Code Online (Sandbox Code Playgroud)