如何对16位浮点半精度数进行加减法?
如何对 16 位浮点半精度数进行加法和减法?
假设我需要加或减:
1 10000 0000000000
1 01111 1111100000
2 的补码形式。
How do I add and subtract 16 bit floating point half precision numbers?
Say I need to add or subtract:
1 10000 0000000000
1 01111 1111100000
2’s complement form.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OpenEXR 库定义了半精度浮点类。它是 C++,但在本机 IEEE754 float 和 half 之间进行转换的代码应该很容易适应。请参阅:Half/half.h 作为开始。
The OpenEXR library defines a half-precision floating point class. It's C++, but the code for casting between native IEEE754 float and half should be easy to adapt. see: Half/half.h as a start.
假设您使用类似于 IEEE 单/双精度的非规范化表示,只需计算符号 = (-1)^S,如果 E != 0,则尾数为 1.M;如果 E == 0,则尾数为 0.M,指数 = E - 2^(n-1),对这些自然表示进行运算,然后转换回 16 位格式。
符号1 = -1
尾数1 = 1.0
指数 1 = 1
符号 2 = -1
尾数2 = 1.11111
指数2 = 0
总和:
符号=-1
尾数 = 1.111111
exponent = 1
表示形式: 1 10000 1111110000
当然,这假设指数的编码过多。
Assuming you are using a denormalized representation similar to that of IEEE single/double precision, just compute the sign = (-1)^S, the mantissa as 1.M if E != 0 and 0.M if E == 0, and the exponent = E - 2^(n-1), operate on these natural representations, and convert back to the 16-bit format.
sign1 = -1
mantissa1 = 1.0
exponent1 = 1
sign2 = -1
mantissa2 = 1.11111
exponent2 = 0
sum:
sign = -1
mantissa = 1.111111
exponent = 1
Representation: 1 10000 1111110000
Naturally, this assumes excess encoding of the exponent.