IEEE 754浮点数为何采用1作为负数的符号位?
通常认为,浮点数中使用**偏置指数(又称偏移二进制)**的原因是便于比较。
通过将符号位设为最高位,偏置指数位于中间,尾数为最低位,这样得到的数值无论是作为浮点数还是整数解释,都能保持正确的顺序。目的是利用定点硬件实现浮点数的高速比较。
但IEEE 754浮点数中负数符号位为1、正数为0,导致负数的整数表示值大于正数。若反转符号位定义,所有正数的无符号整数值会大于负数。
我明白这不会让比较完全简化,因为NaN不等于NaN需要单独处理(尽管这种设计的合理性存疑)。但奇怪的是,偏置指数的常用理由似乎被符号-幅度表示的设定抵消了。
相关讨论可见Stack Overflow上的问题“Why do we bias the exponent of a floating-point number?”和“Why IEEE floating point number calculate exponent using a biased form?”。其中第一个问题的公认回答也提到了这一点(重点为笔者所加):
IEEE 754编码有一个便利特性:两个正非NaN数的顺序比较可直接通过字典序比较对应位串,或等效地将位串视为无符号整数进行比较。这适用于从+0.0到+∞的整个浮点数范围(之后只需简单扩展比较逻辑以考虑符号即可)。
我能想到两个可能的原因:一是用1表示负数符号位,可将IEEE 754浮点数定义为-1^s × 1.f^(e-b)的形式;二是全0位串对应的浮点数为+0而非-0。
但结合偏置指数的常用理由来看,我认为这两个原因都不够有说服力。
内容的提问来源于stack exchange,提问作者Thanks for flying Vim

