Число может иметь несколько представлений, если мы используем число с плавающей запятой, поэтому результаты деления числа с плавающей запятой могут давать поразрядные числа с плавающей запятой.Но что, если знаменатель имеет степень 2?
AFAIK, деление на степень 2 только сместит экспоненту, оставив одну и ту же мантиссу, всегда производящую поразрядно идентичные числа с плавающей точкой.Это верно?
float a = xxx;
float result = n/1024f; // always the same result?
--- ОБНОВЛЕНИЕ ----------------------
Извините за отсутствиезнание черной магии IEEE для чисел с плавающей запятой :), но я говорю о тех числах, о которых упоминал Гуванте: нет представления для определенных десятичных чисел, «неточные» числа с плавающей запятой.В оставшейся части этого поста я буду использовать «точные» и «неточные», учитывая определение этих слов Гуванте.
Для упрощения, скажем, числитель всегда является «точным» числом.Кроме того, давайте разделим не на любую степень 2, а всегда на 1024. Кроме того, я выполняю операцию каждый раз одинаково (один и тот же метод), поэтому я говорю о получении одинаковых результатов в разных исполнениях (дляточно такие же входытолько сдвиньте экспоненту, все еще имея «точное» значение с плавающей точкой.
Вы попросили привести пример.Реальная проблема заключается в следующем: у меня есть симулятор, выдающий иногда 0.02999994, а иногда 0.03000000 для одних и тех же входов.Я думал, что мог бы умножить эти числа на 1024, округлить, чтобы получить «целое» («точное» число с плавающей точкой), которое было бы одинаковым для этих двух чисел, а затем разделить на 1024, чтобы получить «точное» округленное число с плавающей точкой.
Мне сказали ( в моем другом вопросе ), что я мог бы преобразовать в десятичное число, округлить и привести к плавающему, но я хочу знать, работает ли этот способ.