>> DAVID Malan: Leiskite dabar smūgis jūsų protas.
Pasirodo, realiame pasaulyje 1 padalytas iki 10 iš tiesų yra 1/10 arba 0,1.
Bet kompiuterių, tik ribotas bitų skaičius, su kuriuo
atstovauti numerius, jūs ne visada gali atstovauti numerius kaip 1/10 su
puikus tikslumo.
Kitaip tariant, kompiuteriai kartais kad sprendimo skambučius ir ne
nebūtinai atitinka skaičius, kurį nori taip tiksliai, kaip jūs ketinate.
>> Pavyzdžiui, tarkime, kad aš grįžti į ši programa ir pakeisti 0,1 į,
oh, 0,28, kartu nurodant, kad Norėčiau printf į printf į
28 vietos tikslumo.
Leiskite dabar išsaugoti ir sudaryti programą, šį kartą su make floats2.
Paleiskite jį dot slash floats2.
Ir, brangus Dieve, šį kartą matau ne 0,1, bet 0.10000000, kuri yra gana
gerai iki šiol.
Bet tada, 14901161193847656250.
>> Na, kas čia vyksta?
Na, paaiškėja, kad plūdė yra paprastai saugoma viduje kompiuterio
su 32 bitais.
32 Akivaizdu, kad ribinis skaičius, kuris reiškia, kad jūs galite tik atstovauti
su 32 bitų baigtinio skaičiaus slankiojo kablelio reikšmės.
Deja, tai reiškia, kad kompiuteris negali atstovauti įmanoma
slankiojo kablelio skaičiai, arba realieji skaičiai, kad egzistuoja pasaulyje,
nes jis turi tik tiek daug bitai.
>> Ir taip, ką kompiuteris matyt padaryta šiuo atveju sudaro 1/10 iki
arčiausiai galima plaukioti punkto vertė, kad jis gali.
Bet jei pažvelgtume, kaip mes turime čia, 28 dešimtųjų tikslumu, mes pradedame matyti, kad
netikslumai.
Taigi tai yra su problema ne puikus sprendimas.
Mes galime naudoti dvigubai vietoj plūdės, kuri linkusi naudoti 64 bitų, kaip
o ne 32.
Bet, žinoma, 64 taip pat yra ribotas, taip problema bus
lieka net padvigubėja.