Floating point 不是数字(NaN)
为什么有些数字在浮点运算中被定义为非数字(NaN)?Floating point 不是数字(NaN),floating-point,number-formatting,arithmeticexception,arithmetic-overflow,Floating Point,Number Formatting,Arithmeticexception,Arithmetic Overflow,为什么有些数字在浮点运算中被定义为非数字(NaN)? (尽管它们可以用IEEE格式表示,实际上是实数)问题的作者也发表了以下评论: 我不明白为什么“所有指数位都是1,尾数不全是零”的数字不是实数 此注释背后的原因似乎是:二进制浮点格式有符号位s、一些指数位e和一些有效位f。对于e的大多数值,表示的值为(−1) s•1.f•2e bias(其中“1.f”是由“1”串联而成的二进制数字,而位f和bias是指数的编码偏差)。在这种方案中,所有1的指数值都是一个数字,那么它如何是NaN呢 答案是IEEE
(尽管它们可以用IEEE格式表示,实际上是实数)问题的作者也发表了以下评论:
我不明白为什么“所有指数位都是1,尾数不全是零”的数字不是实数 此注释背后的原因似乎是:二进制浮点格式有符号位s、一些指数位e和一些有效位f。对于e的大多数值,表示的值为(−1) s•1.f•2e bias(其中“1.f”是由“1”串联而成的二进制数字,而位f和bias是指数的编码偏差)。在这种方案中,所有1的指数值都是一个数字,那么它如何是NaN呢 答案是IEEE-754标准规定了浮点编码的位代表什么,并且规定:
- 如果e为零,则表示的值为(−1) s•0.f•2emin,其中emin是格式的最小指数。(emin等于1-bias。)
- 如果e不是全零或全1,则表示的值为(−1) s•1.f•2e偏差
- 如果e为1,f为0,则表示的值为(−1) s•∞.李>
- 如果e为全1且f不为零,则表示的值为NaN。(关于发信号的NaN与安静的NaN以及使用f的位传送附加信息,存在一些依赖于实现的细节。)
因此,当IEEE-754在硬件或软件中实现时,实现被设计为遵循这些规则。当规则说要产生无穷大时,实现产生表示无穷大的位模式。当输入操作数具有无穷大的位模式时,实现将其视为无穷大,而不是无穷大作为实数,它将表示指数编码是否具有扩展正常数字模式的意义。问题的作者也发表了以下评论:
我不明白为什么“所有指数位都是1,尾数不全是零”的数字不是实数 此注释背后的原因似乎是:二进制浮点格式具有符号位s、一些指数位e和一些有效位f。对于e的大多数值,表示的值为(−1) s•1.f•2e bias(其中“1.f”是由“1”串联而成的二进制数字,而位f和bias是指数的编码偏差)。在这种方案中,所有1的指数值都是一个数字,那么它如何是NaN呢 答案是IEEE-754标准规定了浮点编码的位代表什么,并且规定:
- 如果e为零,则表示的值为(−1) s•0.f•2emin,其中emin是格式的最小指数。(emin等于1-bias。)
- 如果e不是全零或全1,则表示的值为(−1) s•1.f•2e偏差
- 如果e为1,f为0,则表示的值为(−1) s•∞.李>
- 如果e为全1且f不为零,则表示的值为NaN。(关于发信号的NaN与安静的NaN以及使用f的位传送附加信息,存在一些依赖于实现的细节。)