• [^] # Re: Il faut bien lire ce qu'on lit!

    Posté par (site web personnel) . En réponse au journal Le retour de la vengeance de la virgule flottante. Évalué à 1.

    Complément:

    Pour des conversions de devises propres et sûres respectant scrupuleusement la norme européenne:

     type change is delta 10.0**(-7) range 0.000_1 .. 1000.0;
     function Convert (from : change; target : change; value : dec) return dec is
     ((long_float (target)/long_float (from)) * value);
    1. On voit ici que le fait que long_float soit binaire ou décimal n'apporte rien: le résultat donné sera juste dans les deux cas (car la précision sur le premier quotient
    2. On ajoute volontairement un type change obligeant le programmeur à respecter les bonnes pratiques et pas à faire n'importe quoi dans n'importe quel ordre avec des floats. On ajoute aussi des garde fou (impossibilité de diviser par zéro, et surtout on est explicite. si des débordements on lieu, il y aura levée d'exception (rien n'est silencieux).
    3. On peut de plus garantir que Convert donne le bon résultat (car max_change/min_change est majoré par 1 million et donc le quotient flottant ne fait perdre qu'une précision de 6 digits au long_float (17 chiffres significatifs) et laisse de quoi garantir que round fera exactement ce qu'elle doit faire). C'est là tout l'avantage de mettre des contraintes sur les types et de ne pas prier à chaque fois qu'on manipule des floats sans aucun contrôle.