Matemática de ponto flutuante em diferentes linguagens de programação

Eu sei que a matemática de ponto flutuante pode ser feia na melhor das hipóteses, mas estou me perguntando se alguém pode explicar a seguinte peculiaridade. Na maioria das linguagens de programação eu testei a adição de 0,4 a 0,2 deu um pequeno erro, enquanto que 0,4 + 0,1 + 0,1 deu não.

Qual é o motivo da desigualdade de ambos os cálculos e quais medidas podem ser adotadas nas respectivas linguagens de programação para obter resultados corretos.

Em python2 / 3

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

O mesmo acontece em Julia 0.3

julia> .4 + .2
0.6000000000000001

julia> .4 + .1 + .1
0.6

e Scala:

scala> 0.4 + 0.2
res0: Double = 0.6000000000000001

scala> 0.4 + 0.1 + 0.1
res1: Double = 0.6

e Haskell:

Prelude> 0.4 + 0.2
0.6000000000000001    
Prelude> 0.4 + 0.1 + 0.1
0.6

mas o R v3 acerta:

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

questionAnswers(3)

yourAnswerToTheQuestion