Codage des nombres réels avec la norme IEEE-754 Numération Codage des nombres réels avec la norme IEEE-754
La norme IEEE 754 permet de représenter des nombres à virgule. On représente les nombres au moyen des symbole suivants : Chiffres : « 0 1 2 3 4 5 6 7 8 9 » ou « 0 1 » en base 2 Virgule : « , »
Nombres à virgule en binaire En décimal : 0,1 est une autre notation pour 10-1 1,305 peut aussi s’écrire 1*100 + 3*10-1 + 0*10-2 + 5*10-3 De la même façon, en binaire : 0,1 est une autre notation pour 2-1 11,101 peut aussi s’écrire 1*21 + 1*20 + 1*2-1 + 0*2-2 + 1*2-3 = 2 + 1 + 1/2 + 0 + 1/8 Si l’on fait le calcul, (11,101)2 vaut donc en décimal (3,625)10
Conversion décimal -> binaire Exemple : pour 9,375 9 -> 1001,…. 2-1 -> 0,5 trop grand d’où 1001,0… 2-2 -> 0.25 plus petit 1001,01… 2-3 -> 0,125 c’est bon 1001,011
Histoire de IEEE754 Première approche (11010,001101)2 Comment coder la virgule en binaire ? Première approche (11010,001101)2 Les chiffres significatifs 11010001101 ou mantisse Pour savoir ou est la virgule, on répond à la question de combien de chiffre il faut se décaler après le premier chiffre Ici 5 ce nombre représente l’exposant Le codage « naïf» serait donc 1011 11010001101
Histoire de IEEE754 Dans la pratique, c’est légèrement plus compliqué. Pourquoi ? Si on considère le nombre (0,000 000 000 011)2. C’est un très petit nombre… Avec la méthode « naïve », ce nombre ne rentre pas sur 8 bits. Les 8 premiers bits seront des 0 il n’y a pas assez de place pour faire rentrer les 1. Il faut donc ignorer les 0 pour ne garder que les chiffres significatifs d’où notre chiffre 1,1*2-11
Histoire de IEEE754 En binaire les chiffres commencent ainsi toujours par un « 1 » ce n’est donc pas la peine de le coder dans la mantisse. Définition : la mantisse est l’ensemble des chiffres significatifs situés après la virgule lorsque le nombre est en notation scientifique en binaire.
Histoire de IEEE754 Codage de l’exposant : L’exposant peut donc être positif ou négatif Complément à 1 Complément à 2 ….
Avantage Inconvénient Complément à 1 Très simple à coder Nombres positifs signés et non-signés ont la même représentation Comparaison bit a bit impossible Addition avec négatifs nécessite des étapes intermédiaires 2 notations pour le nombre 0 Complément à 2 Calcul identique entre positifs et négatifs (sans décodage) Codage par excès - Comparaison identique entre positifs et négatifs (sans décodage) Les nombres positifs ne signés et non-signés n’ont pas la même représentation
Codage par excès Pour coder : 1,1011 * 23 = (13,5)10 avec 5 bits d’exposant et 10 bits de mantisse, On écrit 00011 1011000000. Avec le codage par excès l’exposant devient 10010 Explications : Sur 5 bits, on peut compter de 0 à 31 inclus, ou bien de -15 à 16 00000 étant le plus petit nombre du codage par excès, il correspond à -15. On en déduit que pour 5 bits, le codage par excès s’obtient en additionnant 15 au nombre que l’on veut obtenir
Ajout du signe On rajoute un bit devant : (pour des raison de simplicité) Ainsi, le codage de (13,5)10 devient : 0 10010 1011000000 Ainsi, le codage de (-13,5)10 serait : 1 10010 1011000000
Les différentes précisions de l’IEEE754 La norme IEEE754 définit 3 formats de précisions. Les deux plus courants sont : Simple précision (float en C) : 8 bits pour l’exposant (excès de 127) et 23 bits de mantisse. (4 octets) Double précision (double en C) : 11 bits pour l’exposant (excès de 1023) et 52 bits de mantisse. (8 octets)
Erreur de débordement arithmétique de réel Pour des nombres trop grand (ex division par 0) Erreur d’arrondi Survient quand un réel théorique à représenter tombe strictement entre deux nombres réels voisins représentables en machine.
Conseils d’utilisation Il ne faut jamais comparer l’égalité stricte de deux réels mais toujours les comparer à epsilon près. Il faut éviter d’additionner des nombres réels d’ordres de grandeur très différents. Il faut éviter de soustraire des résultats entachés d’erreurs et ayant des valeurs voisines.