• # Quelques infos

    Posté par (site web personnel) . En réponse au journal Comment les programmeurs écrivent du code flottant ?. Évalué à 2.

    Salut,

    Comment s'écrit un code ? Par essais erreurs ? On doit évaluer "à la main" les fuites de précision et écrire l'algorithme en conséquence ?

    Il existe quelques règles que je ne saurai énoncer exhaustivement. Exemple : ne pas utiliser d'opérande sur un petit et un grand nombre (1 + 10^100 est crétin). Il faut réordonner une fonction en conséquence. Exemple pratique : résolution d'une équation du 2e degré :
    http://fr.wikipedia.org/wiki/%C3%89quation_du_second_degr%C3(...)

    J'imagine que c'est la démarche des codes scientifiques pour éviter d'utiliser des nombres étendus plus lent.

    Euh, les éviter je sais pas, c'est très pénible de calculer en virgule fixe (avec des nombres entiers). Il existe un décodeur Ogg/Vorbis en virgule fixe, mais je vois pas le rapport, on s'aggare :-)

    changer l'ordre des opération pour la vitesse

    Je ne vois pas en quoi l'ordre change la vitesse. Utilise des SIMD ou non, ça change les perfs oui. Mais on ne change pas l'ordre du calcul. On reformule pour permettre la vectorisation. Au passage, les derniers gcc vectorisent tout seul !

    Sachez que GCC ne modifient pas les calculs sur les flottants car justement l'ordre des opérandes joue énormément sur la précision du résultat. Il ne pas simplifier x*2.0/2.0 par exemple.

    D'ailleurs comment choisi-t-on d'utiliser un type d'arrondi plutôt qu'un autre ?

    Selon le résultat attendu ?

    Quel est l'intérêt de gérer les NaN ou les infinis qui ralentissent tellement un code c ?

    Les gérer ? Comment ça ? Il suffit de vérifier à la fin qu'on n'a pas de NaN, -INF ou INF je pense. Si on sait ce qu'on fait, on ne trimballe pas de NaN.

    --

    Pour aller un peu plus loin, il existe la bibliothèque MPFR :
    http://www.mpfr.org/

    Enfin, un bilbliothèque qui calcule sur des intervalles : MPFI stands for Multiple Precision Floating-point Interval library.
    http://perso.ens-lyon.fr/nathalie.revol/software.html