1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID MALAN: Nézzük most eldobod az agyad. 3 00:00:01,750 --> 00:00:06,500 Kiderült, hogy a való világban 1 osztott valóban 10 1/10, vagy 0,1. 4 00:00:06,500 --> 00:00:10,370 De a számítógépek csak véges bitek száma, amellyel 5 00:00:10,370 --> 00:00:14,290 számokat, akkor nem mindig a számoknak, mint 1/10 6 00:00:14,290 --> 00:00:15,500 tökéletes pontossággal. 7 00:00:15,500 --> 00:00:18,640 Más szóval, a számítógépek néha hogy ítéletet hívásokat, és nem 8 00:00:18,640 --> 00:00:22,740 feltétlenül tükrözik a szám szeretnénk legpontosabban kíván. 9 00:00:22,740 --> 00:00:27,020 >> Például, tegyük fel, megyek vissza a ezt a programot, és változtassa meg a 0,1, 10 00:00:27,020 --> 00:00:32,073 ó, 0,28, jelezve ezzel, hogy Szeretném printf a printf a 11 00:00:32,073 --> 00:00:34,350 28. helyen pontossággal. 12 00:00:34,350 --> 00:00:39,330 Nézzük most menteni, és összeállítja a programot, ezúttal make floats2. 13 00:00:39,330 --> 00:00:41,910 Fuss a dot slash floats2. 14 00:00:41,910 --> 00:00:49,980 És, édes Istenem, most látom nem 0,1, de 0.10000000, ami elég 15 00:00:49,980 --> 00:00:51,070 jó eddig. 16 00:00:51,070 --> 00:00:57,830 De aztán, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Nos, mi folyik itt? 18 00:00:58,880 --> 00:01:02,280 Nos, kiderült, hogy egy úszó jellemzően tárolt belsejében egy számítógépes 19 00:01:02,280 --> 00:01:03,500 32 bit. 20 00:01:03,500 --> 00:01:07,340 32. nyilvánvalóan egy véges számú, amely azt jelenti, hogy csak akkor képviseli 21 00:01:07,340 --> 00:01:11,050 32 bit véges számú A lebegőpontos értékek. 22 00:01:11,050 --> 00:01:14,980 Sajnos, ez azt jelenti, hogy a számítógép nem tud megjelenni az összes lehetséges 23 00:01:14,980 --> 00:01:18,110 lebegőpontos számok, vagy a valós számok, , hogy létezik a világon, 24 00:01:18,110 --> 00:01:19,980 mert csak annyi bit. 25 00:01:19,980 --> 00:01:23,940 >> És akkor mi a számítógép látszólag történik ebben az esetben jelentik 1/10 és 26 00:01:23,940 --> 00:01:26,880 a lehető legszorosabb úszó pont értéket tud. 27 00:01:26,880 --> 00:01:31,050 De ha megnézzük, mint mi itt, 28 tizedes, kezdjük látni, hogy 28 00:01:31,050 --> 00:01:31,970 pontatlanság. 29 00:01:31,970 --> 00:01:34,480 Tehát ez a probléma nincs tökéletes megoldás. 30 00:01:34,480 --> 00:01:38,060 Tudjuk használni a dupla helyett úszó, amely hajlamos arra, hogy használja a 64 biten 31 00:01:38,060 --> 00:01:39,410 szemben 32. 32 00:01:39,410 --> 00:01:42,290 De persze, a 64 is véges, így a probléma lesz 33 00:01:42,290 --> 00:01:43,630 marad még megduplázódik. 34 00:01:43,630 --> 00:01:46,323