Pour le fun, petit calcul pouvant être faux (awk,perl5,python)
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:
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:
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:
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:
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:
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.