Bonjour,
Suite à la lecture sur un tutoriel de perl6 sur ce site où il est fait mention de cette erreur, la voici montré ici via awk, mais que l'on rencontre dans presque tous les langages:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
$ awk 'BEGIN{print 0.3-0.2}'
0.1
$ awk 'BEGIN{print 0.3-0.1}'
0.2
$ awk 'BEGIN{print 0.3-0.2-0.0}'
0.1
$ awk 'BEGIN{print 0.3-0.2-0.1}'
-2.77556e-17
Bon, là, on voit que le dernier calcul est faux...
Par contre, ce que je trouve gênant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$ awk 'BEGIN{printf("%f\n",0.3-0.2-0.1)}'
-0.000000
Et c'est pareil en perl5 ou python (2 ou 3)...
Python2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ python -c 'print "%f" % (0.3-0.2-0.1)'
-0.000000
$ python -c 'print 0.3-0.2-0.1'
-2.77555756156e-17
Python3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ python3 -c 'print( "%f" % (0.3-0.2-0.1))'
-0.000000
$ python3 -c 'print((0.3-0.2-0.1))'
-2.7755575615628914e-17
Perl5:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ perl -e 'printf("%f\n",0.3-0.2-0.1)'
-0.000000
$ perl -e 'print 0.3-0.2-0.1."\n"'
-2.77555756156289e-17
Note d'Attention: les résultats bons sont liés au fait que l'on représente les nombres en tant que flottant et non en tant qu'exposant.