>> Дэвід Малан: Давайце цяпер адразу вас напавал.
Аказваецца, у рэальным свеце 1 падзеленага на самай справе 1 кастрычнік / 10 або 0,1.
Але ў кампутарах, толькі канчатковае Лік бітаў, з якім
прадстаўляць ліку, вы не можаце заўсёды прадстаўляць ліку як 1/10 з
ідэальна дакладнасць.
Іншымі словамі, кампутары часам маюць здзяйсняць званкі меркаванні і ня
абавязкова адлюстроўваюць нумар, які вы хачу настолькі дакладна, наколькі вы маюць намер.
>> Напрыклад, выкажам здагадку, я іду назад у гэтая праграма і змяніць 0,1 да,
ой, 0.28, тым самым паказваючы, што Я хацеў бы Printf ў Е да
28 месцаў дакладнасці.
Давайце зараз захаваць і скампіляваць праграму, на гэты раз з макіяжам floats2.
Запусціце яго з кропкавай слэш floats2.
І, Божа, на гэты раз я не бачу 0,1, але 0.10000000, які з'яўляецца даволі
добра да гэтага часу.
Але тады, 14901161193847656250.
>> Ну, што адбываецца?
Ну, атрымліваецца, што паплавок звычайна захоўваецца ўнутры кампутара
з 32 біт.
32, відавочна, канчатковае лік, якое азначае, што вы можаце толькі ўявіць
з 32 біт на канчатковае лік з лікаў з якая плавае коскі.
На жаль, гэта азначае, што Кампутар не можа прадстаўляць ўсё магчыма
колькасці з якая плавае кропкай, або сапраўдныя лікі, што існуе ў свеце,
таму што гэта толькі мае так шмат бітаў.
>> І так, што кампутар гэта, па-відаць зроблена ў гэтым выпадку ўяўляюць сабой 1/10 да
бліжэйшы магчыма плавае коскі, гэта магчыма.
Але калі мы паглядзім, як мы тут, па 28 знакаў пасля коскі, мы пачынаем бачыць, што
недакладнасць.
Так што гэта праблема з не існуе ідэальнага рашэння.
Мы можам выкарыстоўваць на дваіх чалавек замест паплаўка, які мае тэндэнцыю выкарыстоўваць 64 біта ў якасці
супраць 32.
Але, вядома, 64 таксама канчатковая, так што праблема будзе
застаюцца нават з двайнікамі.