1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> Дејвид MALAN: Ајде сега удар вашиот ум. 3 00:00:01,750 --> 00:00:06,500 Излезе во реалниот свет 1 поделени 10 е всушност 1/10, или 0,1. 4 00:00:06,500 --> 00:00:10,370 Но во компјутери кои имаат само ограничен бројот на битови со која ќе се 5 00:00:10,370 --> 00:00:14,290 претставуваат броеви, не можете секогаш претставуваат броеви како 1/10 со 6 00:00:14,290 --> 00:00:15,500 совршена прецизност. 7 00:00:15,500 --> 00:00:18,640 Со други зборови, компјутери понекогаш имаат да се направи проценка повици и не 8 00:00:18,640 --> 00:00:22,740 мора претставува број ќе сакаат како токму како што имате намера. 9 00:00:22,740 --> 00:00:27,020 >> На пример, да претпоставиме ќе се вратам во оваа програма и промена на 0,1 до, 10 00:00:27,020 --> 00:00:32,073 ох, 0,28, а со тоа покажува дека Би сакал printf да printf да 11 00:00:32,073 --> 00:00:34,350 28 места на прецизност. 12 00:00:34,350 --> 00:00:39,330 Ајде сега ги спаси и да собере на програмата, овој пат со марка floats2. 13 00:00:39,330 --> 00:00:41,910 Стартувај го со точка црта floats2. 14 00:00:41,910 --> 00:00:49,980 И, драги Бог, овој пат јас не гледам 0.1, но 0.10000000, што е прилично 15 00:00:49,980 --> 00:00:51,070 добро досега. 16 00:00:51,070 --> 00:00:57,830 Но, тогаш, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Па, што се случува? 18 00:00:58,880 --> 00:01:02,280 Па, излегува дека плови е обично се чуваат во внатрешноста на компјутерот 19 00:01:02,280 --> 00:01:03,500 со 32 бита. 20 00:01:03,500 --> 00:01:07,340 32 е очигледно ограничен број, кој значи дека ти само може да претставува 21 00:01:07,340 --> 00:01:11,050 со 32 бита конечен број на подвижна запирка вредности. 22 00:01:11,050 --> 00:01:14,980 За жал, тоа значи дека компјутер не може да ги претставуваат сите можни 23 00:01:14,980 --> 00:01:18,110 броеви со подвижна запирка, или реални броеви, кои постојат во светот, 24 00:01:18,110 --> 00:01:19,980 поради тоа што има само толку многу бита. 25 00:01:19,980 --> 00:01:23,940 >> И така што компјутерот е очигледно направи во овој случај се претставува 1/10 до 26 00:01:23,940 --> 00:01:26,880 на најблиската можна лебдечки точка вредност што може. 27 00:01:26,880 --> 00:01:31,050 Но, ако гледаме, како што го имаме овде, до 28 децимални места, ние почнуваме да се види дека 28 00:01:31,050 --> 00:01:31,970 непрецизност. 29 00:01:31,970 --> 00:01:34,480 Значи ова е проблем со нема совршено решение. 30 00:01:34,480 --> 00:01:38,060 Можеме да го користиме двојно наместо плови, кој има тенденција да се користи 64 бита како 31 00:01:38,060 --> 00:01:39,410 за разлика од 32. 32 00:01:39,410 --> 00:01:42,290 Но, се разбира, 64, исто така, конечни, така што проблемот ќе 33 00:01:42,290 --> 00:01:43,630 остане дури и со двојки. 34 00:01:43,630 --> 00:01:46,323