Мне было интересно, как биты организованы в числах с плавающей запятой (4 байта), двойных (8 байтов) и половинных числах с плавающей запятой (2 байта, используемых в реализации OpenGL).
Далее, как я мог преобразовать одно в другое?
Мне было интересно, как биты организованы в числах с плавающей запятой (4 байта), двойных (8 байтов) и половинных числах с плавающей запятой (2 байта, используемых в реализации OpenGL).
Далее, как я мог преобразовать одно в другое?
По сути, для каждого из этих форматов у вас есть:
Если бит знака равен 1, число отрицательное, иначе положительное.
Чтобы получить величину, вы берете (1 + M) * 2 ^ (E - k), где k (называемое «смещением экспоненты») зависит от формата.
Стоит отметить, что определенные комбинации знака, экспоненты и мантиссы являются «особыми» значениями, такими как 0, -inf
, +inf
и NaN
.
Подробности (значения x, y и k) см. в Википедии для одинарной точности (4 байта), двойной точности (8 байт) и половинная точность (2 байта).
Обратите внимание, что все они указаны в IEEE 754, поэтому поиск в Google может дать вам полезные результаты. . :)