Плавает, удваивается и наполовину плавает - PullRequest
2 голосов
/ 16 февраля 2010

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

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

Ответы [ 2 ]

3 голосов
/ 16 февраля 2010

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

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

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

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

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

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

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

1 голос
/ 16 февраля 2010

Половина , Одноместная , Двойная

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

...