Vaste komma versus drijvende komma: bereik, precisie en hardware

Bij vaste komma ligt de plaats van de komma vooraf vast en worden breuken verwerkt met dezelfde bitreeksen en rekeneenheden als gehele getallen. De schakeling is klein en zuinig, dus wordt vaste komma gebruikt in DSP's, in microcontrollers zonder drijvendekommaeenheid en voor integerberekeningen bij AI-inferentie. Drijvende komma stelt een getal voor met teken, exponent en mantisse en verschuift de komma via de exponent, zodat een zeer breed bereik met een vrijwel constante relatieve precisie kan worden verwerkt. De rekeneenheden zijn groter, maar omdat je je niet om het uitlijnen van posities hoeft te bekommeren, is drijvende komma de standaard voor algemeen rekenwerk en AI-training.

KenmerkVaste kommaDrijvende komma
RepresentatieEen integer-bitreeks die wordt gelezen met een vooraf vastgelegde schaal (2 tot de macht −n). Genoteerd als bijvoorbeeld Q15Drie delen, teken, exponent en mantisse: (−1)^teken × 1,mantisse × 2^(exponent − bias). Vastgelegd in IEEE 754
Bereik (voorbeeld)Q15 (16 bit): −1 tot 1 − 2⁻¹⁵Enkele precisie (32 bit): ongeveer 10⁻³⁸ tot 10³⁸. Met subnormale getallen nog dichter bij 0
PrecisieConstante stapgrootte (constante absolute fout). Hoe kleiner de waarde, hoe groter de relatieve foutVrijwel constante relatieve precisie (ongeveer 7 cijfers bij enkele precisie). Hoe groter de waarde, hoe groter de stap
RekeneenheidGewone integeropteller en -vermenigvuldigerSchakelingen nodig voor het vergelijken van exponenten, uitlijnen van mantissen, normaliseren en afronden
Omvang en vermogen van de schakelingKlein. Bij dezelfde bitbreedte veel minder dan drijvende kommaGroot. Vaak meerdere keren meer oppervlak en energie dan een integereenheid met dezelfde bitbreedte
Omgang met overflowBij two's complement slaat de waarde om naar de andere kant. Voorkomen met verzadigende rekenkunde of accumulatoren met extra bits (guard bits)Boven de grootste representeerbare waarde wordt het resultaat ±oneindig. 0 ÷ 0 en dergelijke geven NaN
SchalingDe programmeur schat het waardebereik en ontwerpt de verschuivingen en kommaposities bij elke bewerkingDe exponent past zich automatisch aan, dus er hoeft nauwelijks over te worden nagedacht
Reproduceerbaarheid van resultatenResultaten zijn gemakkelijk bit voor bit gelijkDe volgorde van optellen verandert het resultaat licht (de associatieve eigenschap geldt niet)
Waar gebruiktDSP's, kleine microcontrollers zonder drijvendekommaeenheid, signaalverwerking in FPGA's en ASIC's, integerberekeningen bij AI-inferentie (zoals INT8)Algemeen rekenwerk op pc's en servers, wetenschappelijk rekenwerk (dubbele precisie), graphics, AI-training (FP32, BF16, FP16, FP8)

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

Vaste komma
Wanneer signaalverwerking met een vooraf bekend waardebereik met een kleine schakeling of weinig vermogen moet gebeuren. Filters voor audio en communicatie, motorbesturing, implementaties in FPGA's en inferentie van gekwantiseerde AI-modellen.
Drijvende komma
Berekeningen met een breed of vooraf onbekend waardebereik. Wetenschappelijk rekenwerk, fysische simulaties, graphics, AI-training en andere gevallen waarin ontwikkelgemak en numerieke stabiliteit voorgaan.
Combinatie
Bij AI wordt steeds vaker getraind in drijvende komma, terwijl voor inferentie wordt gekwantiseerd naar geschaalde integers (zoals INT8) die worden berekend met integerrekeneenheden, net als bij vaste komma.

Veelgestelde vragen

Waarom is de schakeling bij vaste komma klein?

Omdat de kommapositie vastligt, kunnen gewone integeroptellers en -vermenigvuldigers worden gebruikt. Bij drijvende komma moeten bij elke optelling de exponenten worden vergeleken, de mantissen worden uitgelijnd en het resultaat worden genormaliseerd en afgerond, wat oppervlak en vermogen vergroot.

Wat gebeurt er bij overflow in vaste komma?

Net als bij two's-complement-integers slaat de waarde bij overschrijding van het maximum om naar de kant van het minimum, wat een grote fout geeft, bijvoorbeeld een grote positieve waarde die negatief wordt. DSP's voorkomen dit met verzadigende rekenkunde, die op het maximum of minimum blijft staan, of met brede accumulatoren met guard bits.

Is drijvende komma vrij van fouten?

Nee. Ook drijvende komma heeft een eindig aantal bits, dus waarden die binair niet exact representeerbaar zijn, zoals 0,1, hebben afrondingsfouten, en er treden ook cijferverlies bij aftrekken en verlies van kleine termen bij optellen op. Het voordeel is het brede bereik en de vrijwel constante relatieve precisie.

Is INT8 bij AI-inferentie vaste komma?

Het principe lijkt erop. Drijvendekommawaarden worden door een schaal gedeeld en naar INT8-integers omgezet, de vermenigvuldig-en-optelbewerkingen gebeuren met integers, en aan het eind wordt weer met de schaal vermenigvuldigd. Het verschil met vaste komma is dat de schaal niet beperkt is tot machten van 2 en per laag of per kanaal kan worden gekozen.

Test uw begrip

Wat is de belangrijkste reden dat in kleine microcontrollers en DSP's vaak vastekommabewerkingen in plaats van drijvendekommabewerkingen worden gebruikt?

  1. AEr kan met schakelingen voor gehele getallen worden gerekend, zodat de schakeling klein is en weinig vermogen verbruikt
  2. BVaste komma kan altijd een breder bereik weergeven dan drijvende komma
  3. CBij vaste komma treden helemaal geen afrondfouten op
Antwoord en toelichting tonen

Antwoord: A. Er kan met schakelingen voor gehele getallen worden gerekend, zodat de schakeling klein is en weinig vermogen verbruikt

Bij vaste komma ligt alleen de positie van de komma vast en is de inhoud een geheel getal, zodat optellen en vermenigvuldigen met schakelingen voor gehele getallen kan gebeuren. Schakelingen om exponenten gelijk te trekken en te normaliseren, zoals in een drijvendekommaeenheid, zijn niet nodig, dus het chipoppervlak en het vermogensverbruik blijven beperkt; daarom is vaste komma geliefd in goedkope microcontrollers en DSP's voor signaalverwerking. Daar staat tegenover dat het weer te geven bereik smal is en het ontwerp moet letten op overflow en onvoldoende precisie. Drijvende komma heeft het bredere bereik en ook bij vaste komma treden afrondfouten op.

Welke combinatie van stapgrootte (resolutie) en bereik is juist voor het 16-bits ondertekende vastekommaformaat Q15 (15 fractiebits)?

  1. AStap 2⁻¹⁶, bereik 0 tot 1
  2. BStap 2⁻¹⁵, bereik −1 tot 1 − 2⁻¹⁵
  3. CStap 2⁻¹⁵, bereik −32768 tot 32767
Antwoord en toelichting tonen

Antwoord: B. Stap 2⁻¹⁵, bereik −1 tot 1 − 2⁻¹⁵

Bij Q15 is van de 16 bit 1 bit het teken en zijn 15 bit het fractionele deel; de waarde is het als geheel getal gelezen getal gedeeld door 2¹⁵ = 32768. Het bereik −32768 tot 32767 gedeeld door 32768 geeft −1 tot 32767/32768 = 1 − 2⁻¹⁵, met een stap van 1/32768 = 2⁻¹⁵ ≈ 3,05 × 10⁻⁵. Let erop dat precies +1 niet kan worden weergegeven. −32768 tot 32767 is het bereik wanneer het zonder komma als geheel getal wordt gelezen. Dit formaat wordt veel gebruikt in signaalverwerking zoals audio.

Hoe moet het resultaat worden behandeld wanneer twee vastekommagetallen met 8 fractiebits met een vermenigvuldiger voor gehele getallen worden vermenigvuldigd?

  1. AHet resultaat heeft ook zonder meer 8 fractiebits, dus er hoeft niets te gebeuren
  2. BHet resultaat heeft 4 fractiebits, dus het wordt 4 bit naar links geschoven
  3. CHet resultaat heeft 16 fractiebits, dus om terug te keren naar het oorspronkelijke formaat wordt 8 bit naar rechts geschoven
Antwoord en toelichting tonen

Antwoord: C. Het resultaat heeft 16 fractiebits, dus om terug te keren naar het oorspronkelijke formaat wordt 8 bit naar rechts geschoven

Een getal met 8 fractiebits wordt opgeslagen als een geheel getal dat 2⁸ keer de werkelijke waarde is. Het product van twee zulke getallen is 2⁸ × 2⁸ = 2¹⁶ keer de werkelijke waarde, dus het resultaat heeft 16 fractiebits. Om terug te keren naar het formaat met 8 fractiebits wordt door 2⁸ gedeeld, dus 8 bit naar rechts geschoven, en zo nodig afgerond. Omdat het aantal cijfers bij vermenigvuldigen toeneemt, wordt tussendoor gewoonlijk met een grotere bitbreedte gerekend. Bij optellen blijft het aantal fractiebits gelijk, maar bij vermenigvuldigen worden ze opgeteld.

  1. Welke combinatie van aantallen bits voor teken, exponent en mantisse geldt voor een IEEE 754-getal met enkele precisie (32 bit)?
  2. Wat is de belangrijkste reden dat bfloat16 wordt gebruikt bij het trainen van AI?
  3. Wat is het belangrijkste voordeel van het omzetten (kwantiseren) van gewichten van FP32 naar INT8 bij AI-inferentie?

Oefenvragen over Computerarithmetiek

Belangrijke termen uitgelegd

Vaste komma (fixed-point)
Methode waarbij de positie van de komma vooraf is vastgelegd en breuken met dezelfde bitreeksen als gehele getallen worden weergegeven. Berekening met gehele-getalcircuits, klein circuit en laag vermogen, maar beperkt bereik. Soms uitgedrukt met het aantal fractiebits, zoals Q15.
IEEE 754
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.
Verzadigingsrekenkunde (saturating arithmetic)
Rekenkunde waarbij, als het resultaat buiten het representeerbare bereik valt, de waarde bij het maximum of minimum blijft in plaats van met overflow naar de andere kant om te slaan. Gebruikt in audio- en beeldsignaalverwerking om grote fouten te voorkomen.
bfloat16
16-bits drijvendekommaformaat met 1 tekenbit, 8 exponentbits en 7 mantissebits. Omdat de exponent gelijk is aan die van FP32, is het bereik groot; de precisie is laag, maar het wordt gebruikt voor AI-training. FP16 heeft 5 exponentbits en 10 mantissebits: hogere precisie maar smaller bereik.
INT8
Geheel getal van 8 bits met teken (−128 tot 127). Bij AI-inferentie leiden het omzetten (kwantiseren) van gewichten en activaties naar INT8 met een schaalfactor tot sterk lagere reken- en geheugenlast, en kleine gehele-getalschakelingen kunnen het snel verwerken.

Verwante vergelijkingen