DAVID MALAN: Katsotaanpa nyt puhaltaa mieltäsi. On käynyt ilmi, todellisessa maailmassa 1 jaettuna 10 on todellakin kymmenesosa, tai 0.1. Mutta tietokoneissa, joissa on vain äärellinen bittien lukumäärä, jolla voidaan edustavat numerot, et voi aina edustavat numerot kuin 1/10 kanssa täysin tarkasti. Toisin sanoen tietokoneet joskus tehdä tuomion täytäntöönpano edellyttää eikä välttämättä edusta numero haluta niin tarkasti kuin aiot. Oletetaan esimerkiksi, että menen takaisin Tämän ohjelman ja muuttaa 0,1, oh, 0,28, mikä osoittaa, että Haluaisin printf että printf kohteeseen 28 paikkoja tarkkuus. Katsotaanpa nyt tallentaa ja kääntää ohjelman, tällä kertaa tehdä floats2. Ajaa se piste slash floats2. Ja rakas Jumala, tällä kertaa en näe 0,1, mutta 0.10000000, mikä on melko hyvä tähän mennessä. Mutta sitten, 14901161193847656250. No, mitä on tekeillä? No, käy ilmi, että float on tyypillisesti tallennettu tietokoneen 32 bitin. 32 on ilmeisesti äärellinen määrä, joka tarkoittaa, että voit vain edustaa 32 bitin rajallinen määrä liukulukuoperaatioiden arvoja. Valitettavasti tämä tarkoittaa, että tietokone ei voi edustaa kaikkia mahdollisia liukuluvut tai reaalilukuja, että olemassa maailmassa, koska se on vain niin monta bittiä. Ja niin mitä tietokoneen ilmeisesti tehty tässä tapauksessa on edustaa 1/10 ja lähin mahdollinen kellunta pisteen arvo, että se voi. Mutta jos katsomme, koska meillä on täällä, 28 desimaalin tarkkuudella, alamme nähdä, että epätäsmällisyys. Joten tämä on ongelma Ei täydellinen ratkaisu. Voimme käyttää kaksinkertaista sijaan float, jolla on taipumus käyttää 64 bittiä, kuten vastustaa 32. Mutta tietenkin, 64 on myös rajallinen, joten ongelma säilyvät jopa kaksinkertaistuu.