Skip to content

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.

Geen tracking Draait in je browser Gratis
Alles draait lokaal in je browser — de waarden die je typt verlaten dit apparaat nooit.
Formaat
Speciale waarden
Bitindeling — klik op een bit om die om te wisselen
Teken Exponent Mantisse
Veldopbouw
Teken
Exponent
Mantisse
Opgeslagen waarde & afrondingsfout
Je invoer
Daadwerkelijk opgeslagen
Afrondingsfout
Naburige representeerbare waarden
Vorige
Volgende
ULP (stapgrootte)
IEEE 754-formaatparameters in één oogopslag
Formaat Totaal aantal bits Teken Exponent Mantisse Bias Max. eindige waarde Decimale cijfers
binary16 (FP16)1615101565504~3.3
bfloat1616187127≈3.39×10³⁸~2.3
binary32 (FP32)321823127≈3.40×10³⁸~7.2
binary64 (FP64)64111521023≈1.80×10³⁰⁸~15.9
Gecontroleerd op numerieke juistheid aan de hand van de formaatdefinities van IEEE 754-2019; elke voorbeeldwaarde geverifieerd met exacte big-integer-rekenkunde — Go Tools Engineering Team · Jul 16, 2026

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. 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. 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. 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. 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. 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.

✗ Fout
print(0.1)  # 0.1 — oogt exact, is het niet
✓ Correct
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.

✗ Fout
if (0.1 + 0.2 === 0.3) { … }   // wordt nooit uitgevoerd
✓ Correct
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.

✗ Fout
fp16(65520)   → Infinity (0x7C00) — stille overflow
✓ Correct
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.

✗ Fout
if (x === NaN) { … }        // altijd false, ook wanneer x WEL NaN is
✓ Correct
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?
Omdat geen van de drie getallen in binaire drijvende komma bestaat. Een double slaat 0.1 op als exact 0.1000000000000000055511151231257827021181583404541015625 en 0.2 met een vergelijkbaar miniem overschot; optellen geeft 0.3000000000000000444089209850062616169452667236328125 (bits 0x3FD3333333333334), terwijl de literal 0.3 afrondt naar 0.299999999999999988897769753748434595763683319091796875 (bits 0x3FD3333333333333). De som landt één representeerbare stap boven de literal — twee verschillende bitpatronen — dus 0.1 + 0.2 == 0.3 is false in elke IEEE 754-taal: JavaScript, Python, Java, C, Rust, Go. Typ 0.1 in deze converter en lees de exact opgeslagen waarde om de oorzaak met eigen ogen te zien.
Wat is IEEE 754?
IEEE 754 is de technische standaard voor binaire drijvende-kommarekenkunde die door vrijwel elke moderne CPU, GPU en programmeertaal wordt gebruikt. De standaard definieert hoe een getal in bits wordt verpakt — één tekenbit, een exponentveld en een mantisse (significand) — plus de afrondingsregels en de speciale waarden Infinity, NaN, nul met teken en subnormale getallen. De formaten die je in de praktijk tegenkomt zijn binary32 (float, FP32), binary64 (double, FP64), binary16 (half, FP16) en de verwante bfloat16-truncatie die in machine learning wordt gebruikt. Deze converter toont alle vier op bitniveau.
Wat is het verschil tussen FP16 en bfloat16?
Beide zijn 16-bit-formaten, maar ze verdelen hun bits verschillend. FP16 (IEEE binary16) gebruikt 5 exponentbits en 10 mantissebits: meer precisie, maar een klein bereik — de grootste eindige waarde is 65504, dus overflow naar Infinity ligt voortdurend op de loer. bfloat16 behoudt de 8 exponentbits van FP32 en heeft maar 7 mantissebits: het volledige bereik van ±3,4 × 10³⁸ van een float, met veel grovere precisie. Daarom standaardiseerde ML-training, waar gradiënten veel groter dan 65504 kunnen worden, op bfloat16, terwijl FP16 geschikt is voor opslag en inference waar de waarden getemd zijn. Vergelijk ze hier: typ 0.1 en wissel van formaat — FP16 slaat 0.0999755859375 op (0x2E66), bfloat16 slaat 0.10009765625 op (0x3DCD).
Wat zijn subnormale (gedenormaliseerde) getallen?
Wanneer het exponentveld uit louter nullen bestaat, laat IEEE 754 de impliciete voorloop-1 vallen en mag de mantisse geleidelijk naar nul krimpen — dit zijn subnormale getallen (oudere term: gedenormaliseerde of denormale getallen). Ze vullen het gat tussen nul en het kleinste normale getal, zodat het verschil van twee ongelijke floats nooit naar nul kan afronden (gradual underflow). De prijs is verminderde precisie en, op veel CPU's, tragere rekenkunde. In FP16 is het kleinste subnormale getal 2⁻²⁴ = 0.000000059604644775390625; klik in elk formaat op de knop Min. subnormaal om het bitpatroon te inspecteren — exponentbits allemaal nul, mantisse 0…001.
Moet ik float of double gebruiken?
Kies standaard voor double (FP64), tenzij je een gemeten reden hebt om dat niet te doen. Een double draagt ongeveer 15–16 significante decimale cijfers tegenover ruwweg 7 voor een float, en de meeste talen (JavaScript-getallen, Python-floats) zijn toch al double-only. Kies float (FP32) wanneer geheugenbandbreedte of opslag domineert — grote arrays, GPU-pijplijnen, graphics — en je hebt bevestigd dat 7 cijfers genoeg zijn. Gebruik voor geldbedragen gehele getallen (centen) of een decimaal type: geen enkel binair formaat slaat 0.1 exact op, zoals het paneel met de opgeslagen waarde van deze tool laat zien. Wil je in plaats daarvan gehele getallen in andere talstelsels inspecteren, bekijk dan de talstelsel-omrekentool.
Hoe reken je een float handmatig om naar hex?
Neem het teken (0 voor positief, 1 voor negatief). Schrijf de absolute waarde in binair en normaliseer naar 1.xxx × 2ⁿ. Tel de bias van het formaat op bij n (127 voor FP32, 1023 voor FP64) en schrijf dat in de exponentbits. Laat de voorloop-1 vallen en houd de volgende 23 (of 52) bits van de fractie als mantisse, met afronding naar even op het afkappunt. Plak teken, exponent en mantisse aan elkaar en groepeer elke 4 bits tot één hexcijfer. Voor 3.14159 in FP32 geeft dat 0 | 10000000 | 10010010000111111010000 → 0x40490FD0 — of sla het rekenwerk over en laat deze converter elke stap zichtbaar uitvoeren.
Worden mijn gegevens geüpload als ik deze converter gebruik?
Nee. Alle omrekeningen worden lokaal in je browser uitgevoerd met puur JavaScript — DataView- en BigInt-rekenkunde, geen omweg via een server, geen bibliotheken van derden. Je kunt de ontwikkelaarstools van je browser openen en zien dat het netwerkpaneel stil blijft terwijl je typt, of de internetverbinding volledig verbreken en gewoon doorgaan met omrekenen. De knop Link kopiëren encodeert het bitpatroon in het URL-fragment, dat evenmin ooit naar een server wordt gestuurd.

Gerelateerde tools

Alle tools bekijken →