Virhe johtuu tosiaan lukujärjestelmien erosta. Digitaalitekniikalla on helpointa käyttää laskennassa sisäisesti binäärilukujärjestelmää (kantaluku 2) kun taas suurin osa ihmisistä on tottunut desimaalilukujärjestelmän käyttöön (kantaluku 10). Kokonaisluvuilla eroja ei vielä pääse syntymään. Esimerkiksi 42 eli 4*10¹ + 2*10⁰ = 40 + 2 on binäärilukuna 101010 eli 1*2⁵ + 1*2³ + 1*2¹ = 32 + 8 + 2
Kun siirrytään desimaalipilkun toiselle puolelle niin eroja voi huomata jo kohtalaisen yksinkertaisilla luvuilla. Binäärijärjestelmässä pilkun jälkeiset osat jatkuvat vastaavasti negatiivisina kantaluvun potensseina kuten kymmenjärjestelmässäkin. 10⁻¹ = 0,1, 10⁻² = 0,01, 10⁻³ = 0,001 ja vastaavasti 2⁻¹ = 0,5, 2⁻² = 0,25, 2⁻³ = 0,125. Kymmenjärjestelmässä joidenkin murtolukujen desimaaliesitys on päättymätön luku. Esimkerksi 1/11 = 0,909090909... Binäärijärjestelmässä jo usein käytetty desimaaliluku 0,1 on päättymätön 0,000110011001100110011... Näissä molemmissa tilanteissa luku on käytännöllisistä syistä katkaistava johonkin kohtaan, jolloin loppu jää virheeksi. Esimerkiksi jos binääriluku katkaistaan niin että 2⁻¹⁵ on pienin jäljelle jäävä bitti niin desimaalilukuna tulos on 0.0999755859375 ja virhe näkyy jo heti ensimmäisessä desimaalissa (pyöristämällä oikein olisi päästy vähän lähemmäs).
Katkaisusta johtuva epätarkkuus ei koske vain päättymättömiä esityksiä vaan suurimpaan osaan laskujen tuloksista tulee jonkinlaista numeerista virhettä.
Tietokoneissa käytetään yleisesti
IEEE 754 standardia desimaaliosan sisältävien lukujen esitykseen. Python taitaa käyttää standardin binary64 formaattia, joka tunnetaan myös float64 tai double nimillä. Tuo standardi määrittää kuinka monta merkitsevää bittiä lukuun tulee mukaan (53) ja millä skaalalla ensimmäisen merkitsevän bitin eksponentti voi olla (-1022 ... 1023). Koska tuo exponentti eli "pilkun paikka" voi tuossa standardissa liikkua joustavasti niin puhutaankin liukuluvuista. Standaridssa on myös vähemmän tarkkoja formaatteja kuten binary32 ja binary16. Usein jos alempi tarkkuus on omaan käyttöön riittävä voidaan sitä käyttämällä päästä suurempiin laskentanopeuksiin. Esimerkiksi yhden binary64 laskennan aikana voidaan usein tehdä kaksi binary32 laskentaa.
Sama standardi määrittää myös desimaalilukuihin perustuvia formaatteja kuten decimal64. Näillä laskenta ei ole tietokoneella yhtä nopeaa kuin binääri formaateilla, mutta niille on omat käyttökohteensa niin kuin
@Zigh mainitsikin.