Nombres flottants¶
Ce cours a été automatiquement traduit des transparents de M.Noyer par Lorentzo et Elowan et mis en forme par Mehdi, nous ne nous accordons en aucun cas son travail, ce site à pour seul but d'être plus compréhensible pendant les périodes de révision que des diaporamas.
Crédits
- Informatique pour tous en classes préparatoires aux grandes écoles (Eyrolles)
- Nombres flottants : Wikipedia
- cpprefrence (en C)
Présentation¶
Introduction¶
Objectif : représenter une partie des nombres rationnels : des nombres avec une quantité bornée de chiffres après la virgule
Idée : On se donne tous les chiffres composants le nombre de la position de la virgule :
Comment : On peut écrire tous les nombres réels non nuls sous la forme
est le signe du nombre est la mantisse est son exposant
L'exposant du nombre représente la position de la virgule dans son expression en base
Pourquoi les nombres à virgule flottante ?¶
L'avantage de la représentation en virgule flottante par rapport à la virgule fixe est que la virgule flottabte est capable, à nombre de chiffres égal, de gérer un intervalle de nombres réels plus importants.
Considérons une représentation en virgule fiwe qui a
Avec une représentation en virgule flottante et
Cependant, il faut alors oder la position de la virgule. Cela demande donc plus de place.
La norme ¶
, présentation¶
Standard le plus employé actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU.
Le standard définit les formats de représentation des nombres à virgule flottante (signe mantisse, exposant, nombres dé-normalisés) et valeurs spéciales (
Il décrit aussi quatre modes d'arrondi et cinq exceptions (comprenant les conditions dans lesquelles une exception se produit, et ce qui se passe dans ce cas)
-
Les quatre modes d'arrondi :
- Vers moins l'infini :
- Vers plus l'infini :
- Vers zéro :
et - Au plus proche (avec le cas particulier de l'équidistance : le nombre
doit-il être arrondi à l'unité vers ou ?)
- Vers moins l'infini :
-
La version
de la nomre définit 4 formats pour représenter les nombres à virgule flottante :- Simple précision (
bits : bit signe, bits d'exposant, bits de mantisse avec bit implicite) - Simple précision étendue (
bits, obsolète) - Double précision (
bits : bit de signe, bits d'expo, bits de mantisse avec implicite) - Double précision étendue (
bits)
- Simple précision (
Bit , bit implicite¶
Bit implicite
La mantisse représente un nombre décimal entre
Représentation binaire des nombres flottants à précision simple¶
Figure -
PLus généralement, les nombres sont écrits au format
Ce format
- Bit de poids fort à
: Négatif, à : Positif - Exposant : Pas de représentation en complément à
(car comparer des nombres serait difficile). L'exposant est décalé, afin de le stocker sous forme d'un nombre non signé. En notant le nombre de chiffres (toujours le même nombre) de l'exposant, on ajoute un décalage de - Avec
, . L'exposant est dans l'intervalle , donc l'exposant décalé est dans ; et ayant une signification spéciale.
Ils sont longs de
La mantisse complète, le significande, doit être considérée comme une valeur sur
La quantité de nombres représentables au format
Avec
Affichage¶
Quand on entre un nombre au clavier, l'orinateur en calcule une représentation en virgule flottante. Du fait des arrondis, une infinité de nombres peuvent avoir la même représentation comme flottant.
La relation "a la même représentation que" est une relation d'équivalence.
Pour le confort de lecture, l'ordinateur affiche l'unique représentant de cette classe d'équivalence qui nécessite le moins de chiffres décimaux.
C'est la raison pour laquelle l'ordinanteur affiche
Un nombre qui est égalt à sa représentation en flottant est dit repésentable exactement en machine.
À propos de l'exposant¶
Format ¶
- En fonction de la valeur
du champ exposant décalé ( , , ou autre), certains nombres peuvent avoir une signification spéciale Ils peuvent être :- Des nombres dé-normalisés (
); - Zéro (
); - Infini (
); - NaN (Not a Nunber (
) "pas un nombre", comme ou );
- Des nombres dé-normalisés (
- L'exposant est décalé dans
donc le décalage est de .LEs nombres "normalisés" ont un exposant décalé dans . - Le bit implicite de la mantisse est déterminé par la valeur de l'exposant décalé. Il vaut
si l'exposant décalé est égal à et sinon.
Nombres normalisés et dé-normalisés¶
Soit le Format
- Si l'exposant décalé est différent de
et de , le bit implicite est , et le nombre est dit normalisé. - Si l'exposant décalé est nul, par convention, le bit implicite vaut
. Le nombre est dit dé-normalisé. La représentation au format dé-normalisé est destinée aux très petites quantités en valeur absolue. - La quantité de nombre à virgules flottante sur une machine et grande mais finie. Chaque nombre positif (sauf le plus grand et plus petit) à un successeur et un prédécesseur (s'il n'est pas nul) positif
- Le successeur du nombre dé-normalisé positif le plus grand est le plus petit nombre normalisé positif.
- Zéro n'est ni normalisé ni dé-normalisé. Il a deux écritures
et
Nombres dé-normalisés¶
Pour un format
- Mantisse non nulle, champ exposant décalé :
bits à . - Tous les nombres dé-normalisés ont le même exposant.
- Si la règle était la même que pour les nombres normalisés, l'exposant serait donc de
soit , donc pour les flottants double précision. - Mais par convention, l'exposant pour les nombres dé-normalisés est en fait égal au plus petit exposant de nombre normalisé soit
. Ce qui change c'est le bit implicite (dé-normalisé) ou (normalisé)- Plus petit normalisé positif
avec - Plus petit dé-normalisé positif
avec non nul minimum. Ainsi, s'écrit avec bits à suivis de donc . Conclusion
- Plus petit normalisé positif
Exposant pour un format ¶
Tableau récapitulatif :
Type | Exposant décalé | Mantisse |
---|---|---|
Zéros : |
||
Nombres dé-normalisés | 0. implicite |
|
Nombres normalisés | 1 à |
quelconque, 1. implicite |
Infinis |
||
NaN (Not a Number) | différente de |
Exposant
Si
Real 2 float¶
Calcul du triple ¶
Cas des nombres normalisés. On calcule
- Écriture de
: bits à ou suivi de bits nuls - Écriture sous forme scientifique au standard décimal : Si
, avec
Il faudra exprimer ces nombres au format binaire au moyen d'un triple (s₂, e₂, m₂)
- Recherche de
: si est positif ou nul, sinon. - Recherche de
:- si
, diviser par la valeur absolue de autant de fois que nécessaire jusqu'à obtenir un eniter de l'intervalle . est le nombre de divisions effectuées. - Si
, multiplier par la valeur absolue de autant de fois que nécessaire jusqu'à obtenir un entier de l'intervalle . est donc l'opposé du nombre de multiplication. - Si
alors
- si
- Recherche de
: Si on connaît , et alors il est facile de trouver :
Triplet en base 2¶
Exemple
Connaissant
- bits de signe
- bits d'exposant
(conversion de l'exposant décalé en base ), - Pour la mantisse sur
bits . Multiplier par , . Calculer partie enitère ( ou ); partie décimale. . partie entière : un nouveau bit de la représentation.
Recommencer à
Exemple
; ; ; , en base :- Pour la mantisse :
On est revenu à : séquence infinie. Mantisse
On a donc la mantisse comme une somme infinie de coefficients
Question :
Attention : Dans le pire cas (mais pas ici),
Arrondi au plus proche sur
Finalement :
Arrondi si ¶
Dans l'exemple étudié
Les bits
Dans nos exemples, on ne pousse pas les calculs trop loin après le dernier bit maintenu (le
Cas dégénéré : On peut aussi arrondir sans utiliser les bits au delà du
Float 2 real¶
Considérons le flottant
-
Signe Exposant décalé Bit caché + mantisse - Le signe est
, le nombre est donc positif. Le champ exposant décalé est , autrement dit . La valeur réelle de l'exposant est donc . La significande (donc avec le bit implicite) est . - Conversion :
Plus généralement, partant d'un flottant simple précision normalisé :
- L'écrire en binaire et retrouver chaque champs.
- Signe
: but de poids fort - Convertir le binaire du champs exposant en un entier
, lui retrancher le décalage . - Parite décimale
(indiquée par la mantisse ).
Le nombre réel correspondant est
Portée¶
Figure - Quelques nombres positifs (Wikipedia)
Exemples et règles d'arrondis¶
Choix du nombre le plus proche¶
Arrondi au plus proche
- Soit un nombre de mantisse
- Le significande complet avec bit caché est
-
On veut l'arrondir à
chiffres après la virgule. On a le choix entre ou- Arrondi par défaut :
- Arrondi par excès :
-
est-il plus proche de ou de ? - Plus proche de
. - Réponse :
.
Cas de l'examen de bits après le dernier maintenu¶
L'exemple précédent était facile car il ya avait une seule réponse possible.
Mais que se passe-t-il quand on a le choix ? Par exemple, en base
En base deux, le problème se pose lorsque le nombre après le dernierbit maintenu est
En base deux, on prend en général l'arrondi au plus proche pair. Il faut que le dernier chiffre de l'écriture binaire soit pair.
Arrondir au plus proche pair revient, lorsqu'on a le choix, à privilégier les écritures qui se terminent par
Exemples d'arrondis au plus proche pair¶
- Arrondir
à chiffres après la virgule : plus proche pair ( est pair). - Arrondir
à chiffres après la virgule : est impair. Plus proche pair : - Arrondir
à chiffres après la virgule : est impair. Plus proche pair : . Il faut changer l'exposant (ajouter à l'exposant)!! - Lorsqu'on est dans le cas de figure où il faut changer l'exposant, et que l'exposant est lui même maximum (
oiur les nombres sur bits), on se retrouve avec un nombre considéré comme infini !
Règle d'arrondi au plus proche pair¶
Arrondi au troisième chiffre après la virgule :
On considère les trois chiffres après le dernier bit maintenu :
: juste tronquer l'expression ( sont quelconques). : Arrondir au plus proche pair :- Si le dernier bit maintenu vaut
: ne rien faire. - Sinon, ajouter
au dernier bit maintenu en tenant compte des retenus.
- Si le dernier bit maintenu vaut
, avec : ajouter au dernier bit maintenu.
Dans l'exemple, les trois chiffres après le dernier bit maintenu forment
Problèmes induits par la norme¶
Expressions infinies¶
Les nombre flottants repésentent des rationnels ayant une expression finie. Quid des expression illimitées ?
En base
Il faut donc arrondir. Le standard
Règle de l'Arrondi correct
Une fois un modde d'arrondi choisi, le résultat d'une opération est déterminsite : un seul résultat est possible.
Un dixième
Du fait des arrondis, le nombre que représente
Règle de l'arrondi correct¶
La norme
- qu'il n'y ait pas de précision intermédiaire étendue (ou alors désactivée). Ça veut dire que les résultats intermédiaires du calcul d'une expression ne doivent pas être calculés avec une précision plus grande que celle attendue pour le résultat.
- le compilateur ne doit pas changer l'ordre des opérations si cela peut conduire à un résultat différent.
Problème d'arrondi célèbre¶
Patriot
En
Un micro-processeur interne calcule l'heure en multiples de dixièmes de secondes.
Le nombre de dixièmes de secondes depuis le démarrage est stocké dans un registre entier puis multiplité par une approximation de
Approximation :
Processeur démarré
Le Patriot rate sa cible, pas le Skud.
Double arrondi¶
Cas d'examen de bits après le dernier maintenu¶
Soit
Soit
. Arrondir à chiffres après la virgule.- Après la décimale
de on a : L'arrondi à chiffres arpès la virgule de est - Après la décimale
de : . L'arrondi à décimales de est - MAIS, après la décimale
de on a . Suivant la règle de l'arrondi pair, l'arrondi à 4 déciamles de est - Et on a
!
On peut montrer que le problème du double arrondi n'intervient que si on choisit l'arrondi au plus proche pair. Pas de chance : c'est le mode d'arrondi le plus répandu !
Pourquoi privilégier l'arrondi au plus proche pair ?¶
La méthode de "l'arrondi bancaire" (autre nom pour l'arrondi au plus proche pair) est employée pour éliminer le biais qui surviendrait en arrondissant à chaque fois par excès les nombres dont les trois derniers chiffres seraient
Transposons en base
Supposons que pour un millième de ces virements, la partie fractionnaire soit de la forme
Si la banque arrondi le montant de ces virements au dixièmes de centime supérieur (
D'où la nécessité d'arrondir certains montants au centime supérieur et d'autres au centime inférieur pour équilibrer, comme avec l'arrondi au plus proche pair.
Cas des exceptions¶
En cas de problème, la norme impose de signaler des Exceptions :
- Diviser un nombre différent de
par donne - Diviser zéro par zéro, ou calculer le logarithme d'un nombre négatif conduisent à générer des
qu'on peut décider de considérer comme des exceptions. - Nombre entier positif plus grand que le plus grand entier représentable (overflow). Ou plus petit que le plus petit entier représentable (underflow).
Arithmétique psychédélique¶
Attention aux tests d'égalité
Il est risqué d'écrire un programme avec des tests d'égalité entre flottants. Éviter if x = y then ...
Il faut mieux utiliser if abs_float(x-y) < eps
. Au format double précision, prendre
Arrondi d'un calcul, commutativité, associativité¶
L'arrondi de la somme n'est pas la somme des arrondis. Comparer
La multipliaction et l'addition restent commutatives
L'associativité se perd
Distributivité¶
La distributivité se perd
Relation d'ordre¶
Dans
Nous avons vu que la représentation en machine de
Convergence et divergence¶
Dans le cours de maths, la série harmonique
Avec l'ordre décroissant :
Dernières décimales
Et l'ordre croissant :
Les dernières décimales des deux résultats ne sont pas égales alors même que l'addition est commutative...
De plus cette série converge pour les nombres flottants. Après un certain rang,
Infinis et ¶
Écart avec le successeur¶
L'écart entre
Ainsi, si on veut de la précision dans les calculs faisant intervenir de grands nombres, on a intérêt à travailler avec inverses.