为何不使用符号位区分IEEE-754的信号NaN与安静NaN?
为何IEEE-754不用符号位区分signaling NaN与quiet NaN?
IEEE-754标准中,NaN的指数位全为1且尾数非零。其中*Quiet NaN(安静NaN)*的尾数最高有效位(MSB)为1,signaling NaN(信号NaN)的该位为0。那为什么不直接用符号位来区分这两种NaN?这样就能把整个尾数都用来承载额外信息,不像现在的方案会浪费所有尾数最高有效位为1的位模式。
按照我的理解,改用这种方案后,能新增的不同信号值数量为:2^mantissaWidth。
5位浮点数示例(1位符号位、1位指数位、3位尾数)
下表列出了所有可能的取值,标记有<-的行是改用符号位区分后可新增的不同数据值,NaN的“信号属性”完全由符号位决定:
| 位模式 | 当前类型 | 说明 |
|---|---|---|
| 0_1_000 | 正无穷 | |
| 0_1_001 | signaling NaN | |
| 0_1_010 | signaling NaN | |
| 0_1_011 | signaling NaN | |
| 0_1_100 | quiet NaN | <- 可复用为新值 |
| 0_1_101 | quiet NaN | <- 可复用为新值 |
| 0_1_110 | quiet NaN | <- 可复用为新值 |
| 0_1_111 | quiet NaN | <- 可复用为新值 |
| 1_1_000 | 负无穷 | |
| 1_1_001 | signaling NaN | |
| 1_1_010 | signaling NaN | |
| 1_1_011 | signaling NaN | |
| 1_1_100 | quiet NaN | <- 可复用为新值 |
| 1_1_101 | quiet NaN | <- 可复用为新值 |
| 1_1_110 | quiet NaN | <- 可复用为新值 |
| 1_1_111 | quiet NaN | <- 可复用为新值 |
关于“mantissa(尾数)”的说明
此处的“尾数”指浮点数中用于计算有效数字的显式位。对于常规浮点数,存在一个不在二进制表示中的隐式前导位,此时有效数字为1 + mantissa。如果这个术语表述有误,前文的“mantissa width”仅指浮点数中既非符号位也非指数位的显式位数量。
内容的提问来源于stack exchange,提问作者Cigarette Smoking Man
相关产品推荐
相关产品推荐

