Я знаю, что математика с плавающей запятой может быть уродливой в лучшем случае, но мне интересно, может ли кто-нибудь объяснить следующую причуду. На большинстве языков программирования, которые я тестировал, добавление 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