Convertisseur IEEE 754 virgule flottante
Convertissez vos flottants décimaux en binaire et hex IEEE 754 — demi, simple, double précision et bfloat16. Valeur stockée exacte, erreur d'arrondi et disposition des bits. 100 % dans votre navigateur.
| Signe | |
| Exposant | |
| Mantisse |
- Vous avez saisi
- Réellement stocké
- Erreur d'arrondi
- Précédente
- Suivante
- ULP (taille de l'écart)
| Format | Bits totaux | Signe | Exposant | Mantisse | Biais | Valeur finie max | Chiffres décimaux |
|---|---|---|---|---|---|---|---|
| binary16 (FP16) | 16 | 1 | 5 | 10 | 15 | 65504 | ~3.3 |
| bfloat16 | 16 | 1 | 8 | 7 | 127 | ≈3.39×10³⁸ | ~2.3 |
| binary32 (FP32) | 32 | 1 | 8 | 23 | 127 | ≈3.40×10³⁸ | ~7.2 |
| binary64 (FP64) | 64 | 1 | 11 | 52 | 1023 | ≈1.80×10³⁰⁸ | ~15.9 |
Qu'est-ce que la virgule flottante IEEE 754 ?
IEEE 754 est la norme qui définit comment les ordinateurs stockent les nombres réels en binaire. Chaque valeur est empaquetée dans trois champs : un bit de signe, un exposant (stocké avec un biais afin de représenter aussi bien les grandes magnitudes que les minuscules) et une mantisse contenant les chiffres significatifs. Presque tous les CPU, GPU et langages de programmation l'utilisent, ce qui explique pourquoi les mêmes surprises d'arrondi apparaissent aussi bien en JavaScript qu'en Python, en C ou en SQL.
L'idée clé est que la virgule flottante binaire ne peut représenter que des nombres de la forme m × 2ⁿ. Les fractions décimales comme 0.1 sont des fractions binaires infinies périodiques — 0.000110011001100… — donc le format stocke à la place le voisin représentable le plus proche. En simple précision, ce voisin est 0.100000001490116119384765625 ; en double précision, c'est 0.1000000000000000055511151231257827021181583404541015625. Aucun des deux n'est 0.1. Toutes les bizarreries en aval — 0.1 + 0.2 ≠ 0.3, des sommes qui dérivent, des tests d'égalité qui échouent — découlent de ce seul fait, et ce convertisseur le rend visible en imprimant la valeur stockée exacte plutôt qu'une approximation ré-arrondie.
La norme réserve aussi des motifs de bits pour les valeurs spéciales. Un exposant tout à un encode ±Infinity (mantisse nulle) ou NaN (mantisse non nulle) ; un exposant tout à zéro encode le zéro signé (mantisse nulle) ou les nombres subnormaux (mantisse non nulle), qui comblent l'écart d'underflow près de zéro à précision réduite. Les quatre formats couverts par cet outil — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — ne diffèrent que par le nombre de bits attribués à chaque champ : plus de bits d'exposant signifie plus d'étendue, plus de bits de mantisse signifie plus de précision. bfloat16, le favori du machine learning, est simplement un FP32 dont on a coupé les 16 bits de mantisse du bas : même étendue, précision beaucoup plus grossière.
Un modèle mental utile : les flottants représentables forment une grille sur la droite numérique dont l'espacement — une unité à la dernière place, ou ULP — double à chaque puissance de deux. Près de 1.0, l'espacement de la grille d'un double est d'environ 2.22 × 10⁻¹⁶ ; près de 2⁵³, il vaut un entier complet, raison pour laquelle les doubles ne peuvent pas compter de façon fiable au-delà de 2⁵³. Le panneau des voisins de cet outil montre cette grille directement : les valeurs représentables précédente et suivante autour de ce que vous tapez, avec l'écart exact entre elles.
// Float ↔ hex through the raw IEEE 754 bits (works in any browser / Node.js)
const buf = new DataView(new ArrayBuffer(8));
function floatToHex32(value) {
buf.setFloat32(0, value); // rounds to nearest even
return '0x' + buf.getUint32(0).toString(16).toUpperCase().padStart(8, '0');
}
function hexToFloat32(hex) {
buf.setUint32(0, parseInt(hex, 16));
return buf.getFloat32(0);
}
floatToHex32(0.1); // '0x3DCCCCCD'
floatToHex32(3.14159); // '0x40490FD0'
hexToFloat32('3DCCCCCD'); // 0.10000000149011612 Fonctionnalités clés
Quatre formats, une seule vue
Demi (FP16), bfloat16, Simple (FP32) et Double (FP64) — changez d'un clic et toute la page se recalcule : comparer comment le même nombre atterrit dans chaque format ne prend que quelques secondes.
Grille de bits cliquable
Chaque bit est un bouton. Inversez le signe, ajustez l'exposant ou touchez un bit de mantisse et regardez les vues décimale, hexadécimale et binaire se mettre à jour instantanément — le moyen le plus rapide de développer une intuition de l'encodage.
Valeur stockée exacte, pas une approximation
L'outil calcule l'expansion décimale complète des bits stockés avec une arithmétique exacte sur grands entiers — les 55 chiffres du 0.1 d'un double — plus l'erreur d'arrondi signée exacte par rapport à votre saisie.
Voisins et ULP
Voyez les valeurs représentables précédente et suivante autour du nombre courant et l'écart exact (ULP) entre elles — l'espacement de grille qui détermine la précision dont vous disposez réellement à une magnitude donnée.
Valeurs spéciales en un clic
Des puces chargent ±0, ±Infinity, NaN, le plus petit subnormal et la plus grande valeur finie du format sélectionné, avec le badge de classification qui nomme ce que le motif de bits courant encode.
Permaliens partageables, zéro téléversement
Copier le lien encode le format et le motif de bits exact dans l'URL — idéal pour les rapports de bug, les revues de code et l'enseignement. Tout s'exécute dans votre navigateur ; rien de ce que vous tapez ne quitte la page.
Exemples de conversion IEEE 754
0.1 en simple précision — l'erreur d'arrondi classique
0.1
0x3DCCCCCD — stocké en réalité comme 0.100000001490116119384765625
Le décimal 0.1 n'a pas de représentation binaire finie, donc IEEE 754 stocke à la place la valeur représentable la plus proche. En simple précision (FP32), c'est 0x3DCCCCCD, soit exactement 0.100000001490116119384765625 — environ 1.49 × 10⁻⁹ de trop. L'outil affiche cette valeur stockée exacte et l'erreur exacte, chiffre par chiffre, plutôt que le « 0.1 » arrondi que votre langage de programmation vous renvoie. Ce seul exemple explique la plupart des surprises en virgule flottante, y compris pourquoi 0.1 + 0.2 n'est pas égal à 0.3.
Flottant vers hex : 3.14159 en FP32
3.14159
0x40490FD0
Tapez 3.14159 avec Simple (FP32) sélectionné et le champ hex affiche 0x40490FD0 — signe 0, exposant biaisé 128 (donc 2¹), mantisse 0x490FD0. La valeur réellement stockée est 3.141590118408203125, un cheveu au-dessus de votre saisie. La forme hexadécimale est celle que vous rencontrez dans les captures réseau, les buffers GPU, les vues de registres et les fichiers binaires sérialisés, et la conversion fonctionne dans les deux sens : collez 40490FD0 dans le champ hex pour la décoder.
Maximum FP16 : 65504, la limite de la demi-précision
65504
0x7BFF — la plus grande valeur finie en FP16
La demi-précision ne dispose que de 5 bits d'exposant et 10 bits de mantisse, donc sa plus grande valeur finie est 65504 (0x7BFF). Tapez 65520 ou n'importe quelle valeur supérieure et le résultat s'arrondit à Infinity (0x7C00) — un vrai danger lors de la quantification de modèles de machine learning en FP16. Passez en bfloat16 et le même 65520 tient sans problème, car bfloat16 conserve les 8 bits d'exposant de FP32 (l'étendue) en sacrifiant des bits de mantisse (la précision). Ce compromis est exactement la raison pour laquelle l'entraînement ML privilégie bfloat16 tandis que le stockage compact privilégie FP16.
−0 et +0 : deux motifs de bits différents, une seule valeur
-0
0x80000000 (FP32), tandis que +0 vaut 0x00000000
IEEE 754 possède un zéro signé : −0 n'active que le bit de signe (0x80000000 en FP32), tandis que +0 est entièrement à zéro. Ils sont égaux dans tous les langages, pourtant 1/−0 vaut −Infinity et 1/+0 vaut +Infinity : la différence est donc observable. Cliquez sur le bit de signe dans l'outil pour basculer entre les deux et regardez le badge de classification rester sur Zéro pendant que l'hex change — une illustration en un clic de la différence entre égalité au niveau des bits et égalité numérique.
Comment convertir des nombres IEEE 754 en virgule flottante
- 1
Choisissez un format en virgule flottante
Simple (FP32) est présélectionné. Passez en Double (FP64) pour les nombres de type JavaScript/Python, ou en Demi (FP16) et bfloat16 pour les formats 16 bits utilisés en machine learning et en graphisme.
- 2
Saisissez un nombre décimal
Entrez n'importe quelle valeur — 0.1, -2.5e3, 65504 — ou utilisez les puces de valeurs spéciales pour ±0, ±Infinity, NaN, le plus petit subnormal et la plus grande valeur finie. La conversion se fait pendant la frappe.
- 3
Lisez la disposition des bits codée par couleur
Le bit de signe, le champ d'exposant et la mantisse sont surlignés dans des couleurs différentes, et le tableau de décomposition des champs montre les bits bruts, le calcul du biais et le bit de tête implicite.
- 4
Vérifiez la valeur stockée exacte et l'erreur
Le panneau de précision imprime la valeur réellement stockée — chaque chiffre, calculé exactement — à côté de l'erreur d'arrondi par rapport à votre saisie, plus les voisins représentables précédent et suivant et l'écart en ULP.
- 5
Inversez des bits, collez de l'hex, copiez les résultats
Cliquez sur n'importe quel bit pour l'inverser, ou collez des chaînes hexadécimales (3DCCCCCD) et binaires pour les décoder en décimal. Copiez l'hex, le binaire, la valeur exacte ou un lien partageable qui reproduit le motif de bits exact.
Erreurs courantes en virgule flottante
Faire confiance à la valeur affichée plutôt qu'à la valeur stockée
Les langages affichent les flottants arrondis à la chaîne la plus courte qui fait l'aller-retour, donc 0.1 paraît propre alors que la valeur stockée ne l'est pas. Jugez la précision d'après l'expansion exacte, pas d'après ce que print() montre.
print(0.1) # 0.1 — paraît exact, ne l'est pas
0.1 stocké (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Comparer des flottants pour une égalité exacte
0.1 + 0.2 atterrit sur le motif de bits 0x3FD3333333333334 tandis que le littéral 0.3 vaut 0x3FD3333333333333 — un ULP d'écart, donc == est faux même si les deux s'affichent comme des valeurs proches de 0.3.
if (0.1 + 0.2 === 0.3) { … } // ne s'exécute jamais if (Math.abs(a - b) < 1e-9) { … } // tolérance adaptée à vos données Quantifier en FP16 sans vérifier l'étendue
La plus grande valeur finie de FP16 est 65504. Tout ce qui est plus grand devient Infinity, et une fois qu'un Infinity entre dans un calcul, il se propage. Vérifiez vos maxima avant de convertir vers le bas — ou utilisez bfloat16, qui conserve l'étendue de FP32.
fp16(65520) → Infinity (0x7C00) — débordement silencieux
bf16(65520) → fini (bfloat16 conserve 8 bits d'exposant)
Tester NaN avec l'égalité
NaN est la seule valeur qui n'est pas égale à elle-même — c'est voulu, pour qu'un calcul échoué ne puisse pas se faire passer pour un nombre réel. Utilisez le test isNaN de votre langage plutôt que ==, et rappelez-vous qu'il existe des millions de motifs de bits NaN distincts.
if (x === NaN) { … } // toujours faux, même quand x EST NaN if (Number.isNaN(x)) { … } // le test correct Ce que vous pouvez faire avec le convertisseur IEEE 754
- Déboguer des données binaires sérialisées
- Collez l'hex trouvé dans une capture réseau, un buffer GPU, un dump de registres ou un format de fichier et décodez-le vers la valeur décimale exacte — ou faites l'inverse pour écrire des fixtures de test. Note sur l'ordre des octets : l'hex affiché est le motif de bits big-endian ; si votre dump est en little-endian, inversez l'ordre des octets avant de coller.
- Comprendre la quantification ML
- Vérifiez si vos valeurs survivent au plafond de 65504 de FP16, comparez chiffre par chiffre la perte de précision entre FP16 et bfloat16, et inspectez la plage subnormale où les gradients passent en underflow.
- Expliquer un bug de virgule flottante
- Quand un collègue demande pourquoi deux nombres « égaux » diffèrent, envoyez un permalien montrant les deux motifs de bits et les valeurs stockées exactes — le débat se règle de lui-même. Associez-le à l'outil de comparaison de texte pour les dumps plus longs.
- Apprendre ou enseigner l'encodage
- Les cours d'architecture des ordinateurs deviennent concrets quand les étudiants peuvent cliquer sur les bits d'exposant et voir le calcul du biais se mettre à jour. Le tableau de décomposition des champs reflète la façon dont les manuels dessinent le format.
- Décoder des registres embarqués et industriels
- Les trames Modbus, CAN et les charges utiles de capteurs transportent couramment des valeurs FP32 sous forme de mots hexadécimaux bruts. Collez le mot ici pour lire la valeur physique sans écrire de script jetable.
Formats IEEE 754 et valeurs spéciales
- Les quatre formats binaires en un coup d'œil
- binary16 (FP16) : 1 bit de signe + 5 bits d'exposant + 10 bits de mantisse, biais 15, max 65504, ~3.3 chiffres décimaux. bfloat16 : 1 + 8 + 7, biais 127, max ≈ 3.39 × 10³⁸, ~2.3 chiffres. binary32 (FP32) : 1 + 8 + 23, biais 127, max ≈ 3.40 × 10³⁸, ~7.2 chiffres. binary64 (FP64) : 1 + 11 + 52, biais 1023, max ≈ 1.80 × 10³⁰⁸, ~15.9 chiffres. Le schéma : les bits d'exposant achètent de l'étendue, les bits de mantisse achètent de la précision, et bfloat16 échange délibérément toute sa précision contre l'étendue de FP32.
- Comment une valeur est assemblée
- Un nombre normal se décode comme (−1)^signe × 1.mantisse × 2^(exposant − biais). Le 1 de tête est implicite — il n'est pas stocké, c'est pourquoi un champ de mantisse de 23 bits fournit 24 bits de précision. L'exposant stocké est l'exposant réel plus le biais (127 en FP32), donc 2⁰ est stocké comme 01111111. Le tableau de décomposition des champs de cet outil montre chaque étape de ce calcul pour la valeur courante.
- Valeurs spéciales : les motifs d'exposant réservés
- Exposant tout à un avec mantisse nulle : ±Infinity ; avec n'importe quelle mantisse non nulle : NaN (le NaN silencieux canonique active le bit de poids fort de la mantisse). Exposant tout à zéro avec mantisse nulle : ±0 ; avec une mantisse non nulle : un subnormal, décodé comme 0.mantisse × 2^(1 − biais) — sans 1 de tête implicite. Ces règles sont identiques dans les quatre formats, c'est pourquoi les mêmes puces fonctionnent dans chacun.
- Arrondi : au plus proche, égalité vers le pair
- Quand une valeur tombe entre deux nombres représentables, le mode par défaut d'IEEE 754 arrondit vers le plus proche ; en cas d'égalité exacte, il choisit celui dont le dernier bit de mantisse est 0 (égalité vers le pair), ce qui évite toute dérive systématique. Ce convertisseur applique exactement cette règle en réduisant votre saisie décimale vers le format cible, et le panneau d'erreur montre exactement la différence signée résultante.
- ULP : l'espacement de la grille des flottants
- Les flottants représentables ne sont pas répartis uniformément — l'écart entre voisins (une unité à la dernière place) double à chaque puissance de deux. Près de 1.0, l'ULP d'un double vaut 2⁻⁵² ≈ 2.22 × 10⁻¹⁶ ; près de 2⁵³, l'ULP atteint 1.0 et les entiers commencent à sauter. Le panneau des voisins imprime l'ULP courant exactement — la réponse honnête à « quelle est la précision de mon nombre ici ? ».
Bonnes pratiques en virgule flottante
- Ne comparez jamais des flottants avec ==
- Après n'importe quelle arithmétique, deux expressions mathématiquement égales peuvent se retrouver à un ULP l'une de l'autre. Comparez avec une tolérance adaptée à vos ordres de grandeur — ou comptez les ULP entre les motifs de bits, que cet outil vous laisse inspecter directement.
- Tenez l'argent à l'écart des flottants binaires
- Aucune grille en puissances de deux ne contient 0.10 exactement, donc une devise stockée en flottants accumule des erreurs visibles. Utilisez des centimes entiers ou un type décimal ; le panneau de valeur stockée exacte de cet outil en est la preuve permanente.
- Choisissez le format 16 bits selon l'étendue, pas l'habitude
- Si vos valeurs peuvent dépasser 65504 — pertes, gradients, pics physiques — FP16 débordera vers Infinity là où bfloat16 continue sans broncher. Si tout est normalisé dans une bande étroite, les bits de mantisse supplémentaires de FP16 donnent une précision visiblement meilleure.
- Attention au piège du double arrondi lors du rétrécissement
- Convertir décimal → double → demi peut atterrir à un ULP du résultat de la conversion directe décimal → demi dans de rares cas limites. Cet outil arrondit votre saisie décimale vers le format cible en une seule étape, donc ce que vous voyez est la réponse IEEE 754 honnête.
- Attendez-vous à ce que les entiers cassent au-delà de 2⁵³
- Un double stocke exactement chaque entier jusqu'à 2⁵³, puis commence à en sauter — 2⁵³ + 1 n'est pas représentable. Si vous manipulez des identifiants ou des compteurs proches de cette échelle, utilisez des entiers 64 bits ou des chaînes, et vérifiez ici les valeurs suspectes au niveau du bit.
FAQ du convertisseur IEEE 754
Pourquoi 0.1 + 0.2 n'est-il pas égal à 0.3 ?
Qu'est-ce que IEEE 754 ?
Quelle est la différence entre FP16 et bfloat16 ?
Que sont les nombres subnormaux (dénormalisés) ?
Dois-je utiliser float ou double ?
Comment convertir un flottant en hexadécimal à la main ?
Mes données sont-elles envoyées quelque part quand j'utilise ce convertisseur ?
Outils connexes
Voir tous les outils →Convertisseur de Base — Binaire, Hex, Décimal & Octal
Outils de conversion
Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.
Convertisseur de couleurs — HEX, RGB, HSL et OKLCH
Outils de conversion
Convertissez HEX en RGB, HSL, OKLCH, OKLAB et CMYK dans votre navigateur — copiez n'importe quel format en un clic. Gratuit, sans inscription, vos couleurs ne quittent jamais la page.
Convertisseur HEX vers CMYK
Outils de conversion
Convertissez n'importe quelle couleur HEX en CMYK dans votre navigateur. Approximation naïve basée sur sRGB pour les aperçus d'impression. Gratuit, instantané, sans inscription, vos couleurs restent locales.
Convertisseur HEX vers HSL
Outils de conversion
Convertissez n'importe quelle couleur hex en HSL dans votre navigateur — hex à 3, 6 et 8 chiffres avec alpha pris en charge. Gratuit, instantané, sans inscription, vos couleurs ne quittent jamais la page.
Convertisseur HEX vers OKLCH
Outils de conversion
Convertissez HEX en OKLCH pour les tokens de design Tailwind v4. Sortie perceptuellement uniforme en direct avec alertes de gamut chromatique Display P3. Gratuit, dans le navigateur.
Convertisseur HEX vers RGB
Outils de conversion
Convertissez n'importe quel code couleur hex en RGB dans votre navigateur — hex à 3, 6 et 8 chiffres avec alpha pris en charge. Gratuit, instantané, sans inscription, vos couleurs ne quittent jamais la page.