Поплавки, двойники и полупоплавки

Мне было интересно, как биты организованы в числах с плавающей запятой (4 байта), двойных (8 байтов) и половинных числах с плавающей запятой (2 байта, используемых в реализации OpenGL).

Далее, как я мог преобразовать одно в другое?


person Luca    schedule 15.02.2010    source источник


Ответы (2)


По сути, для каждого из этих форматов у вас есть:

  • 1 знаковый бит
  • x битов степени, что дает целое число E
  • y битов мантиссы (или «мантиссы»), дающих дробное число M

Если бит знака равен 1, число отрицательное, иначе положительное.

Чтобы получить величину, вы берете (1 + M) * 2 ^ (E - k), где k (называемое «смещением экспоненты») зависит от формата.

Стоит отметить, что определенные комбинации знака, экспоненты и мантиссы являются «особыми» значениями, такими как 0, -inf, +inf и NaN.

Подробности (значения x, y и k) см. в Википедии для одинарной точности (4 байта), двойной точности (8 байт) и половинная точность (2 байта).

Обратите внимание, что все они указаны в IEEE 754, поэтому поиск в Google может дать вам полезные результаты. . :)

person Sapph    schedule 15.02.2010
comment
Графические процессоры могут не полностью соответствовать IEEE 754 (например, они часто не поддерживают денормализацию). - person Spudd86; 14.06.2010

Половина, Одинарный, Двойной

Удобные диаграммы на этих страницах. Библиотека должна предоставлять средства для преобразования между различными форматами.

person Anon.    schedule 15.02.2010