Преобразование числа из представления с плавающей запятой одинарной точности в число с плавающей запятой половинной точности - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть код, где я должен работать над Представление с плавающей точкой половинной точности номера. Чтобы добиться этого, я создал свой собственный класс C ++ fp16, в котором все операторы (арифметические, логические, реляционные), связанные с этим типом, перегружены моими пользовательскими функциями, при этом используется число с плавающей точкой одинарной точности с плавающей точкой половинной точности число.

С плавающей запятой половинной точности = 1 знаковый бит, 5 битов степени, 10 значащих битов = 16 бит

с плавающей запятой одинарной точности = 1 знаковый бит, 8 битов экспоненты, 23 значащих и битов = 32 бита

Итак, что я делаю для преобразования числа с плавающей запятой одинарной точности в число с плавающей запятой половинной точности: -

Для значащих битов - я использую усечение, т. Е. Теряю 13 битов из 32 битов, чтобы получить 10 битов значащих и для поплавка половинной точности.

Что я должен сделать для обработки экспонентных битов. Как перейти от 8 экспонентных бит к 5 экспонентным битам?

Любой хороший материал для чтения поможет.

1 Ответ

1 голос
/ 01 октября 2011

Я нашел решение в библиотеке, разработанной OpenEXR .В основном, есть два варианта, OpenEXR использует эту опцию a) ниже- a) Используйте 16-битный беззнаковый короткий тип для хранения типа данных с плавающей запятой половинной точности, и он имеет предварительно вычисленное хранилище значений в таблице поиска, которое используется при преобразовании числа с плавающей запятойа также половину, чтобы плавать.

Я использовал этот способ- б) Я могу просто потерять точность поплавка одинарной точности, чтобы получить поплавок половинной точности.Храните это в "float" нативном типе.Оставьте экспоненту нетронутой, поскольку мы по-прежнему используем float (одинарную точность) для хранения данных с плавающей половиной прецизионной точности.

Спасибо @eudoxos за ссылку Matlab, объясняющую некоторые детали обо всем этом.

...