1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Pojďme nyní foukat vaši mysl. 3 00:00:01,750 --> 00:00:06,500 Ukazuje se, že v reálném světě 1 rozděleného od 10 je skutečně 1/10, nebo 0.1. 4 00:00:06,500 --> 00:00:10,370 Ale v počítačích, které mají omezené pouze počet bitů, se kterým 5 00:00:10,370 --> 00:00:14,290 představují čísla, můžete vždy představují čísla jako 1/10 s 6 00:00:14,290 --> 00:00:15,500 perfektní přesnost. 7 00:00:15,500 --> 00:00:18,640 Jinými slovy, počítače někdy aby úsudek volání a ne 8 00:00:18,640 --> 00:00:22,740 nutně představovat číslo, které Chcete-tak přesně, jak máte v úmyslu. 9 00:00:22,740 --> 00:00:27,020 >> Předpokládejme například, že jsem se vrátit do tento program a změňte 0,1 k, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, což naznačuje, že Rád bych printf printf na 11 00:00:32,073 --> 00:00:34,350 28 míst přesnosti. 12 00:00:34,350 --> 00:00:39,330 Pojďme nyní uložit a zkompilovat program, tentokrát s make floats2. 13 00:00:39,330 --> 00:00:41,910 Spusťte ho s dot lomítka floats2. 14 00:00:41,910 --> 00:00:49,980 A bože, to když vidím to 0,1, ale 0.10000000, což je docela 15 00:00:49,980 --> 00:00:51,070 dobrý tak daleko. 16 00:00:51,070 --> 00:00:57,830 Ale pak, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> No, co se děje? 18 00:00:58,880 --> 00:01:02,280 No, ukázalo se, že plovák je obvykle uloženy uvnitř počítače 19 00:01:02,280 --> 00:01:03,500 s 32 bity. 20 00:01:03,500 --> 00:01:07,340 32 je zřejmě konečné číslo, které znamená, že můžete představovat pouze 21 00:01:07,340 --> 00:01:11,050 s 32 bity konečným počtem plovoucí čárkou. 22 00:01:11,050 --> 00:01:14,980 Bohužel, to znamená, že Počítač nemůže reprezentovat všechny možné 23 00:01:14,980 --> 00:01:18,110 čísla s plovoucí desetinnou čárkou, nebo reálná čísla, které existují ve světě, 24 00:01:18,110 --> 00:01:19,980 , protože to má jen tolik bitů. 25 00:01:19,980 --> 00:01:23,940 >> A tak to, co počítač je zřejmě provádí v tomto případě představovat 1/10 až 26 00:01:23,940 --> 00:01:26,880 nejbližší možný plovoucí Bodová hodnota, že může. 27 00:01:26,880 --> 00:01:31,050 Ale když se podíváme, jak jsme tady, na 28. desetinná místa, začneme vidět, že 28 00:01:31,050 --> 00:01:31,970 nepřesnost. 29 00:01:31,970 --> 00:01:34,480 Takže se jedná o problém s žádné dokonalé řešení. 30 00:01:34,480 --> 00:01:38,060 Můžeme použít double místo float, který inklinuje k použití 64 bitů jako 31 00:01:38,060 --> 00:01:39,410 na rozdíl od 32. 32 00:01:39,410 --> 00:01:42,290 Ale samozřejmě, 64 je také konečný, takže problém bude 33 00:01:42,290 --> 00:01:43,630 zůstávají i při čtyřhře. 34 00:01:43,630 --> 00:01:46,323