Если десятичные знаки не могут быть представлены в двоичном формате, то почему компьютеры не сохраняют это число как долю двух целых чисел, которые могут быть точно представлены?Использовать фракции для определения погрешности десятичного числа
- Каждый раз, когда номер используется для отображения, он может быть преобразован в неточный поплавок.
- Каждый раз, когда он используется для дальнейших вычислений, вы включаете фракцию.
Это должно коренным образом решить проблему неточности, но это еще не все, что гений, так что не так с теорией?
например. вы хотите сохранить номер 0.1 и использовать его для дальнейших вычислений. Вместо того, чтобы хранить его как 0,1, вы сохраняете его как 1/10 (так что вам нужно еще несколько байтов для хранения фракций). Затем, если вам нужно умножить его на другое число, скажем, 5, теперь вы также умножаете ошибку на 3. Если вы умножаете 1/10 на 3, вы получаете 1/10 * 3 = 3/10. Всякий раз, когда вам нужно отображать его, 3/10 может стать неточным. До этого времени нет вопросов о неточности.
Форматы с плавающей запятой, которые существуют, легко и быстро использовать с расчетами, а также легко реализовать в оборудовании. Они также довольно компактны, что было еще более важно на момент создания форматов. –
Попробуйте вычислить сумму 1/k для k меньше n достаточно большим, и вы увидите, что размер (в битах) вашего знаменателя является чем-то вроде экспоненциального по отношению к n. Формат с плавающей запятой сохраняет постоянный размер (в битах) для результата такого вычисления. Даже если он приблизительный, каждое вычисление с плавающей запятой выполняется в фиксированном хранилище и в фиксированном времени привязки, что не относится к «точным» дроби. – Franck