Bit manipulation 如何加减16位浮点半精度数?

Bit manipulation 如何加减16位浮点半精度数?,bit-manipulation,bit,twos-complement,Bit Manipulation,Bit,Twos Complement,如何加和减16位浮点半精度数 假设我需要加或减: 10000亿 101111 11111 00000 2的补码形式。该库定义了一个半精度浮点类。它是C++,但在本地IEEE74浮点和半之间进行铸造的代码应该易于适应。请参阅:Half/Half.h作为开始。假设您使用的是类似于IEEE单精度/双精度的非规范化表示,只需计算符号=(-1)^S,尾数为1.M,如果E!=如果E==0,指数=E-2^(n-1),则对这些自然表示进行操作,并转换回16位格式 符号1=-1 尾数1=1.0 指数1=1 符号2

如何加和减16位浮点半精度数

假设我需要加或减:

10000亿

101111 11111 00000


2的补码形式。

该库定义了一个半精度浮点类。它是C++,但在本地IEEE74浮点和半之间进行铸造的代码应该易于适应。请参阅:Half/Half.h作为开始。

假设您使用的是类似于IEEE单精度/双精度的非规范化表示,只需计算符号=(-1)^S,尾数为1.M,如果E!=如果E==0,指数=E-2^(n-1),则对这些自然表示进行操作,并转换回16位格式

符号1=-1 尾数1=1.0 指数1=1

符号2=-1 尾数A2=1.11111 指数2=0

总数: 符号=-1 尾数=1.111111 指数=1

代表:110011110000


当然,这假设指数编码过多

请提供更多上下文。C没有半精度。16位精度,但采用什么格式/标准?有标志位吗?螳螂有多少位,指数A有多少位?半精度算术通常没有硬件支持。(因此没有简单的方法可以做到这一点)英特尔编译器支持将半精度转换为单精度或从单精度转换为整数。@Ernest Staszuk格式似乎是符号(有偏?)指数尾数,而不是转换为浮点或双精度再返回,您可以编写所有用于数字加减的位逻辑。什么平台?有些平台,例如CUDA,支持16位半精度,但大多数平台不支持。你的意思是:当然,这假设指数编码过多。只是我做的一些实际数学只有在你理解指数编码过多的情况下才有意义。如果您没有使用多余的编码来表示指数E,那么例如规则“E!=0”必须更改。。。过量编码只是对指数进行编码的一种方式,以便在无符号比较下负指数小于正指数。维基百科可能会对此进行很好的讨论。。。否则,我将不胜感激。