【发布时间】:2011-11-17 18:54:42
【问题描述】:
我有一个代码,我必须处理 Half precision floating point representation 数字。为了实现这一点,我创建了我自己的 C++ 类 fp16,其中与此类型相关的所有运算符(算术逻辑、关系)都使用我的自定义函数重载,同时使用带有半精度浮点数的 Single precision floating point 数字。
半精度浮点 = 1 个符号位,5 个指数位,10 个有效位 = 16 位
单精度浮点 = 1 个符号位,8 个指数位,23 个有效位 = 32 位
那么我如何将单精度浮点数转换为半精度浮点数:-
对于有效位 - 我使用截断,即从 32 位中松散 13 位以获得半精度浮点数的 10 位有效位。
我应该怎么做才能处理指数位。如何从 8 个指数位变为 5 个指数位?
任何好的阅读材料都会有所帮助。
【问题讨论】:
-
如果指数不能用 5 位表示,那么您处于溢出状态。如果您使用类似 IEEE754 的表示,您可能希望给出
inf作为结果。我认为所有关于double->float转换的阅读都是相关的。 -
(哦,你有没有注意到关于半精度引用 c/c++ code (for matlab) 的维基百科文章可以双向进行转换?这可能是一个很好的灵感。)
-
@eudoxos - 感谢 MAtlab 链接。它很好地解释了可以做什么。