17-08-2010, 12:18 PM
Pas de solutions dans ce message, juste davantage d'explications.
En base 10, on connait bien le 1/3 qui ne peut pas être représenté de manière finie. On dit que 1/3 = 0.3333..., mais dès qu'on se limite à un certain nombre de chiffres significatifs, par exemple à cinq, on a le problème que 3*0.33333 ne donne pas 1 mais 0.99999. Ce problème, tout le monde le connait en base 10.
Par contre, 1/3 peut être représenté de manière finie en base 3 par exemple. Ca s'écrit 0.1. Il y a des nombres qui ont des représentations exactes dans certaines bases et pas dans d'autres.
Malheureusement, c'est le cas de 0.1 en base 2. Il ne peut pas s'écrire de manière finie. Voici la représentation de 0.1 : représentation de 0.1
Par exemple, pour la boucle suivante :
le code va être exécuté 11 fois, et non pas 10.
En base 10, on connait bien le 1/3 qui ne peut pas être représenté de manière finie. On dit que 1/3 = 0.3333..., mais dès qu'on se limite à un certain nombre de chiffres significatifs, par exemple à cinq, on a le problème que 3*0.33333 ne donne pas 1 mais 0.99999. Ce problème, tout le monde le connait en base 10.
Par contre, 1/3 peut être représenté de manière finie en base 3 par exemple. Ca s'écrit 0.1. Il y a des nombres qui ont des représentations exactes dans certaines bases et pas dans d'autres.
Malheureusement, c'est le cas de 0.1 en base 2. Il ne peut pas s'écrire de manière finie. Voici la représentation de 0.1 : représentation de 0.1
Par exemple, pour la boucle suivante :
Code :
for (i=0.0; i<1.0; i=i+0.1) { ... }