为什么从2.99999...
中减去3
时会出现奇怪的结果?
scala> math.sqrt(3)
res0: Double = 1.7320508075688772
scala> math.pow(res0, 2)
res1: Double = 2.9999999999999996
scala> 3 - res1
res2: Double = 4.440892098500626E-16
答案 0 :(得分:7)
这是由于浮点精度;有充分证据的 What range of numbers can be represented in a 16-, 32- and 64-bit IEEE-754 systems?
此外,值得注意的是,完美的计算机无法用十进制表示sqrt(3),因为它是不合理的!
你真的认为sqrt(3)等于正好 1.7320508075688772吗?
答案 1 :(得分:3)
这是指数表示法。 4次10 ^( - 16)看起来对我来说是正确的(在浮点精度的限制范围内)。