Informatique
Convertisseur en virgule flottante IEEE 754
Saisis un nombre décimal ou les bits en hexadécimal : vois comment il se découpe en signe, exposant et mantisse, quelle valeur est réellement stockée et de combien elle s'écarte de ta saisie.
Pourquoi 0,1 + 0,2 ne fait pas 0,3
La norme IEEE 754 écrit un nombre sous forme de signe, d'exposant et de mantisse, en base deux : valeur = (−1)^signe × 1,mantisse × 2^(exposant − biais). La simple précision a 8 bits d'exposant et 23 de mantisse, la double 11 et 52. C'est le format de presque tous les processeurs et de tous les langages de programmation.
En base deux, seules les fractions dont le dénominateur est une puissance de 2 ont une écriture finie. 0,5 et 0,25 oui, 0,1 non : en binaire c'est 0,000110011001100… périodique, qu'il faut tronquer. La valeur stockée est la plus proche disponible, soit 0,100000001490116… pour un float, et en additionnant des valeurs déjà approchées les erreurs s'accumulent.
C'est pourquoi on ne compare pas des flottants avec ==, mais en vérifiant que l'écart est petit, et qu'on compte l'argent en centimes entiers ou avec des types décimaux. Des valeurs spéciales complètent le format : zéro signé, infinis, NaN et les dénormalisés, qui comblent le vide près de zéro.
Erreurs fréquentes
- Comparer deux flottants avec == : 0.1 + 0.2 == 0.3 est faux dans presque tous les langages.
- Utiliser des flottants pour de l'argent : les arrondis s'additionnent. Mieux vaut des centimes entiers ou un type décimal.
- Croire qu'un float 32 bits a 32 bits de précision : la mantisse en a 24, environ 7 chiffres décimaux ; un double en a environ 16.
Questions fréquentes
Combien de chiffres décimaux ont un float et un double ?
Un float 32 bits garantit environ 7 chiffres significatifs, un double 64 bits environ 15 à 16. Au-delà, les chiffres affichés reflètent l'approximation binaire.
Que sont les nombres dénormalisés ?
Ce sont les valeurs plus petites que le plus petit normal : l'exposant est entièrement nul et la mantisse perd son 1 implicite. Ils permettent d'approcher zéro progressivement, au prix de la précision.
Pourquoi existe-t-il +0 et −0 ?
Parce que le signe est un bit à part. Les deux zéros sont égaux à la comparaison, mais 1/+0 donne +∞ et 1/−0 donne −∞ : ils gardent le côté par lequel on a atteint zéro.
Comment fonctionne ce calcul
Valeur = (−1)^s × 1,f × 2^(e − biais) pour les nombres normaux, avec un biais de 127 en simple et 1023 en double précision ; pour les dénormalisés (e = 0), la valeur est (−1)^s × 0,f × 2^(1 − biais). Un exposant entièrement à 1 avec une mantisse nulle vaut ±∞, avec une mantisse non nulle NaN. La valeur exacte est calculée en décimal sans arrondi : tout float vaut m × 2^k, et pour k négatif cela vaut m × 5^(−k) ÷ 10^(−k).
Calculs liés
Codes Unicode et UTF-8
Le point de code, les octets UTF-8 et UTF-16 et le code HTML de chaque caractère, emoji compris.
Convertisseur Base64
Du texte, d'un entier, de l'hexadécimal ou du binaire vers Base64 et retour, groupes de 6 bits expliqués.
Unités de stockage et téléchargement
Des octets aux gigaoctets et gibioctets, et le temps pour télécharger un fichier à une vitesse donnée.