在不同的编程语言中的浮点数运算

16 浏览
0 Comments

在不同的编程语言中的浮点数运算

我知道浮点数运算可能会很丑陋,但我想知道是否有人可以解释以下奇怪的现象。在我测试的大多数编程语言中,0.4加上0.2会产生一个小错误,而0.4 + 0.1 + 0.1则没有。造成这种不平等计算的原因是什么,以及在相应的编程语言中可以采取什么措施来获得正确的结果。

在Python2/3中:

.4 + .2
0.6000000000000001
.4 + .1 + .1
0.6

在Julia 0.3中也是一样的:

julia> .4 + .2

0.6000000000000001

julia> .4 + .1 + .1

0.6

以及Scala:

scala> 0.4 + 0.2
res0: Double = 0.6000000000000001
scala> 0.4 + 0.1 + 0.1
res1: Double = 0.6

和Haskell:

Prelude> 0.4 + 0.2

0.6000000000000001

Prelude> 0.4 + 0.1 + 0.1

0.6

但是R v3则得到了正确的结果:

> .4 + .2
[1] 0.6
> .4 + .1 + .1
[1] 0.6

0