Reelle tal i binære tal skal lagres på en særlig måde i en computer. Computere repræsenterer tal som binære hele tal (hele tal, der er potenser af to), så der er ingen direkte måde for dem at repræsentere ikke-integrale tal som decimaltal på, da der ikke er noget radixpunkt. En måde, hvorpå computere kan omgå dette problem, er ved at repræsentere flydende punkt, hvor "flydende" henviser til, at radixpunktet kan flyttes højere eller lavere, når det ganges med en eksponent (potens).
Grundidé
Flydende komma (floating point) repræsenterer et reelt tal ved tre dele:
- tegn (sign) — om tallet er positivt eller negativt;
- signifikand (også kaldet mantissa eller fraction) — de væsentlige cifre i tallet;
- eksponent — styrer hvor radixpunktet ligger ved at gange med en potens af to.
Matematisk kan værdien beskrives som: værdi = (-1)tegn × (1.signifikand) × 2^(eksponent − bias) for normaliserede tal. Bias er et fast tal, som bruges til at gemme både positive og negative eksponenter i et felt med kun positive bitmønstre.
IEEE 754 — den mest udbredte standard
De fleste moderne sprog og platforme følger IEEE 754-standarden for flydende punkt. De to mest almindelige formater er:
- single precision (32 bit): 1 bit tegn, 8 bit eksponent, 23 bit signifikand. Bias = 127.
- double precision (64 bit): 1 bit tegn, 11 bit eksponent, 52 bit signifikand. Bias = 1023.
I normaliserede tal antages der en implicit førende 1 foran signifikanden (deraf 1.signifikand i formlen). Når eksponentfeltet er alle nuller, kan tal være denormaliserede (subnormale), hvilket giver gradvis underflow tæt på nul.
Særlige værdier
- Eksponentfeltet med alle 1'ere bruges til ∞ (uendelig) og NaN (Not a Number) — fx som resultat af 1/0 eller 0/0.
- Positiv og negativ nul findes begge som gyldige repræsentationer (forskellen er normalt kun relevant i visse matematiske situationer).
- Denormaliserede tal gør det muligt at repræsentere tal tættere på nul end normaliserede formater kan og giver «gradvis underflow».
Begrænsninger og fejlkilder
- Præcision: Et flydende tal har kun et begrænset antal signifikante bits. Mange decimaltal (fx 0,1) kan ikke repræsenteres nøjagtigt i binært format, hvilket giver små afrundingsfejl.
- Rundingsmetoder: Standard er normalt «round to nearest, ties to even», men andre metoder findes.
- Associativitet brydes: (a + b) + c kan give et andet resultat end a + (b + c) pga. afrunding; man kan derfor ikke altid regne med sædvanlige algebraiske identiteter i numerisk kode.
- Overflow og underflow: Yderst store tal giver overflow til ±∞, meget små tal kan miste præcision eller blive nul.
Praktiske råd
- Brug passende præcision: double fremfor float når du har brug for mere nøjagtighed.
- Undgå direkte sammenligning af flydende tal — brug et lille epsilon til at teste lighed.
- For finansielle beregninger hvor decimaleksakthed er vigtig, overvej decimal-typer eller faste punkt (fixed-point) i stedet for binære floating-point.
- Sortér additioner fra mindste til største for at reducere tab af præcision ved sum af mange tal.
Eksempel
Et simpelt eksempel: 6,5 i binært er 110,1. Som flydende punkt kan man skrive 6,5 = 1.101 × 2^2. I et enkelt præcisionsformat bliver tegn=0, eksponent=2+bias (127) = 129, og signifikand gemmer de binære cifre efter komma: 101000... osv.
Samlet set gør flydende punkt det muligt at repræsentere meget store og meget små reelle tal effektivt på computere, men man må være opmærksom på begrænsninger i præcision, særlige værdier og afrundingsadfærd for at undgå numeriske fejl i programmer.