1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Poďme teraz fúkať vašu myseľ. 3 00:00:01,750 --> 00:00:06,500 Ukazuje sa, že v reálnom svete 1 rozdeleného od 10 je skutočne 1/10, alebo 0.1. 4 00:00:06,500 --> 00:00:10,370 Ale v počítačoch, ktoré majú obmedzené iba počet bitov, s ktorým 5 00:00:10,370 --> 00:00:14,290 predstavujú čísla, môžete vždy predstavujú čísla ako 1/10 s 6 00:00:14,290 --> 00:00:15,500 perfektné presnosť. 7 00:00:15,500 --> 00:00:18,640 Inými slovami, počítače niekedy aby úsudok volanie a nie 8 00:00:18,640 --> 00:00:22,740 nutne predstavovať číslo, ktoré Ak tak presne, ako máte v úmysle. 9 00:00:22,740 --> 00:00:27,020 >> Predpokladajme napríklad, že som sa vrátiť do tento program a zmeňte 0,1 k, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, čo naznačuje, že Rád by som printf printf na 11 00:00:32,073 --> 00:00:34,350 28 miest presnosti. 12 00:00:34,350 --> 00:00:39,330 Poďme teraz uložiť a skompilovať program, tentoraz s make floats2. 13 00:00:39,330 --> 00:00:41,910 Spustite ho s dot lomítka floats2. 14 00:00:41,910 --> 00:00:49,980 A bože, to keď vidím to 0,1, ale 0.10000000, čo je celkom 15 00:00:49,980 --> 00:00:51,070 dobrý tak ďaleko. 16 00:00:51,070 --> 00:00:57,830 Ale potom, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> No, čo sa deje? 18 00:00:58,880 --> 00:01:02,280 No, ukázalo sa, že plavák je obvykle uložené vo vnútri počítača 19 00:01:02,280 --> 00:01:03,500 s 32 bitmi. 20 00:01:03,500 --> 00:01:07,340 32 je zrejme konečné číslo, ktoré znamená, že môžete predstavovať iba 21 00:01:07,340 --> 00:01:11,050 s 32 bity konečným počtom plávajúce čiarkou. 22 00:01:11,050 --> 00:01:14,980 Bohužiaľ, to znamená, že Počítač nemôže reprezentovať všetky možné 23 00:01:14,980 --> 00:01:18,110 čísla s plávajúcou desatinnou čiarkou, alebo reálne čísla, ktoré existujú vo svete, 24 00:01:18,110 --> 00:01:19,980 , Pretože to má len toľko bitov. 25 00:01:19,980 --> 00:01:23,940 >> A tak to, čo počítač je zrejme vykonáva v tomto prípade predstavovať 1/10 až 26 00:01:23,940 --> 00:01:26,880 najbližší možný plávajúce Bodová hodnota, že môže. 27 00:01:26,880 --> 00:01:31,050 Ale keď sa pozrieme, ako sme tu, na 28. desatinné miesta, začneme vidieť, že 28 00:01:31,050 --> 00:01:31,970 nepresnosť. 29 00:01:31,970 --> 00:01:34,480 Takže sa jedná o problém s žiadne dokonalé riešenie. 30 00:01:34,480 --> 00:01:38,060 Môžeme použiť double miesto float, ktorý inklinuje k použitiu 64 bitov ako 31 00:01:38,060 --> 00:01:39,410 na rozdiel od 32. 32 00:01:39,410 --> 00:01:42,290 Ale samozrejme, 64 je tiež konečný, takže problém bude 33 00:01:42,290 --> 00:01:43,630 zostávajú aj pri štvorhre. 34 00:01:43,630 --> 00:01:46,323