Предположим, что N - произвольное число, представленное в соответствии со стандартами одинарной точности IEEE754. Я хочу снова найти наиболее точное из возможных представлений N / 2 в IEEE754.
Я хочу найти общий алгоритм (описанный словами, я просто хочу, чтобы необходимые шаги и случаи учитывались) для получения представления.
Мой подход:
Скажите, что число представлено: b0_b1_b2_b3...b_34
.
- Изолировать первый бит, который определяет знак (- / +) числа.
- Рассчитать представление степени (p) из беззнакового представления
b_1...b_11
.
- Если
power = 128
, у нас есть особый случай. Если все биты мантиссы равны 0, мы имеем, в зависимости от b_0
, либо минус, либо плюс бесконечность. Мы ничего не меняем. Если у мантиссы есть хотя бы один бит, равный 1, то у нас есть значение NaN
. Мы снова ничего не меняем.
- , если
e is inside
] - 126, 127 [then we have a normalized mantissa
м. Новая мощность p can be calculated as
p '= p - 1 and belongs in the interval
] - 127, 126] . We then calculate
m / 2`, и мы представляем ее, начиная справа и теряя любые биты, которые не могут быть включены в 23 бита мантисса.
- Если
e = -126
, то при вычислении половины этого числа мы передаем денормализованную мантиссу. Мы представляем p = 127
, вычисляем половину мантиссы и представляем ее снова, начиная с права, теряя любую информацию, которая не может быть включена.
- Наконец, если
e = -127
, у нас есть денормализованная мантисса. Пока m/2
может быть представлено в количестве битов, доступных в мантиссе, без потери информации, мы представляем это и сохраняем p = -127
. В любом другом случае мы представляем число в виде положительного или отрицательного 0 в зависимости от b_0
Какие-либо шаги, которые я пропустил, какие-либо улучшения (я уверен, что есть), которые могут быть сделаны, или что-то, что кажется совершенно неправильным?