在不同的编程语言中的浮点数运算
- 论坛
- 在不同的编程语言中的浮点数运算
16 浏览
在不同的编程语言中的浮点数运算
我知道浮点数运算可能会很丑陋,但我想知道是否有人可以解释以下奇怪的现象。在我测试的大多数编程语言中,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