@DiaTMss

Как число с плавающей точкой преобразовать в half float в 16 формат?

Доброго времени суток уважаемые программисты. Не подскажите, как реализовать конвертацию числа с плавающей точкой Vertex 4 v 1.7754 -0.0247 -3.4805 в
3f 1a a6 53 c2 f6 не могу понять формулу для преобразования в hex 5d02b8577f40d106553106.jpeg
5d02b86776a03960461156.png

как можно уместить 1.7754 в 3f 1a? Искал калькулятор, но не нашёл(

https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D...

steps3d.narod.ru/tutorials/float-tutorial.html
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
как можно уместить 1.7754 в 3f 1a?

0x3f 0x1a -- это знак == 0, порядок == 0xf, мантисса == 0x31a. Нормализованное значение мантиссы == 1 + 0x31a / 1024 = 1.7754. Порядок 0xf после вычитания bias == 15 превращается в 0, что соответствует множителю 1. Всё.

Как число с плавающей точкой преобразовать в half float в 16 формат

Примерно так:
0) обработать специальные случаи (например 0 представляется как 0).
1) взять модуль, запомнить знак исходного числа.
2) нормализовать, т.е выделить множитель вида 2^N, чтобы осталась нормализованная мантисса в диапазоне [1, 2). К N прибавить 15 -- это значение порядка.
3) отнять 1 от нормализованной мантиссы, результат умножить на 1024 -- это значение мантиссы float16.
4) сдвинуть значение порядка влево на 10, сделать побитовое или с мантиссой float16, установить старший бит, если число было отрицательным.

Для -3.4805 получаем:
3.4805 = 2^1 * 1.7402 ; N = 1, M = 1024 * 0.7402 = 0x2f6 ;
0x8000 | ((1 + 15) << 10) | 0x2f6 = 0x8000 | 0x4000 | 0x2f6 = 0xc2f6
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы