1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Leiskite dabar smūgis jūsų protas. 3 00:00:01,750 --> 00:00:06,500 Pasirodo, realiame pasaulyje 1 padalytas iki 10 iš tiesų yra 1/10 arba 0,1. 4 00:00:06,500 --> 00:00:10,370 Bet kompiuterių, tik ribotas bitų skaičius, su kuriuo 5 00:00:10,370 --> 00:00:14,290 atstovauti numerius, jūs ne visada gali atstovauti numerius kaip 1/10 su 6 00:00:14,290 --> 00:00:15,500 puikus tikslumo. 7 00:00:15,500 --> 00:00:18,640 Kitaip tariant, kompiuteriai kartais kad sprendimo skambučius ir ne 8 00:00:18,640 --> 00:00:22,740 nebūtinai atitinka skaičius, kurį nori taip tiksliai, kaip jūs ketinate. 9 00:00:22,740 --> 00:00:27,020 >> Pavyzdžiui, tarkime, kad aš grįžti į ši programa ir pakeisti 0,1 į, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, kartu nurodant, kad Norėčiau printf į printf į 11 00:00:32,073 --> 00:00:34,350 28 vietos tikslumo. 12 00:00:34,350 --> 00:00:39,330 Leiskite dabar išsaugoti ir sudaryti programą, šį kartą su make floats2. 13 00:00:39,330 --> 00:00:41,910 Paleiskite jį dot slash floats2. 14 00:00:41,910 --> 00:00:49,980 Ir, brangus Dieve, šį kartą matau ne 0,1, bet 0.10000000, kuri yra gana 15 00:00:49,980 --> 00:00:51,070 gerai iki šiol. 16 00:00:51,070 --> 00:00:57,830 Bet tada, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Na, kas čia vyksta? 18 00:00:58,880 --> 00:01:02,280 Na, paaiškėja, kad plūdė yra paprastai saugoma viduje kompiuterio 19 00:01:02,280 --> 00:01:03,500 su 32 bitais. 20 00:01:03,500 --> 00:01:07,340 32 Akivaizdu, kad ribinis skaičius, kuris reiškia, kad jūs galite tik atstovauti 21 00:01:07,340 --> 00:01:11,050 su 32 bitų baigtinio skaičiaus slankiojo kablelio reikšmės. 22 00:01:11,050 --> 00:01:14,980 Deja, tai reiškia, kad kompiuteris negali atstovauti įmanoma 23 00:01:14,980 --> 00:01:18,110 slankiojo kablelio skaičiai, arba realieji skaičiai, kad egzistuoja pasaulyje, 24 00:01:18,110 --> 00:01:19,980 nes jis turi tik tiek daug bitai. 25 00:01:19,980 --> 00:01:23,940 >> Ir taip, ką kompiuteris matyt padaryta šiuo atveju sudaro 1/10 iki 26 00:01:23,940 --> 00:01:26,880 arčiausiai galima plaukioti punkto vertė, kad jis gali. 27 00:01:26,880 --> 00:01:31,050 Bet jei pažvelgtume, kaip mes turime čia, 28 dešimtųjų tikslumu, mes pradedame matyti, kad 28 00:01:31,050 --> 00:01:31,970 netikslumai. 29 00:01:31,970 --> 00:01:34,480 Taigi tai yra su problema ne puikus sprendimas. 30 00:01:34,480 --> 00:01:38,060 Mes galime naudoti dvigubai vietoj plūdės, kuri linkusi naudoti 64 bitų, kaip 31 00:01:38,060 --> 00:01:39,410 o ne 32. 32 00:01:39,410 --> 00:01:42,290 Bet, žinoma, 64 taip pat yra ribotas, taip problema bus 33 00:01:42,290 --> 00:01:43,630 lieka net padvigubėja. 34 00:01:43,630 --> 00:01:46,323