1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Ara anem a volar la teva ment. 3 00:00:01,750 --> 00:00:06,500 Resulta que en el món real 1 dividit per 10 és de fet un dècim, o 0.1. 4 00:00:06,500 --> 00:00:10,370 Però en els equips que només tenen un nombre finit nombre de bits amb el qual 5 00:00:10,370 --> 00:00:14,290 representar els números, no sempre es pot representar nombres com 1/10 amb 6 00:00:14,290 --> 00:00:15,500 precisió perfecta. 7 00:00:15,500 --> 00:00:18,640 En altres paraules, els ordinadors de vegades tenen per fer trucades de judici i no 8 00:00:18,640 --> 00:00:22,740 necessàriament representen el nombre al qual vull la manera més precisa que tenia planejat. 9 00:00:22,740 --> 00:00:27,020 >> Per exemple, suposem que jo torni a aquest programa i canviar el 0,1 i, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, el que indica que M'agradaria a printf printf per 11 00:00:32,073 --> 00:00:34,350 28 llocs de la precisió. 12 00:00:34,350 --> 00:00:39,330 Ara anem a guardar i compilar el programa, aquesta vegada amb maquillatge floats2. 13 00:00:39,330 --> 00:00:41,910 Executar amb floats2 slash dot. 14 00:00:41,910 --> 00:00:49,980 I, per Déu, aquesta vegada no veig 0.1, però 0.10000000, que és bastant 15 00:00:49,980 --> 00:00:51,070 bo fins ara. 16 00:00:51,070 --> 00:00:57,830 Però llavors, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Bé, què està passant? 18 00:00:58,880 --> 00:01:02,280 Bé, resulta que és un flotador normalment emmagatzemat a l'interior d'un ordinador 19 00:01:02,280 --> 00:01:03,500 amb 32 bits. 20 00:01:03,500 --> 00:01:07,340 32 és, òbviament, un nombre finit, que implica que només es pot representar 21 00:01:07,340 --> 00:01:11,050 amb 32 bits d'un nombre finit de valors de punt flotant. 22 00:01:11,050 --> 00:01:14,980 Per desgràcia, això significa que el ordinador no pot representar tots els possibles 23 00:01:14,980 --> 00:01:18,110 Els nombres de punt flotant, o els nombres reals, que hi ha al món, 24 00:01:18,110 --> 00:01:19,980 ja que només té tants bits. 25 00:01:19,980 --> 00:01:23,940 >> I així, el que l'ordinador és pel que sembla fet en aquest cas es representa 1/10 a 26 00:01:23,940 --> 00:01:26,880 el més proper possible flotant valor en punts que es pot. 27 00:01:26,880 --> 00:01:31,050 Però si mirem, com ho hem fet aquí, a 28 decimals, vam començar a veure que 28 00:01:31,050 --> 00:01:31,970 imprecisió. 29 00:01:31,970 --> 00:01:34,480 Així que aquest és un problema amb hi ha una solució perfecta. 30 00:01:34,480 --> 00:01:38,060 Podem utilitzar una doble en comptes d'una carrossa, que tendeix a utilitzar 64 bits de com 31 00:01:38,060 --> 00:01:39,410 davant 32. 32 00:01:39,410 --> 00:01:42,290 Però, és clar, 64 també és finit, de manera que el problema es 33 00:01:42,290 --> 00:01:43,630 segueixin presentant fins i tot amb dobles. 34 00:01:43,630 --> 00:01:46,323