ОБНОВЛЕНО методом правильного округления до четного.
Основной алгоритм:
Сохранение 23-степени + 1-го бита (после десятичной точки).Затем обнулите младшие значащие биты (23-экспонента).Затем используйте сохраненный бит и новый LSB для округления.Если запомненный битовый бит равен 1, добавьте его в младший бит не усеченной части и при необходимости нормализуйте.Если сохраненный бит равен 0, ничего не делать.
**
Для результатов, соответствующих стандарту IEEE-754:
** Перед обнулением младших значащих битов (с 23 показателями) ИЛИ вместе с младшими значащими битами с 22 показателями.Назовите результат этого ИЛИ бита округления.Сохраненный (23-экспонента + 1) бит (после десятичной запятой) будет называться защитным битом.Затем обнуляют (23-экспонентные) младшие значащие биты.
Если защитный бит равен нулю, ничего не делать.
Если защитный бит равен 1, а залипающий бит равен 0,добавьте единицу к младшему разряду, если младший разряд равен 1.
Если защитный бит равен 1, а бит залипания равен 1, добавьте единицу к младшему разряду.
Вот несколько примеров использованияосновной алгоритм:
x = 62,3
sign exponent mantissa
x = 0 5 (1).11110010011001100110011
Шаг 1: Сохранение экспоненты + 1-й бит (после десятичной точки)
экспонента + 1 = 6-йбит
сохраненный бит = 0
Шаг 2: Обнулить 23 младших разряда младших разрядов 23-экспонента = 18, поэтому мы обнуляем 18 младших разрядов
sign exponent mantissa
x = 0 5 (1).11110000000000000000000
Шаг3: использовать следующий бит для округления Так как сохраненный бит равен 0, мы ничего не делаем, а число с плавающей запятой округлено до 62.
Другой пример:
x =21,9
sign exponent mantissa
x = 0 4 (1).01011110011001100110011
Шаг 1: сохранить показатель степени + 1-й бит (после десятичной точки)
показатель степени + 1 = 5-й бит
сохраненный бит = 1
Шаг 2: обнуление 23-expмладшие значащие биты 23-экспонента = 19, поэтому мы обнуляем 19 младших битов
sign exponent mantissa
x = 0 4 (1).01010000000000000000000
Шаг 3. Использование следующего бита для округления Так как сохраненный бит равен 1, мы добавляем единицу к младшему битуусеченную часть и получим 22, что является правильным числом:
Начнем с:
sign exponent mantissa
x = 0 4 (1).01010000000000000000000
Добавьте одну в этом месте:
+ 1
И мы получим 22:
sign exponent mantissa
x = 0 4 (1).01100000000000000000000