Почему десятичная дробь не помещается в двоичное число
Компьютер хранит числа в двоичной системе: вместо десяти цифр у него только 0 и 1. Некоторые дроби в такой записи заканчиваются — например, половина равна 0,1₂. Но десятая часть так не записывается: её двоичная запись бесконечно повторяется, примерно как десятичная запись одной трети — 0,333… .
Поэтому формат с ограниченным числом разрядов не может сохранить такую дробь целиком. Он записывает ближайшее доступное значение — чуть меньше или чуть больше нужного.
Что дают 64 бита
В распространённом формате чисел с плавающей точкой двойной точности 64 бита делятся между знаком, порядком числа и его значащими цифрами. Для точности остаётся конечное число двоичных разрядов, поэтому дополнительные биты сокращают погрешность, но не устраняют её. Если дробь нельзя точно выразить конечной двоичной записью, более широкий формат лишь приближает её точнее.
Это не означает, что компьютер ошибается при каждом вычислении. Многие значения, например степени двойки, представляются точно. Проблема возникает с дробями вроде 0,1, а также с результатами операций, которые требуют округления.
Как крошечная погрешность становится заметной
Представим, что программа много раз прибавляет к значению приближение одной и той же дроби. На каждом шаге компьютер округляет результат до доступного числа разрядов. Ошибка отдельного округления обычно мала, но после множества операций такие отклонения могут накопиться — или повлиять на сравнение двух почти равных значений.
Поэтому программы для денежных расчётов часто используют целые числа в минимальных единицах, например копейках, либо специальные десятичные форматы. А там, где важна именно приблизительная величина, применяют числа с плавающей точкой и учитывают допустимую погрешность. Число может выглядеть как точная десятичная дробь на экране, хотя внутри хранится лишь её ближайшее двоичное приближение.






