Я сейчас читаю о числах с плавающей запятой и наткнулся на следующее упражнение:
Печать числа в десятичном формате. Предполагается, что число с плавающей точкой IEEE 754 single .
Должны быть напечатаны все десятичные цифры, в том числе полученные из-за ошибок округления. Например, когда пользователь вводит 0,1, соответствующее значение с плавающей запятой отображается как 0,1000000015 и т. Д.
Возможно ли не использовать операции с плавающей точкой для печати числа с плавающей запятой в десятичном формате? Мне известен самый простой подход: многократно умножать число с плавающей точкой на 10, обрезать его и брать младшую значащую десятичную цифру в целой части. Но для этого требуется умножение и усечение с плавающей запятой.
РЕДАКТИРОВАТЬ: мой главный вопрос о печати дробной части.
Это то, что я пытаюсь реализовать.
Шаг 0. Набор:
result = 0
addend = 5
Шаг 1. Найдите начало дробной части числа с плавающей запятой в его двоичном представлении (здесь при выполнении вычислений вручную делалась бы нормализация).
Шаг 2. Отметив начало дробной части, прочитайте биты один за другим слева направо. Вычислить:
if (bit_read = 1)
result = result * 10 + addend
addend = addend * 5
Повторяйте шаг 2, пока не закончится дробная часть.
Шаг 3. Напечатайте result
как целое число.
Будет ли такой алгоритм корректно работать со всем диапазоном нормалей и ненормалей?