斯卡拉。浮点数的奇怪结果

时间:2013-06-07 13:25:03

标签: java scala

为什么从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

2 个答案:

答案 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)看起来对我来说是正确的(在浮点精度的限制范围内)。