Articles

flyttalsnummer

varför flyttalsnummer behövs

eftersom datorminnet är begränsat kan du inte lagra nummer med oändlig precision, oavsett om du använder binära fraktioner eller decimaler: vid någon tidpunkt måste du klippa av. Men hur mycket noggrannhet behövs? Och var behövs det? Hur många heltalssiffror och hur många fraktionssiffror?

  • till en ingenjör som bygger en motorväg spelar det ingen roll om det är 10 meter eller 10.0001 meter bred-deras mätningar är förmodligen inte så exakta i första hand.
  • till någon som utformar ett mikrochip är 0,0001 meter (en tiondel av en millimeter) en enorm skillnad – men de behöver aldrig hantera ett avstånd större än 0,1 meter.
  • en fysiker behöver använda ljusets hastighet (cirka 300000000) och Newtons gravitationskonstant (cirka 0,0000000000667) tillsammans i samma beräkning.

för att tillfredsställa ingenjören och chipdesignern måste ett talformat ge noggrannhet för siffror med mycket olika storheter. Men endast relativ noggrannhet behövs. För att tillfredsställa fysikern måste det vara möjligt att göra beräkningar som involverar siffror med olika storheter.

i grund och botten är det inte användbart att ha ett fast antal heltal och fraktionssiffror – och lösningen är ett format med en flytpunkt.

hur flyttalsnummer fungerar

tanken är att komponera ett antal två huvuddelar:

  • en betydelse som innehåller siffrans siffror. Negativa betydelser representerar negativa tal.
  • en exponent som säger var decimalpunkten (eller binärpunkten) placeras i förhållande till början av betydelsen. Negativa exponenter representerar siffror som är mycket små (dvs. nära noll).

ett sådant format uppfyller alla krav:

  • Det kan representera siffror med väldigt olika storheter (begränsad av exponentens längd)
  • Det ger samma relativa noggrannhet vid alla storheter (begränsad av signifikantens längd)
  • Det tillåter beräkningar över storheter: att multiplicera ett mycket stort och ett mycket litet antal bevarar noggrannheten hos båda i resultatet.

Decimal flytande punktnummer brukar ha formen av vetenskaplig notation med enexplicit punkt alltid mellan 1: A och 2: a siffrorna. Exponenten iseither skrivs uttryckligen inklusive basen, eller en e används toseparate det från significand.

standarden

nästan alla hårdvaru-och programmeringsspråk använder flytpunktsnummer i samma binära format, som definieras i IEEE 754-standarden. De vanliga formaten är 32 eller 64 bitar i total längd:

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

Observera att det finns några särdrag:

  • den faktiska bitsekvensen är teckenbiten först, följt av exponenten och slutligen de signifikanta bitarna.
  • exponenten har inget tecken; istället subtraheras en exponent bias från den (127 för singel och 1023 för dubbel precision). Detta och bitsekvensen gör att flyttal kan jämföras och sorteras korrekt även när de tolkas som heltal.
  • signifikantens mest signifikanta siffra utelämnas och antas vara 1, med undantag för subnormala tal som är markerade med en all-0-exponent och tillåter ett talintervall utöver de minsta siffrorna som anges i tabellen ovan, till kostnaden för precision.
  • Det finns separata positiva och negativa nollvärden, som skiljer sig åt i teckenbiten, där alla andra bitar är 0. Dessa måste betraktas som lika även om deras bitmönster är olika.
  • Det finns speciella positiva och negativa oändlighetsvärden, där exponenten är alla 1-bitar och signifikanten är alla 0-bitar. Dessa är resultaten av beräkningar där exponentens positiva intervall överskrids, eller delning av ett vanligt tal med noll.
  • Det finns speciella inte ett tal (eller NaN) värden där exponenten är alla 1-bitar och significand är inte alla 0-bitar. Dessa representerar resultatet av olika odefinierade beräkningar (som att multiplicera 0 och oändlighet, varje beräkning som involverar ett NaN-värde eller applikationsspecifika fall). Även bit-identiska nan-värden får inte betraktas som lika.

om detta verkar för abstrakt och du vill se hur vissa specifika värden ser ut i IEE 754, prova Float Toy eller IEEE 754 visualisering eller Float Exposed.