如何加减 16 位浮点半精度数?
假设我需要加减:
1 10000 0000000000
1 01111 1111100000
2 的补码形式。
如何加减 16 位浮点半精度数?
假设我需要加减:
1 10000 0000000000
1 01111 1111100000
2 的补码形式。
OpenEXR库定义了一个半精度浮点类。它是 C++,但在本地 IEEE754 浮点数和半数之间转换的代码应该很容易适应。请参阅:Half/half.h作为开始。
假设您使用类似于 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 指数 = 1
代表:1 10000 1111110000
自然地,这假设了指数的过度编码。