Internationale norm die de weergave van drijvendekommagetallen en de rekenregels vastlegt. Definieert formaten zoals enkele precisie (32 bits) en dubbele precisie (64 bits), afrondmethoden en speciale waarden zoals oneindig en NaN, zodat rekenresultaten op elke computer gelijk zijn.
Japanse benaming: IEEE 754
“IEEE 754” komt voor in 14 oefenvragen uit 1 onderwerpen, bijv. Computerarithmetiek.
Een binair IEEE 754-getal slaat een tekenbit, een exponentveld met bias en een fractie op, en stelt voor normale getallen (−1)^teken × 1,fractie × 2^(exponent − bias) voor. Enkele precisie (FP32) gebruikt 1, 8 en 23 bits met een bias van 127; dubbele precisie (FP64) gebruikt 1, 11 en 52 bits met een bias van 1.023. De voorste 1 wordt verondersteld (de hidden bit), wat 24 en 53 bits precisie geeft, ongeveer 7 en 15–16 decimale cijfers. Zo heeft 1,0 een opgeslagen exponent van 127 en een fractie van alleen nullen, wat in FP32 0x3F800000 is.
Speciale waarden en excepties
De uiterste exponentcodes zijn gereserveerd. Een exponent van alleen nullen codeert ±0 en subnormale getallen, die de hidden 1 weglaten om het gat onder de kleinste normale waarde te vullen met gelijkmatig verdeelde zeer kleine waarden (gradual underflow). Een exponent van alleen enen codeert ±oneindig als de fractie nul is, en anders NaN (not a number). Een getal ongelijk aan nul delen door nul geeft oneindig, terwijl 0 ÷ 0 of ∞ − ∞ NaN geeft, dat zelfs met zichzelf vergeleken ongelijk is. +0 en −0 zijn bij vergelijking gelijk, maar geven als deler tegengestelde oneindigheden. Standaard zetten deze gebeurtenissen statusvlaggen in plaats van het programma te stoppen.
Afronding en precisiegrenzen
De basisbewerkingen, waaronder optellen, vermenigvuldigen, delen en worteltrekken, moeten correct afgerond zijn: het resultaat is gelijk aan de exacte waarde, afgerond naar een representeerbare waarde. De standaardmodus rondt af naar de dichtstbijzijnde waarde, bij gelijke afstand naar de even waarde (round to nearest, ties to even), wat een systematische opwaartse drift voorkomt. Machine-epsilon, het verschil boven 1,0, is 2⁻²³ (ongeveer 1,19 × 10⁻⁷) in FP32 en 2⁻⁵² in FP64, en gehele getallen zijn alleen exact tot respectievelijk 2²⁴ en 2⁵³. Decimale breuken zoals 0,1 zijn niet exact representeerbaar, en optellen met drijvende komma is niet associatief, dus resultaten moeten met een tolerantie worden vergeleken.
Drijvende komma versus vaste komma
Vastekommagetallen hebben gelijkmatig verdeelde waarden, dus de absolute fout is constant en het bereik is smal. Drijvende komma houdt de relatieve fout ruwweg constant over een enorm bereik, ongeveer 10⁻³⁰⁸ tot 10³⁰⁸ voor FP64, ten koste van complexere hardware voor uitlijning, normalisatie en afronding. De standaard definieert ook halve precisie met een exponent van 5 bits en een fused multiply-add die maar één keer afrondt. Hardware voor machine learning gebruikt vaak bfloat16, dat de exponent van 8 bits van FP32 behoudt met een fractie van 7 bits; het volgt dezelfde coderingsprincipes, maar is geen van de formaten van de standaard.
Een drijvendekommagetal drukt een waarde uit als (−1)^teken × 1.mantisse × 2^exponent en legt dit vast in drie delen: een tekenbit voor positief of negatief, een exponent die aangeeft met welke macht van 2 wordt vermenigvuldigd, en een mantisse voor de significante cijfers. Omdat de exponent de komma verschuift, kunnen met hetzelfde aantal bits zowel zeer kleine als zeer grote getallen worden weergegeven. De indeling in een geheel en een fractioneel deel is het principe van vaste komma; pariteit is een bit voor foutdetectie.
Enkele precisie (FP32) bestaat uit 1 tekenbit, 8 exponentbits en 23 mantissebits, samen 32 bit. Bij genormaliseerde getallen wordt de voorste 1 van de mantisse weggelaten, zodat de precisie 24 bit bedraagt, ongeveer 7 decimale cijfers. Dubbele precisie (FP64) heeft 1 teken-, 11 exponent- en 52 mantissebits, met een groter exponentbereik en een hogere precisie. 1 · 11 · 20 verwart met de exponentbreedte van dubbele precisie en 1 · 5 · 26 met die van halve precisie.
Veelgestelde vragen
Waarom is 0,1 + 0,2 niet gelijk aan 0,3 bij drijvende komma?
Geen van deze decimale waarden heeft een exacte binaire representatie, dus elke waarde wordt afgerond opgeslagen en de afrondingsfouten heffen elkaar niet op. In dubbele precisie komt de som uit op 0,30000000000000004, dus gelijkheidstests moeten een tolerantie gebruiken.
Wat is de exponentbias bij IEEE 754 enkele precisie?
De bias is 127, dus de werkelijke exponent is de opgeslagen waarde van 8 bits min 127. De opgeslagen waarden 0 en 255 zijn gereserveerd voor nul, subnormale getallen, oneindig en NaN, zodat 1–254 overblijft voor normale getallen.
Waarom is NaN niet gelijk aan zichzelf?
IEEE 754 definieert elke vergelijking met NaN als ongeordend, dus x == x is onwaar als x NaN is. Gebruik een daarvoor bedoelde functie zoals isnan in plaats van op deze truc te vertrouwen.
“IEEE 754” in de toelichting
IEEE 754 bepaalt dat het delen van een getal ongelijk aan 0 door 0 afhankelijk van het teken positief of negatief oneindig oplevert.
De standaardafronding van IEEE 754 is afronden naar de dichtstbijzijnde weer te geven waarde en bij een exacte middenwaarde de waarde kiezen waarvan het minst significante bit 0 (even) is (round to nearest, ties to even).
Volgens IEEE 754 is NaN een waarde die geen getal is en is die in geen enkele vergelijking gelijk aan een andere waarde, ook niet aan NaN zelf; x == x is dus onwaar (x != x is waar).