0,1 en double précision : pourquoi n'est-il pas exact ?
Le nombre 0,1 est stocké comme 0,1000000000000000055511151231257827... en double précision.
- Bit de signe
- 0 (positif)
- Exposant (11 bits)
- 01111111011 (1019, décalage -4)
- Mantisse (52 bits)
- 1001100110011001100110011001100110011001100110011010
- Hexadécimal
- 0x3FB999999999999A
- Valeur réellement stockée
- 0,1000000000000000055511151231257827021182
La plupart des décimaux, comme 0,1, n'ont pas d'écriture exacte en binaire : l'ordinateur stocke la valeur représentable la plus proche.
Le cas en détail
En binaire, 0,1 a un développement périodique infini (0,000110011001100...). La mantisse de 52 bits ne peut en garder qu'une partie, arrondie. La valeur stockée est un tout petit peu supérieure à 0,1. C'est la cause du fameux 0,1 + 0,2 différent de 0,3.
À retenir : Pour de l'argent, calculez en centimes entiers : les entiers sont exacts, les flottants ne le sont pas toujours.
L'exemple chiffré
Valeurs utilisées dans ce cas (des exemples, pas des mesures) :
- Nombre à représenter : 0,1
- Précision : Double précision (64 bits)
- Bit de signe
- 0 (positif)
- Exposant (11 bits)
- 01111111011 (1019, décalage -4)
- Mantisse (52 bits)
- 1001100110011001100110011001100110011001100110011010
- Hexadécimal
- 0x3FB999999999999A
- Valeur réellement stockée
- 0,1000000000000000055511151231257827021182
La plupart des décimaux, comme 0,1, n'ont pas d'écriture exacte en binaire : l'ordinateur stocke la valeur représentable la plus proche.
Modifiez les champs ci-dessus pour adapter le calcul à votre situation : le résultat se met à jour tout de suite.
Comment ça se calcule
Un nombre flottant est stocké sous la forme (-1)^signe × 1,mantisse × 2^(exposant - décalage). En double précision : 1 bit de signe, 11 d'exposant (décalage 1023) et 52 de mantisse. En simple précision : 1, 8 (décalage 127) et 23. La valeur stockée est la plus proche de votre nombre parmi celles représentables.
Les résultats sont fournis à titre indicatif, sans valeur de conseil juridique, fiscal ou financier.