1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Laten we nu Blow Your Mind. 3 00:00:01,750 --> 00:00:06,500 Het blijkt in de praktijk 1 gedeeld 10 inderdaad 1/10 of 0,1. 4 00:00:06,500 --> 00:00:10,370 Maar computers die slechts een eindige aantal bits waarmee 5 00:00:10,370 --> 00:00:14,290 getallen, dat kan niet altijd nummers als 1/10 te vertegenwoordigen met 6 00:00:14,290 --> 00:00:15,500 perfecte precisie. 7 00:00:15,500 --> 00:00:18,640 Met andere woorden, computers soms uitspraak te bellen en niet te maken 8 00:00:18,640 --> 00:00:22,740 noodzakelijkerwijs het nummer dat u willen zo precies u van plan bent. 9 00:00:22,740 --> 00:00:27,020 >> Bijvoorbeeld, stel dat ik terug in dit programma en verander de 0,1 tot, 10 00:00:27,020 --> 00:00:32,073 oh, 0.28, waardoor wordt aangegeven dat Ik wil graag printf printf aan 11 00:00:32,073 --> 00:00:34,350 28 plaatsen van precisie. 12 00:00:34,350 --> 00:00:39,330 Laten we nu slaan en het programma te compileren, dit keer met make floats2. 13 00:00:39,330 --> 00:00:41,910 Voer het uit met stip slash floats2. 14 00:00:41,910 --> 00:00:49,980 En, lieve God, deze keer zie ik niet 0,1, maar 0.10000000, dat is vrij 15 00:00:49,980 --> 00:00:51,070 goed tot nu toe. 16 00:00:51,070 --> 00:00:57,830 Maar dan, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Nou, wat is er gaande? 18 00:00:58,880 --> 00:01:02,280 Nou, het blijkt dat een float is typisch opgeslagen in een computer 19 00:01:02,280 --> 00:01:03,500 met 32 ​​bits. 20 00:01:03,500 --> 00:01:07,340 32 is uiteraard een eindig aantal dat houdt in dat u alleen kan vertegenwoordigen 21 00:01:07,340 --> 00:01:11,050 met 32 ​​bits een eindig aantal van floating point waarden. 22 00:01:11,050 --> 00:01:14,980 Helaas, dat betekent dat de computer kan niet alle mogelijke vormen 23 00:01:14,980 --> 00:01:18,110 floating point getallen of reële getallen, die bestaan ​​in de wereld, 24 00:01:18,110 --> 00:01:19,980 omdat het slechts zoveel bits. 25 00:01:19,980 --> 00:01:23,940 >> En dus wat de computer is blijkbaar gedaan wordt in dit geval vertegenwoordigen 1/10 tot 26 00:01:23,940 --> 00:01:26,880 zo nauw mogelijke drijvende punt waarde dat het kan. 27 00:01:26,880 --> 00:01:31,050 Maar als we, zoals we hier hebben, tot en met 28 decimalen, beginnen we te zien dat 28 00:01:31,050 --> 00:01:31,970 onnauwkeurigheid. 29 00:01:31,970 --> 00:01:34,480 Dit is dus een probleem geen perfecte oplossing. 30 00:01:34,480 --> 00:01:38,060 We kunnen een dubbel in plaats van een float, die de neiging heeft 64 bits gebruiken 31 00:01:38,060 --> 00:01:39,410 tegen 32. 32 00:01:39,410 --> 00:01:42,290 Maar natuurlijk, 64 is ook eindig, dus het probleem zal 33 00:01:42,290 --> 00:01:43,630 blijven zelfs met tweepersoonskamers. 34 00:01:43,630 --> 00:01:46,323