Un flottant, est défini (sur 32 bits) par :
1 bit de signe
8 bits pour l'exposant (codé en complément à 2)
le reste (23 bits) pour la mantisse... (comprise entre 1 et 2)
Ainsi, le nombre 8 s'écrit 1.0 *2^3, soit :
(signe) + (exposant) + (mantisse)
0 + (3) + (0.0000)
soit, en binaire :
0 . 10000010 . 00000000000000000000000
Tu suis toujours ?
On prend un nombre plus difficile :
9 soit : 1,125 *2^3, soit :
(signe) + (exposant) + (mantisse)
0 + (3) + (0.1250)
soit, en binaire :
0 . 10000010 . 00100000000000000000000
Maintenant, on prend l'exemple cité :
75,32 soit 1,176875 *2^6, soit :
(signe) + (exposant) + (mantisse)
0 + (6) + (0,176875)
en binaire :
0 . 10000101 . 00101101010001111010111
Or, cela représente une valeur de
75, 31999969482422 (+ un petit quelque chose).
Le pb du programme vient du Forcage de type (cast pour les puristes), qui tronque la valeur 7531,999969482422 en 7531.
Une belle programmation aurait plutôt fait un arrondi avant de forcer au type (int).
Morale : Des fois, un arrondi est plus préci qu'un calcul "exact" (message perso pour les fanas de la qualité max et de la précision max).
CQFD.
PS : merci de me corriger si j'ai dit une bétise... C'est fréquent quand il fait beau... :=/
[^] # Re: C'est un concours cest ca?
Posté par ceituna . En réponse au message atof : arrondi etrange. Évalué à 3.
Commençons par le début...
Un flottant, est défini (sur 32 bits) par :
1 bit de signe
8 bits pour l'exposant (codé en complément à 2)
le reste (23 bits) pour la mantisse... (comprise entre 1 et 2)
Ainsi, le nombre 8 s'écrit 1.0 *2^3, soit :
(signe) + (exposant) + (mantisse)
0 + (3) + (0.0000)
soit, en binaire :
0 . 10000010 . 00000000000000000000000
Tu suis toujours ?
On prend un nombre plus difficile :
9 soit : 1,125 *2^3, soit :
(signe) + (exposant) + (mantisse)
0 + (3) + (0.1250)
soit, en binaire :
0 . 10000010 . 00100000000000000000000
Maintenant, on prend l'exemple cité :
75,32 soit 1,176875 *2^6, soit :
(signe) + (exposant) + (mantisse)
0 + (6) + (0,176875)
en binaire :
0 . 10000101 . 00101101010001111010111
Or, cela représente une valeur de
75, 31999969482422 (+ un petit quelque chose).
Le pb du programme vient du Forcage de type (cast pour les puristes), qui tronque la valeur 7531,999969482422 en 7531.
Une belle programmation aurait plutôt fait un arrondi avant de forcer au type (int).
Morale : Des fois, un arrondi est plus préci qu'un calcul "exact" (message perso pour les fanas de la qualité max et de la précision max).
CQFD.
PS : merci de me corriger si j'ai dit une bétise... C'est fréquent quand il fait beau... :=/