Comparatifs Développement

Float vs Double vs Decimal

Les types numériques en simple précision, en double précision et décimaux comparés : bits, chiffres de précision, plage, le problème de 0,1 + 0,2 et quand utiliser chacun, avec des valeurs issues de NumPy et de Python.

Dernière vérification :

AdSense Placeholder
Slot: header_reference_page
Sur cette page

Les trois stockent des nombres avec un nombre fixe de chiffres, mais float et double sont binaires (IEEE 754) alors que les types décimaux travaillent en base 10. Inspectez n'importe quelle valeur avec le convertisseur de flottants IEEE 754 ; la théorie se trouve dans Comment fonctionnent les nombres à virgule flottante et Nombre à virgule flottante.

Les types côte à côte

float (binary32) double (binary64) décimal (p. ex. decimal128)
Bits au total 32 64 128
Disposition 1 de signe, 8 d'exposant, 23 de fraction 1 de signe, 11 d'exposant, 52 de fraction Signe, exposant, jusqu'à 34 chiffres décimaux
Précision Environ 7 chiffres décimaux Environ 15-16 chiffres décimaux 34 chiffres décimaux
Plus grande valeur finie 3,4028235 × 10^38 1,7976931348623157 × 10^308 9,999… × 10^6144
Epsilon machine 1,19 × 10^-7 2,22 × 10^-16 10^-33
Entiers exacts jusqu'à 16 777 216 (2^24) 9 007 199 254 740 992 (2^53) Tous ceux de 34 chiffres au plus
Représente 0,1 exactement Non Non Oui

La surprise classique

  • En double précision, 0.1 + 0.2 donne 0.30000000000000004, et le float le plus proche de 0,1 est 0.10000000149011612.
  • Au-delà de 2^24, un float ne distingue plus deux entiers voisins : 16777216 + 1 reste 16777216.
  • En arithmétique décimale, 0.1 + 0.2 vaut exactement 0.3 (decimal de Python).
  • Comparez les flottants avec une tolérance, jamais avec ==.

Lequel utiliser

  • Graphisme, audio, apprentissage automatique et jeux : float, où la mémoire et la vitesse comptent plus que le dernier chiffre.
  • Science, statistiques et code numérique général : double.
  • Argent, factures, taxes et tout ce que l'on vérifie à la main : décimal (ou centimes entiers).
  • Identifiants et grands compteurs : des entiers, jamais de virgule flottante.

Essayez ces outils

Voir aussi

  • Guide Comment fonctionnent les nombres à virgule flottante
    Comment les ordinateurs stockent les décimaux sous forme de signe, d'exposant et de fraction (IEEE 754), pourquoi 0,1 n'est pas exact.
  • Glossaire Nombre à virgule flottante
    Un nombre à virgule flottante stocke un nombre réel sous forme de signe, d'exposant et de fraction.
  • Glossaire Notation scientifique
    La notation scientifique écrit un nombre comme un coefficient entre 1 et 10 × une puissance de dix.
  • Glossaire Chiffres significatifs
    Les chiffres significatifs sont les chiffres d'un nombre qui renseignent sur sa précision, à partir du premier chiffre non nul.
  • Aide-mémoire Table binaire, octal et hexadécimal
    De 0 à 31 en décimal, binaire, octal et hex, les puissances de deux, les raccourcis de conversion et l'alphabet Base32.

Questions fréquemment posées

Ni 0,1 ni 0,2 ne peuvent être stockés exactement en binaire, de même que 1/3 ne peut s'écrire exactement en décimal. Leurs valeurs stockées s'additionnent en 0,30000000000000004 en double précision. Un type décimal les stocke exactement et donne 0,3.

Utilisez un type décimal, ou des entiers comptant la plus petite unité, comme les centimes. La virgule flottante binaire ne peut pas représenter exactement la plupart des montants en centimes.

AdSense Placeholder
Slot: footer_leaderboard