Liukuluku
Liukuluku on tietokoneissa käytetty esitystapa reaaliluvuille.
Liukulukuun kuuluu neljä osaa: etumerkki (formula_1), mantissa (formula_2), kantaluku (formula_3) ja eksponentti (formula_4). Etumerkki kertoo onko luku negatiivinen vai positiivinen. Mantissa kuvaa luvun merkitseviä numeroita. Kantaluku ja eksponentti määrittävät luvun suuruusluokan. Tällöin liukuluvun arvoksi formula_5 saadaan
formula_6.
Esitys ei kuitenkaan ole yksikäsitteinen lukunelikolle formula_7 ellei lukualueita rajata tarkasti. Yksikäsitteisyys voidaan saavuttaa sopimalla tietty kantaluku formula_3, ja sen jälkeen vaatimalla, että formula_9 ja formula_10. Tietokoneissa pätee yleensä formula_11, jolloin formula_12 ja formula_13.
Liukulukulaskenta voidaan toteuttaa ohjelmallisesti jos tietokoneen suoritin tukee vain kokonaislukujen laskutoimituksia, tai suoritin voi pystyä suoraan liukulukulaskentaan. Käyttäjälle tämä näkyy vain nopeuserona, ei tulosten erona. PC-yhteensopivat koneet ovat noin vuodesta 1995 saakka sisältäneet suorittimia, joissa liukulukulaskennan tekevä osa on samalla piisirulla. Tätä ennen PC-koneissa oli keskussuorittimen rinnalle ostettavissa erikseen matematiikkasuoritin.
Oletetaan kantaluvun olevan 10, mantissan kolminumeroinen ja eksponentissa olevan etumerkin ja yhden numeron.
Tällöin suurin esitettävissä oleva luku on formula_14. Alempana selitettävistä normaaleista luvuista pienin nollaa suurempi on formula_15, pienin epänormaali luku formula_16. Tarkkuus riippuu suuruusluokasta: välillä 1–10 luvut esitetään tuhannesosan tarkkuudella, välillä 10–100 sadasosan tarkkuudella ja niin edelleen.
Kullekin luvulle on kolme eri esitystapaa: esimerkiksi formula_17 voidaan esittää formula_18, formula_19 tai formula_20. Esitystavoista ensimmäinen on tarkin, ja tätä esitystapaa kutsutaan normaaliksi; siis normaalin luvun mantissa on aina vähintään formula_21 ja enintään formula_22.
Normaalit luvut muodostavat näin nollaa kohti tihentyvän parven, jossa kuitenkin nollan ympärillä on aukko: Pienin positiivinen luku on tuhat kertaa suurempi kuin sen erotus toiseksi pienimpään positiiviseen lukuun. Epänormaalit luvut täyttävät tämän aukon: tarkkuus pienenee, mutta laskenta ei "romahda" äkillisesti nollaan.
IEEE 754 on yleisin tietokoneissa käytetty liukulukustandardi. Se olettaa kantaluvuksi formula_11. Etumerkki ilmoitetaan yhdellä bitillä. formula_24 tarkoittaa positiivista lukua, ja formula_25 tarkoittaa negatiivista. Mantissa ja eksponentti ovat etumerkittömiä bittijonoja. Standardi määrittelee neljä erilaista liukulukua:
Kun formula_34, luku on normalisoitu. Tällöin
yksikäsitteisyys saavutetaan sopimalla formula_35 ja formula_36. Tällöin liukuluvun arvoksi formula_5 saadaan
formula_38.
Lukua nolla ei voi esittää suoraan johtuen formula_39 määritelmästä, koska ylin bitti säädetään kiinteästi ykköseksi. Standardin mukaan luku on nolla kun formula_40. Tämän seurauksena luvun nolla esitys tietokoneen muistissa on kaikki bitit nollina, mikä nopeuttaa liukulukumuuttujien alustamista eräissä tietokonejärjestelmissä.
Normalisoidussa muodossa mantissan ensimmäinen luku on aika 1, joten se jätetään pois ja siten saadaan käyttöön yksi numero enemmän tarkkuutta. Täten formula_41
Koska yksi eksponentin arvo on varattu nollalle, ei eksponentteja voi esittää suoraan, vaan eksponentti on IEEE-liukuluvuissa tallennettu muodossa jota kutsutaan nimillä "offset binary" tai "biased exponent". Tämä formula_42, missä formula_43 riippuu käytetystä tarkkuudesta. Perustarkkuudelle formula_44 ja kaksoistarkkuudella formula_45. Eksponentti voi täten esittää suuremman määrän positiivisia arvoja kuin negatiivisia arvoja.
Kun formula_46 ja formula_47, luku ei ole normalisoitu. Tällöin formula_48 ja formula_49, missä formula_43 riippuu käytetystä tarkkuudesta. Perustarkkuudelle formula_51 ja kaksoistarkkuudella formula_52.
IEEE-745 määrittelee myös positiivisen ja negatiivisen äärettömän. Käsitteellisesti ne eivät vastaa niinkään matemaattista äärettömyyttä vaan mitä tahansa lukua, joka ylittää tai alittaa esitettävissä olevien lukujen alueen. Äärettömilläkin voidaan osittain laskea, esimerkiksi mikä tahansa positiivinen normaali luku jaettuna positiivisella äärettömällä antaa tulokseksi positiivisen nollan.
Analogisesti äärettömien kanssa nollia on kaksi, positiivinen ja negatiivinen. Ne kuvaavat paitsi matemaattisen tarkkaa nollaa, myös lukuja joiden suuruus alittaa ei-normalisoitujen lukujenkin esitettävissä olevat arvot.
Lopuksi standardi määrittelee tuloksen laskutoimitukselle, jolle ei ole mielekästä vastausta edes äärettömien tai nollien avulla esitettynä. Esimerkiksi positiivisen ja negatiivisen äärettömän summa on tällainen: taustalla on ajatus, jonka mukaan emme tiedä kumpi ääretön on suurempi, joten mikään vastaus ei kelpaa. Jokaisen luvun jokainen laskutoimitus epäluvun kanssa tuottaa epäluvun: esimerkiksi epäluku kertaa nolla "ei" ole nolla vaan epäluku.
Epälukujen ja osittain myös äärettömien ja nollien avulla pitkä laskenta voidaan tehdä loppuun ja vasta lopuksi tutkia miltä osin saatiin mielekkäitä tuloksia ja milloin esimerkiksi jokin laskukaava ei toiminut.
Seuraavassa "S" kuvaa suurta lukua, joka on lähes lukualueen ylärajalla, luku 3 on esimerkki tavallisesta luvusta, äärettömät on merkitty +inf ja −inf, nollat +0 ja −0, ja epäluku on NaN.Luvun formula_53 esitys perustarkkuudella tarkoittaa lukua, jossa formula_54 ja formula_55, eli heksadesimaalijonona: 3f80 0000. Sama luku kaksoistarkkuudella saa esitysmuodon: 3ff0 0000 0000 0000. Luvun formula_56 esitysmuoto perus- ja kaksoistarkkuudella on bf80 0000 ja bff0 0000 0000 0000.
Kuten murtoluvut voidaan esittää päättyvinä kymmenkantaisina desimaalilukuina vain jos nimittäjä on kymmenen potenssi, voidaan luku esittää tarkasti liukulukuna vain, jos vastaavan murtolukuesityksen nimittäjä on kahden potenssi.
Siten esimerkiksi desimaalilukua 0,1 ei voi esittää tarkasti liukulukuna.
Esimerkiksi JavaScriptin vertailu codice_1 on epätosi, koska sitä evaluoitaessa luvut on pyöristetty kolme kertaa ja summalausekkeen tulos on eri kuin luvun 0,3 muunnos liukuluvuksi.
JavaScriptissa, jossa kaikki luvut tallennetaan kaksoistarkkuuden 64-bittisinä IEEE-liukulukuina, suurin turvallisesti esitettävä kokonaisluku on 9007199254740992 (Number.MAX_SAFE_INTEGER+1). Esimerkiksi vertailu codice_2 palauttaa toden, vaikka on matemaattisesti epätosi.