我有一个代码,我必须处理Half precision floating point representation数字 . 为了实现这一点,我创建了自己的C类fp16,其中所有与此类型相关的运算符(算术逻辑,关系)都重载了我的自定义函数,同时使用带有半精度浮点数的Single precision floating point数 .
半精度浮点= 1符号位,5个指数位,10个有效位= 16位
单精度浮点= 1符号位,8个指数位,23个有效位= 32位
那么我要做的是从单精度浮点数转换为半精度浮点数: -
对于有效位 - 我使用截断,即32位中的松散13位,得到10位有效数,用于半精度浮点数 .
我该怎么做才能处理指数位 . 如何从8个指数位转换为5个指数位?
任何好的阅读材料都会有帮助 .
1 回答
我在OpenEXR开发的库中找到了一个解决方案 . 基本上有两个选项OpenEXR使用此选项a)下面 - a)使用16位无符号短类型存储半精度浮点数据类型,它有一个预先计算的值的查找表存储,用于将浮点数转换为一半还有一半要漂浮 .
我用这种方式 - b)我可以放松单精度浮点数的精度来获得半精度浮点数 . 将其存储在“float”本机类型中 . 保持指数不变,因为我们仍然使用float(单精度)来存储精简半精度浮点数据 .
感谢@eudoxos的Matlab链接,解释了有关这一切的一些细节 .