Articles

Liukulukuluvut

miksi liukulukulukuja tarvitaan

koska tietokoneen muisti on rajallinen, numeroita ei voi tallentaa äärettömän tarkasti riippumatta siitä, käytetäänkö binäärisiä murtolukuja vai desimaalilukuja: jossain vaiheessa on katkaistava. Mutta kuinka paljon tarkkuutta tarvitaan? Ja missä sitä tarvitaan? Kuinka monta kokonaisluku numeroa ja kuinka monta murto-numeroa?

  • moottoritietä rakentavalle insinöörille ei ole väliä, onko se 10 metriä vai 10.0001 metriä leveä-niiden mitat eivät luultavasti ole niin tarkkoja alun perinkään.
  • Mikrosirua suunnittelevalle 0,0001 metriä (millimetrin kymmenesosa) on valtava ero – mutta hänen ei tarvitse koskaan käsitellä 0,1 metriä suurempaa matkaa.
  • fyysikon on käytettävä samassa laskennassa valonnopeutta (noin 300000000) ja Newtonin gravitaatiovakiota (noin 0,00000000667) yhdessä.

tyydyttääkseen insinöörin ja sirusuunnittelijan, lukumuodon on tarjottava tarkkuutta luvuille hyvin eri magnitudeilla. Tarvitaan kuitenkin vain suhteellista tarkkuutta. Fyysikon tyydyttämiseksi täytyy olla mahdollista tehdä laskelmia, joissa on mukana eri suuruisia lukuja.

periaatteessa kokonaisluku – ja murtolukujen kiinteän määrän omaaminen ei ole hyödyllistä-ja ratkaisu on formaatti, jossa on liukuluku.

miten liukulukuluvut toimivat

ideana on muodostaa kahden pääosan joukko:

  • merkitysosa, joka sisältää luvun numerot. Negatiiviset signifikaatiot edustavat negatiivisia lukuja.
  • eksponentti, joka kertoo, mihin desimaalipiste (tai binääripiste) on sijoitettu suhteessa signifikaation alkuun. Negatiiviset eksponentit edustavat lukuja, jotka ovat hyvin pieniä (eli lähellä nollaa).

tällainen formaatti täyttää kaikki vaatimukset:

  • se voi esittää lukuja hurjasti eri magnitudeilla (rajoitettu eksponentin pituudella)
  • se tarjoaa saman suhteellisen tarkkuuden kaikilla magnitudeilla (rajoitettu merkityspituudella)
  • se mahdollistaa laskutoimitukset eri magnitudeilla: kertomalla hyvin suuri ja hyvin pieni luku säilyttää molempien tarkkuuden tuloksessa.

Desimaaliset liukulukuluvut ovat yleensä tieteellisen notaation muodossa siten, että eksklisiittinen piste on aina 1.ja 2. numeron välissä. Eksponentti on joko kirjoitettu eksplisiittisesti mukaan lukien pohja, tai e käytetään erottamaan se significand.

standardi

lähes kaikki laitteisto-ja ohjelmointikielet käyttävät liukulukuja samoissa binäärimuodoissa, jotka on määritelty IEEE 754-standardissa. Tavalliset formaatit ovat kokonaispituudeltaan 32 tai 64 bittiä:

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

huomaa, että on olemassa joitakin erikoisuuksia:

  • varsinainen bittisarja on merkkibitti ensin, sen jälkeen eksponentti ja lopuksi merkitysbitit.
  • eksponentilla ei ole merkkiä, vaan siitä vähennetään eksponenttiharha (127 yksittäiselle ja 1023 kaksinkertaiselle tarkkuudella). Tämän ja bittijakson avulla liukulukuja voidaan vertailla ja lajitella oikein myös tulkittaessa niitä kokonaislukuina.
  • merkitysnumero jätetään pois ja oletetaan olevan 1, lukuun ottamatta subnormaaleja lukuja, joita merkitään all-0-eksponentilla ja jotka mahdollistavat lukualueen, joka ylittää yllä olevassa taulukossa annetut pienimmät luvut, tarkkuuden kustannuksella.
  • on erilliset positiiviset ja negatiiviset nolla-arvot, jotka eroavat merkkibitistä, jossa kaikki muut bitit ovat 0. Näitä on pidettävä samanarvoisina, vaikka niiden bittikuviot ovat erilaisia.
  • on olemassa erityisiä positiivisia ja negatiivisia äärettömyysarvoja, joissa eksponentti on kaikki 1-bitit ja signifikaatio on kaikki 0-bitit. Nämä ovat tuloksia laskelmista, joissa eksponentin positiivinen vaihteluväli ylittyy eli säännöllisen luvun Jako nollalla.
  • on olemassa erityisiä ei-luvun (tai NaN) arvoja, joissa eksponentti on kaikki 1-bitit ja signifikaatio ei ole kaikki 0-bitit. Nämä ovat tulosta erilaisista määrittelemättömistä laskelmista (kuten kertomalla 0 ja äärettömyys, kaikki laskelmat, joissa on NaN-arvo, tai sovelluskohtaiset tapaukset). Edes bitti-identtisiä NaN-arvoja ei saa pitää tasa-arvoisina.

Jos tämä vaikuttaa liian abstraktilta ja haluat nähdä, miltä tietyt arvot näyttävät IEE 754: ssä, kokeile Float-lelua tai IEEE 754: n visualisointia tai Float Exposed.