首页 文章

将数字从单精度浮点表示转换为半精度浮点数

提问于
浏览
3

我有一个代码,我必须处理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 回答

  • 1

    我在OpenEXR开发的库中找到了一个解决方案 . 基本上有两个选项OpenEXR使用此选项a)下面 - a)使用16位无符号短类型存储半精度浮点数据类型,它有一个预先计算的值的查找表存储,用于将浮点数转换为一半还有一半要漂浮 .

    我用这种方式 - b)我可以放松单精度浮点数的精度来获得半精度浮点数 . 将其存储在“float”本机类型中 . 保持指数不变,因为我们仍然使用float(单精度)来存储精简半精度浮点数据 .

    感谢@eudoxos的Matlab链接,解释了有关这一切的一些细节 .

相关问题