IEEE 754-converter voor drijvende-kommagetallen
Reken decimale floats online om naar IEEE 754-hex en binair — halve, enkele en dubbele precisie plus bfloat16. Bekijk de exact opgeslagen waarde, afrondingsfout en bitindeling. Alles draait in je browser.
| Teken | |
| Exponent | |
| Mantisse |
- Je invoer
- Daadwerkelijk opgeslagen
- Afrondingsfout
- Vorige
- Volgende
- ULP (stapgrootte)
| Formaat | Totaal aantal bits | Teken | Exponent | Mantisse | Bias | Max. eindige waarde | Decimale cijfers |
|---|---|---|---|---|---|---|---|
| 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 |
Wat is IEEE 754 drijvende-kommanotatie?
IEEE 754 is de standaard die definieert hoe computers reële getallen binair opslaan. Elke waarde wordt verpakt in drie velden: een tekenbit, een exponent (opgeslagen met een bias, zodat zowel grote als piepkleine magnitudes representeerbaar zijn) en een mantisse met de significante cijfers. Vrijwel elke CPU, GPU en programmeertaal gebruikt de standaard, en daarom duiken dezelfde afrondingsverrassingen op in JavaScript, Python, C en SQL.
Het kerninzicht is dat binaire drijvende komma alleen getallen van de vorm m × 2ⁿ kan representeren. Decimale breuken zoals 0.1 zijn in het tweetallig stelsel oneindig repeterende breuken — 0.000110011001100… — dus het formaat slaat in plaats daarvan de dichtstbijzijnde representeerbare buurwaarde op. In enkele precisie is die buurwaarde 0.100000001490116119384765625; in dubbele precisie is het 0.1000000000000000055511151231257827021181583404541015625. Geen van beide is 0.1. Elke eigenaardigheid verderop — 0.1 + 0.2 ≠ 0.3, sommen die wegdrijven, gelijkheidscontroles die falen — volgt uit dit ene feit, en deze converter maakt het zichtbaar door de exact opgeslagen waarde te tonen in plaats van een teruggeronde benadering.
De standaard reserveert ook bitpatronen voor speciale waarden. Een exponent van louter enen encodeert ±Infinity (mantisse nul) of NaN (mantisse niet nul); een exponent van louter nullen encodeert nul met teken (mantisse nul) of subnormale getallen (mantisse niet nul), die met verminderde precisie het underflow-gat naast nul vullen. De vier formaten die deze tool dekt — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — verschillen alleen in hoeveel bits elk veld krijgt: meer exponentbits betekenen meer bereik, meer mantissebits betekenen meer precisie. bfloat16, de favoriet in machine learning, is simpelweg FP32 waarvan de onderste 16 mantissebits zijn afgeknipt: hetzelfde bereik, veel grovere precisie.
Een nuttig mentaal model is dat representeerbare floats een raster op de getallenlijn vormen waarvan de tussenruimte — één unit in the last place, ofwel ULP — bij elke macht van twee verdubbelt. Nabij 1.0 is de rasterafstand van een double ongeveer 2,22 × 10⁻¹⁶; nabij 2⁵³ is die een heel geheel getal, en daarom kan een double gehele getallen groter dan 2⁵³ niet meer betrouwbaar representeren. Het paneel met buurwaarden in deze tool toont dat raster rechtstreeks: de vorige en volgende representeerbare waarden rond wat je ook typt, met de exacte tussenruimte.
// 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 Belangrijkste functies
Vier formaten, één overzicht
Halve precisie (FP16), bfloat16, enkele precisie (FP32) en dubbele precisie (FP64) — wissel met één klik en de hele pagina wordt opnieuw berekend, zodat je in een paar seconden vergelijkt hoe hetzelfde getal in elk formaat terechtkomt.
Klikbaar bitraster
Elke bit is een knop. Wissel de tekenbit om, verschuif de exponent of prik in een mantissebit en zie de decimale, hexadecimale en binaire weergaven direct bijwerken — de snelste manier om intuïtie voor de codering op te bouwen.
Exact opgeslagen waarde, geen benadering
De tool berekent de volledige decimale expansie van de opgeslagen bits met exacte big-integer-rekenkunde — alle 55 cijfers voor de 0.1 van een double — plus de exacte afrondingsfout met teken ten opzichte van wat je typte.
Buurwaarden en ULP
Bekijk de vorige en volgende representeerbare waarden rond het huidige getal en het exacte verschil (ULP) ertussen — de rasterafstand die bepaalt hoeveel precisie je bij een gegeven magnitude werkelijk hebt.
Speciale waarden met één klik
Knoppen laden ±0, ±Infinity, NaN, het kleinste subnormale getal en de grootste eindige waarde van het gekozen formaat, en de classificatiebadge benoemt wat het huidige bitpatroon encodeert.
Deelbare permalinks, nul upload
Link kopiëren encodeert het formaat en het exacte bitpatroon in de URL — ideaal voor bugrapporten, codereviews en onderwijs. Alles draait in je browser; niets van wat je typt verlaat de pagina.
Voorbeelden van IEEE 754-omrekening
0.1 in enkele precisie — de klassieke afrondingsfout
0.1
0x3DCCCCCD — daadwerkelijk opgeslagen als 0.100000001490116119384765625
Decimaal 0.1 heeft geen eindige binaire representatie, dus IEEE 754 slaat in plaats daarvan de dichtstbijzijnde representeerbare waarde op. In enkele precisie (FP32) is dat 0x3DCCCCCD, wat exact 0.100000001490116119384765625 is — ongeveer 1,49 × 10⁻⁹ te groot. De tool toont deze exact opgeslagen waarde en de exacte fout, cijfer voor cijfer, in plaats van de afgeronde '0.1' die je programmeertaal je teruggeeft. Dit ene voorbeeld verklaart de meeste drijvende-kommaverrassingen, inclusief waarom 0.1 + 0.2 niet gelijk is aan 0.3.
Float naar hex: 3.14159 in FP32
3.14159
0x40490FD0
Typ 3.14159 met enkele precisie (FP32) geselecteerd en het hexveld toont 0x40490FD0 — teken 0, exponent met bias 128 (dus 2¹), mantisse 0x490FD0. De waarde die daadwerkelijk wordt opgeslagen is 3.141590118408203125, net iets boven wat je typte. De hexvorm is wat je ziet in netwerkdumps, GPU-buffers, registerweergaven en geserialiseerde binaire bestanden, en de omrekening werkt in beide richtingen: plak 40490FD0 in het hexveld om het terug te decoderen.
FP16-maximum: 65504 is waar halve precisie ophoudt
65504
0x7BFF — de grootste eindige FP16-waarde
Halve precisie heeft maar 5 exponentbits en 10 mantissebits, dus de grootste eindige waarde is 65504 (0x7BFF). Typ 65520 of iets groters en het resultaat rondt af naar Infinity (0x7C00) — een reëel risico bij het kwantiseren van ML-modellen naar FP16. Schakel over naar bfloat16 en diezelfde 65520 past moeiteloos, omdat bfloat16 de 8 exponentbits (bereik) van FP32 behoudt en daarvoor mantissebits (precisie) inlevert. Precies die afweging is waarom ML-training de voorkeur geeft aan bfloat16 en compacte opslag aan FP16.
−0 en +0: twee verschillende bitpatronen, één waarde
-0
0x80000000 (FP32), terwijl +0 0x00000000 is
IEEE 754 kent een nul met teken: −0 zet alleen de tekenbit (0x80000000 in FP32), terwijl +0 uit louter nullen bestaat. Ze zijn in elke taal gelijk bij vergelijking, maar 1/−0 is −Infinity en 1/+0 is +Infinity, dus het verschil is waarneembaar. Klik in de tool op de tekenbit om tussen beide te wisselen en zie hoe de classificatiebadge op Nul blijft staan terwijl de hex verandert — een illustratie met één klik van waarom gelijkheid op bitniveau en numerieke gelijkheid twee verschillende dingen zijn.
Zo reken je IEEE 754-getallen om
- 1
Kies een drijvende-kommaformaat
Enkele precisie (FP32) is vooraf geselecteerd. Schakel over naar dubbele precisie (FP64) voor getallen in JavaScript/Python-stijl, of naar halve precisie (FP16) en bfloat16 voor de 16-bit-formaten uit machine learning en graphics.
- 2
Typ een decimaal getal
Voer een willekeurige waarde in — 0.1, -2.5e3, 65504 — of gebruik de knoppen voor speciale waarden: ±0, ±Infinity, NaN, het kleinste subnormale getal en de grootste eindige waarde. De omrekening gebeurt terwijl je typt.
- 3
Lees de bitindeling met kleurcodering
De tekenbit, het exponentveld en de mantisse zijn in verschillende kleuren gemarkeerd, en de tabel met de veldopbouw toont de ruwe bits, de biasberekening en de impliciete voorloopbit.
- 4
Controleer de exact opgeslagen waarde en de fout
Het nauwkeurigheidspaneel toont de waarde die daadwerkelijk wordt opgeslagen — elk cijfer, exact berekend — naast de afrondingsfout ten opzichte van wat je typte, plus de vorige en volgende representeerbare buurwaarden en het ULP-verschil.
- 5
Wissel bits om, plak hex, kopieer resultaten
Klik op een bit om die om te wisselen, of plak hex- (3DCCCCCD) en binaire strings om ze terug te decoderen naar decimaal. Kopieer de hex, het binair, de exacte waarde of een deelbare link die het exacte bitpatroon reproduceert.
Veelgemaakte fouten met drijvende komma
Vertrouwen op de geprinte waarde in plaats van de opgeslagen waarde
Talen printen floats afgerond naar de kortste string die bij inlezen dezelfde float oplevert, dus 0.1 oogt schoon terwijl de opgeslagen waarde dat niet is. Beoordeel precisie op de exacte expansie, niet op wat print() toont.
print(0.1) # 0.1 — oogt exact, is het niet
0.1 opgeslagen (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Floats vergelijken op exacte gelijkheid
0.1 + 0.2 landt op bitpatroon 0x3FD3333333333334 terwijl de literal 0.3 0x3FD3333333333333 is — één ULP verschil, dus == is false hoewel beide printen als waarden rond 0.3.
if (0.1 + 0.2 === 0.3) { … } // wordt nooit uitgevoerd if (Math.abs(a - b) < 1e-9) { … } // tolerantie afgestemd op je data Naar FP16 kwantiseren zonder het bereik te controleren
De grootste eindige FP16-waarde is 65504. Alles wat groter is wordt Infinity, en zodra een Infinity een berekening binnenkomt, plant die zich voort. Controleer je maxima voordat je naar het kleinere formaat converteert — of gebruik bfloat16, dat het bereik van FP32 behoudt.
fp16(65520) → Infinity (0x7C00) — stille overflow
bf16(65520) → eindig (bfloat16 behoudt 8 exponentbits)
NaN testen met gelijkheid
NaN is de enige waarde die niet gelijk is aan zichzelf — dat is bewust ontworpen, zodat een mislukte berekening zich niet kan voordoen als een echt getal. Gebruik de isNaN-controle van je taal in plaats van ==, en bedenk dat er miljoenen verschillende NaN-bitpatronen bestaan.
if (x === NaN) { … } // altijd false, ook wanneer x WEL NaN is if (Number.isNaN(x)) { … } // de juiste test Wat je kunt doen met de IEEE 754-converter
- Debug geserialiseerde binaire data
- Plak de hex die je vond in een netwerkcapture, GPU-buffer, registerdump of bestandsformaat en decodeer die naar de exacte decimale waarde — of ga de andere kant op om testfixtures te schrijven. Let op de bytevolgorde: de getoonde hex is het big-endian-bitpatroon; als je dump little-endian is, draai dan de bytevolgorde om voordat je plakt.
- Begrijp ML-kwantisatie
- Controleer of je waarden het 65504-plafond van FP16 overleven, vergelijk het precisieverlies van FP16 en bfloat16 cijfer voor cijfer en inspecteer het subnormale bereik waarin gradiënten door underflow naar nul zakken.
- Leg een drijvende-kommabug uit
- Wanneer een collega vraagt waarom twee 'gelijke' getallen verschillen, stuur je een permalink met beide bitpatronen en de exact opgeslagen waarden — de discussie beslecht zichzelf. Combineer met de Text Diff-tool voor langere dumps.
- Leer of onderwijs de codering
- Colleges computerarchitectuur worden concreet wanneer studenten op de exponentbits kunnen klikken en de biasberekening zien bijwerken. De tabel met de veldopbouw weerspiegelt hoe studieboeken het formaat tekenen.
- Decodeer embedded en industriële registers
- Modbus-, CAN- en sensorpayloads bevatten geregeld FP32-waarden als ruwe hexwoorden. Plak het woord hier om de fysieke waarde af te lezen zonder een wegwerpscript te schrijven.
IEEE 754-formaten & speciale waarden
- De vier binaire formaten in één oogopslag
- binary16 (FP16): 1 teken- + 5 exponent- + 10 mantissebits, bias 15, max 65504, ~3,3 decimale cijfers. bfloat16: 1 + 8 + 7, bias 127, max ≈ 3,39 × 10³⁸, ~2,3 cijfers. binary32 (FP32): 1 + 8 + 23, bias 127, max ≈ 3,40 × 10³⁸, ~7,2 cijfers. binary64 (FP64): 1 + 11 + 52, bias 1023, max ≈ 1,80 × 10³⁰⁸, ~15,9 cijfers. Het patroon: exponentbits kopen bereik, mantissebits kopen precisie, en bfloat16 ruilt bewust al zijn precisie in voor het bereik van FP32.
- Hoe een waarde wordt opgebouwd
- Een normaal getal decodeert als (−1)^teken × 1.mantisse × 2^(exponent − bias). De voorloop-1 is impliciet — die wordt niet opgeslagen, en daarom levert een mantisseveld van 23 bits toch 24 bits precisie. De opgeslagen exponent is de werkelijke exponent plus de bias (127 in FP32), dus 2⁰ wordt opgeslagen als 01111111. De tabel met de veldopbouw in deze tool toont elke stap van die berekening voor de huidige waarde.
- Speciale waarden: de gereserveerde exponentpatronen
- Exponent louter enen met mantisse nul is ±Infinity; met een mantisse ongelijk aan nul is het NaN (de canonieke quiet NaN zet de bovenste mantissebit). Exponent louter nullen met mantisse nul is ±0; met een mantisse ongelijk aan nul is het een subnormaal getal, gedecodeerd als 0.mantisse × 2^(1 − bias) — zonder impliciete voorloop-1. Deze regels zijn identiek in alle vier de formaten, en daarom werken dezelfde knoppen in elk formaat.
- Afronding: naar dichtstbijzijnde, bij gelijke afstand naar even
- Wanneer een waarde tussen twee representeerbare getallen valt, rondt de standaardmodus van IEEE 754 af naar het dichtstbijzijnde getal; bij een exact gelijke afstand kiest hij het getal waarvan de laatste mantissebit 0 is (ties to even), wat systematische drift voorkomt. Deze converter past exact die regel toe bij het versmallen van je decimale invoer naar het doelformaat, en het foutpaneel toont het resulterende verschil met teken exact.
- ULP: de rasterafstand van floats
- Representeerbare floats liggen niet gelijkmatig verspreid — het gat tussen buurwaarden (één unit in the last place) verdubbelt bij elke macht van twee. Nabij 1.0 is de ULP van een double 2⁻⁵² ≈ 2,22 × 10⁻¹⁶; nabij 2⁵³ bereikt de ULP 1.0 en beginnen gehele getallen over te slaan. Het paneel met buurwaarden toont de huidige ULP exact — het eerlijke antwoord op 'hoe precies is mijn getal hier?'.
Aanbevolen aanpak voor drijvende komma
- Vergelijk floats nooit met ==
- Na elke rekenbewerking kunnen twee wiskundig gelijke expressies één ULP uit elkaar liggen. Vergelijk tegen een tolerantie die past bij je magnitudes — of tel de ULP's tussen de bitpatronen, die je in deze tool rechtstreeks kunt inspecteren.
- Houd geld buiten binaire floats
- Geen enkel macht-van-twee-raster bevat 0.10 exact, dus valuta in floats stapelt zichtbare fouten op. Gebruik gehele centen of een decimaal type; het paneel met de exact opgeslagen waarde is hier het staande bewijs waarom.
- Kies het 16-bit-formaat op bereik, niet uit gewoonte
- Kunnen je waarden 65504 overschrijden — verliezen, gradiënten, fysicapieken — dan loopt FP16 over naar Infinity waar bfloat16 gewoon doorvaart. Is alles genormaliseerd naar een smalle band, dan geven de extra mantissebits van FP16 zichtbaar betere precisie.
- Pas op voor de dubbele-afrondingsval bij versmallen
- Decimaal → double → half omrekenen kan in zeldzame randgevallen één ULP verwijderd landen van decimaal → half rechtstreeks. Deze tool rondt je decimale invoer in één stap af naar het doelformaat, dus wat je ziet is het eerlijke IEEE 754-antwoord.
- Verwacht dat gehele getallen groter dan 2⁵³ breken
- Een double slaat elk geheel getal tot en met 2⁵³ exact op en begint daarna over te slaan — 2⁵³ + 1 is niet representeerbaar. Werk je met ID's of tellers rond die schaal, gebruik dan 64-bit-integers of strings, en controleer verdachte waarden hier op bitniveau.
Veelgestelde vragen over de IEEE 754-converter
Waarom is 0.1 + 0.2 niet gelijk aan 0.3?
Wat is IEEE 754?
Wat is het verschil tussen FP16 en bfloat16?
Wat zijn subnormale (gedenormaliseerde) getallen?
Moet ik float of double gebruiken?
Hoe reken je een float handmatig om naar hex?
Worden mijn gegevens geüpload als ik deze converter gebruik?
Gerelateerde tools
Alle tools bekijken →Talstelsel omrekenen — online converter
Omrekentools
Reken je getal direct om tussen binair, hex, decimaal, octaal en elk talstelsel (2-36). Gratis en privé — alles draait in je browser.
Color converter — HEX, RGB, HSL & OKLCH
Omrekentools
Converteer HEX naar RGB, HSL, OKLCH, OKLAB en CMYK in je browser — kopieer elk formaat met één klik. Gratis, geen account, je kleuren verlaten de pagina nooit.
Hex naar CMYK converter
Omrekentools
Converteer HEX-kleuren naar CMYK in je browser. Naïeve sRGB-gebaseerde benadering voor printvoorbeelden. Gratis, geen account, je kleuren blijven lokaal.
Hex naar HSL converter
Omrekentools
Converteer elke hex-kleur naar HSL in je browser — 3-cijferig, 6-cijferig en 8-cijferig hex met alpha worden allemaal ondersteund. Gratis, direct, geen account, je kleuren verlaten de pagina nooit.
Hex naar OKLCH converter
Omrekentools
Converteer HEX naar OKLCH voor Tailwind v4 design-tokens. Live perceptueel-uniforme uitvoer met Display P3 gamut-waarschuwingen. Gratis, alleen in je browser.
Hex naar RGB converter
Omrekentools
Converteer elke hex-kleurcode naar RGB in je browser — 3-cijferig, 6-cijferig en 8-cijferig hex met alpha worden allemaal ondersteund. Gratis, direct, geen account, je kleuren verlaten de pagina nooit.