>> ДЕВІД Малан: Давайте тепер уб'є вас наповал.
Виявляється, в реальному світі 1 розділеного насправді 10 січня / 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 також конечна, так що проблема буде
залишаються навіть з двійниками.