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