1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Idemo sad vas oduševiti. 3 00:00:01,750 --> 00:00:06,500 Ispada u stvarnom svijetu 1 podijeljene po 10 je zapravo 1/10, odnosno 0.1. 4 00:00:06,500 --> 00:00:10,370 No, u računala koja imaju samo konačna Broj bitova s ​​kojom 5 00:00:10,370 --> 00:00:14,290 predstavljaju brojeve, ne možeš uvijek predstavljaju brojeve poput 1/10 s 6 00:00:14,290 --> 00:00:15,500 savršena preciznost. 7 00:00:15,500 --> 00:00:18,640 Drugim riječima, računala ponekad da prosudbe pozive i ne 8 00:00:18,640 --> 00:00:22,740 nužno predstavljaju broj vas želim što preciznije namjeravate. 9 00:00:22,740 --> 00:00:27,020 >> Na primjer, recimo da sam se vratiti u ovaj program i promijeniti 0,1 do, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, čime se pokazuje da Volio bih da se printf printf se 11 00:00:32,073 --> 00:00:34,350 28 mjesta preciznosti. 12 00:00:34,350 --> 00:00:39,330 Idemo sada spasiti i sastaviti program, ovaj put s make floats2. 13 00:00:39,330 --> 00:00:41,910 Pokrenite ga s dot slash floats2. 14 00:00:41,910 --> 00:00:49,980 I, dragi Bože, ovaj put vidim ne 0,1, ali 0.10000000, što je prilično 15 00:00:49,980 --> 00:00:51,070 dobro do sada. 16 00:00:51,070 --> 00:00:57,830 Ali onda, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Pa, što se događa? 18 00:00:58,880 --> 00:01:02,280 Pa, ispada da je plovak obično pohranjeni unutar računala 19 00:01:02,280 --> 00:01:03,500 s 32 bita. 20 00:01:03,500 --> 00:01:07,340 32 je očito konačan broj, koji podrazumijeva da se samo može predstavljati 21 00:01:07,340 --> 00:01:11,050 s 32 bita konačan broj od vrijednosti s pomičnim zarezom. 22 00:01:11,050 --> 00:01:14,980 Na žalost, to znači da Računalo ne može predstavljati sve je moguće 23 00:01:14,980 --> 00:01:18,110 pomičnim zarezom brojeve ili realni brojevi, koje postoje u svijetu, 24 00:01:18,110 --> 00:01:19,980 jer ima samo toliko bitova. 25 00:01:19,980 --> 00:01:23,940 >> I tako što računalo je očito učinjeno u ovom slučaju se predstavljaju 1/10 do 26 00:01:23,940 --> 00:01:26,880 najbliži mogući Floating točka vrijednost da se može. 27 00:01:26,880 --> 00:01:31,050 Ali, ako ćemo gledati, kao što smo ovdje, na 28. decimalnih mjesta, počinjemo vidjeti da 28 00:01:31,050 --> 00:01:31,970 nepreciznost. 29 00:01:31,970 --> 00:01:34,480 Dakle, to je problem s nije idealno rješenje. 30 00:01:34,480 --> 00:01:38,060 Možemo koristiti dupli umjesto float, koji teži za korištenje 64 bita kao 31 00:01:38,060 --> 00:01:39,410 za razliku od 32 godine. 32 00:01:39,410 --> 00:01:42,290 Ali, naravno, 64 je konačan, pa će problem 33 00:01:42,290 --> 00:01:43,630 ostaju čak i sa parovima. 34 00:01:43,630 --> 00:01:46,323