• [^] # Re: C'est un concours cest ca?

    Posté par . En réponse au message atof : arrondi etrange. Évalué à 3.

    Use the force, Luke... (c)


    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... :=/