Articles

Floating Point Numbers

hvorfor floating-point numbers er nødvendige

da computerens hukommelse er begrænset, kan du ikke gemme tal med uendelig præcision, uanset om du bruger binære fraktioner eller decimaler: på et tidspunkt skal du afskære. Men hvor meget nøjagtighed er der brug for? Og hvor er det nødvendigt? Hvor mange tal og hvor mange tal?

  • til en ingeniør, der bygger en motorvej, er det ligegyldigt, om det er 10 meter eller 10.0001 meter bred – deres målinger er sandsynligvis ikke så nøjagtige i første omgang.
  • til nogen, der designer en mikrochip, er 0,0001 meter (en tiendedel af en millimeter) en enorm forskel – men de behøver aldrig at håndtere en afstand større end 0,1 meter.
  • en fysiker skal bruge lysets hastighed (ca.300000000) og Nyton ‘ s gravitationskonstant (ca. 0.0000000000667) sammen i samme beregning.

for at tilfredsstille ingeniøren og chipdesigneren skal et talformat give nøjagtighed for tal i meget forskellige størrelser. Imidlertid er der kun behov for relativ nøjagtighed. For at tilfredsstille fysikeren skal det være muligt at foretage beregninger, der involverer tal med forskellige størrelser.

grundlæggende er det ikke nyttigt at have et fast antal heltal og fraktionerede cifre – og løsningen er et format med et flydende punkt.

hvordan flydende punktnumre fungerer

ideen er at komponere et antal af to hoveddele:

  • en signifikand, der indeholder nummerets cifre. Negative betydninger repræsenterer negative tal.
  • en eksponent, der siger, hvor decimaltegnet (eller binært) punkt er placeret i forhold til begyndelsen af signifikanden. Negative eksponenter repræsenterer tal, der er meget små (dvs.tæt på nul).

et sådant format opfylder alle kravene:

  • det kan repræsentere tal med vildt forskellige størrelser (begrænset af eksponentens længde)
  • det giver den samme relative nøjagtighed ved alle størrelser (begrænset af længden af signifikanten)
  • det tillader beregninger på tværs af størrelser: multiplikation af et meget stort og et meget lille antal bevarer nøjagtigheden af begge i resultatet.

Decimal flydende punktnumre tager normalt form af videnskabelig notation med et eksplicit punkt altid mellem 1.og 2. cifre. Eksponenten er enten skrevet eksplicit inklusive basen, eller en e bruges til at adskille den fra betydningen.

standarden

næsten alle udstyrs-og programmeringssprog bruger flydende punktnumre i de samme binære formater, som er defineret i IEEE 754-standarden. De sædvanlige formater er 32 eller 64 bit i total længde:

Format Total bits Significand bits Exponent bits Smallest number Largest number
Single precision 32 23 + 1 sign 8 ca. 1.2 ⋅ 10-38 ca. 3.4 ⋅ 1038
Double precision 64 52 + 1 sign 11 ca. 2.2 ⋅ 10-308 ca. 1.8 til 10308

Bemærk, at der er nogle særegenheder:

  • den faktiske bitsekvens er tegnet bit først, efterfulgt af eksponenten og til sidst de signifikante bits.
  • eksponenten har ikke et tegn; i stedet trækkes en eksponentforstyrrelse fra den (127 for enkelt og 1023 for dobbelt præcision). Dette og bitsekvensen gør det muligt at sammenligne og sortere tal med flydende punkter korrekt, selv når de fortolkes som heltal.
  • signifikandens mest betydningsfulde ciffer udelades og antages at være 1, bortset fra subnormale tal, der er markeret med en all-0-eksponent og tillader et talområde ud over de mindste tal, der er angivet i tabellen ovenfor, på bekostning af præcision.
  • Der er separate positive og negative nulværdier, der adskiller sig i tegnbiten, hvor alle andre bits er 0. Disse skal betragtes som lige, selvom deres bitmønstre er forskellige.
  • der er særlige positive og negative uendelighedsværdier, hvor eksponenten er alle 1-bits og signifikanten er alle 0-bits. Dette er resultaterne af beregninger, hvor eksponentens positive rækkevidde overskrides, eller opdeling af et regelmæssigt tal med nul.
  • der er særlige ikke et tal (eller NaN) værdier, hvor eksponenten er alle 1-bits og signifikanten er ikke alle 0-bits. Disse repræsenterer resultatet af forskellige udefinerede beregninger (som at multiplicere 0 og uendelighed, enhver beregning, der involverer en NaN-værdi eller applikationsspecifikke tilfælde). Selv bit-identiske NaN-værdier må ikke betragtes som lige.

Hvis dette virker for abstrakt, og du vil se, hvordan nogle specifikke værdier ser ud i IEE 754, kan du prøve Float Toy eller IEEE 754-visualiseringen eller Float eksponeret.