1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID MALAN: Hai acum sufla mintea ta. 3 00:00:01,750 --> 00:00:06,500 Se pare în lumea reală 1 împărțit 10 este într-adevăr de 1/10, sau 0,1. 4 00:00:06,500 --> 00:00:10,370 Dar în computere care au doar o finit Numărul de biți în care să 5 00:00:10,370 --> 00:00:14,290 reprezintă numere, nu poți întotdeauna reprezintă numere, cum ar fi 1/10 cu 6 00:00:14,290 --> 00:00:15,500 precizie perfectă. 7 00:00:15,500 --> 00:00:18,640 Cu alte cuvinte, computere, uneori, au pentru a efectua apeluri de judecată și nu 8 00:00:18,640 --> 00:00:22,740 reprezintă în mod necesar numărul pe care Vreau ca exact cum intenționați. 9 00:00:22,740 --> 00:00:27,020 >> De exemplu, să presupunem că mă întorc în acest program și schimba 0,1 la, 10 00:00:27,020 --> 00:00:32,073 oh, 0,28, indicând astfel că Aș vrea să printf printf la 11 00:00:32,073 --> 00:00:34,350 28 de locuri de precizie. 12 00:00:34,350 --> 00:00:39,330 Hai acum salva și compila programul, de data aceasta cu make floats2. 13 00:00:39,330 --> 00:00:41,910 Rulați-l cu punct floats2 slash. 14 00:00:41,910 --> 00:00:49,980 Și, Doamne, de data aceasta eu nu văd 0.1, dar 0.10000000, care este destul de 15 00:00:49,980 --> 00:00:51,070 bine până acum. 16 00:00:51,070 --> 00:00:57,830 Dar apoi, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Ei bine, ce se întâmplă? 18 00:00:58,880 --> 00:01:02,280 Ei bine, se pare că un flotor este de obicei stocat în interiorul unui calculator 19 00:01:02,280 --> 00:01:03,500 cu 32 de biți. 20 00:01:03,500 --> 00:01:07,340 32 este în mod evident un număr finit, care implică faptul că poate reprezenta doar 21 00:01:07,340 --> 00:01:11,050 cu 32 de biți un număr finit plutitoare de valori punct. 22 00:01:11,050 --> 00:01:14,980 Din păcate, acest lucru înseamnă că calculator nu poate reprezenta toate posibile 23 00:01:14,980 --> 00:01:18,110 numere în virgulă mobilă, sau numere reale, care există în lume, 24 00:01:18,110 --> 00:01:19,980 deoarece are atât de multe biți. 25 00:01:19,980 --> 00:01:23,940 >> Și ce computerul este aparent face în acest caz se reprezintă 1/10 până la 26 00:01:23,940 --> 00:01:26,880 cel mai apropiat posibil flotarea Valoarea punct că se poate. 27 00:01:26,880 --> 00:01:31,050 Dar dacă ne uităm, așa cum avem aici, la 28 zecimale, vom începe să vedem că 28 00:01:31,050 --> 00:01:31,970 imprecizie. 29 00:01:31,970 --> 00:01:34,480 Deci, aceasta este o problemă cu nici o soluție perfectă. 30 00:01:34,480 --> 00:01:38,060 Putem folosi o dublă în loc de un flotor, care tinde să folosească 64 de biți ca 31 00:01:38,060 --> 00:01:39,410 spre deosebire de 32. 32 00:01:39,410 --> 00:01:42,290 Dar, desigur, 64 este, de asemenea, finit, deci problema va 33 00:01:42,290 --> 00:01:43,630 rămâne chiar și cu camere duble. 34 00:01:43,630 --> 00:01:46,323