NaN
https://zh.wikipedia.org/wiki/NaN
NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。
目录¶
- 1浮点数
- 1.1返回NaN的运算
- 2整数的NaN
- 3注释
- 4参考文献
- 5外部链接
浮点数[编辑]¶
在浮点数运算中,NaN与无穷大的概念不同,尽管两者均是以浮点数表示实数时的特殊值。无效操作(Invalid Operation)同样也不同于算术溢出(可能返回无穷大)和算术下溢出(可能返回最小的一般数值、特殊数值、零等)。
IEEE 754-1985中,用指数部分全为1、小数部分非零表示NaN。以32位IEEE单精度浮点数的NaN为例,按位表示即:S111 1111 1AXX XXXX XXXX XXXX XXXX XXXX,S为符号位,符号位S的取值无关紧要;A是小数部分的最高位(the most significant bit of the significand),其取值表示了NaN的类型:X不能全为0,并被称为NaN的payload;[注 1]
-
大多数处理器,包括Intel与AMD的x86系列、Motorola 68000系列、AIM PowerPC系列、ARM系列、Sun SPARC系列,采取了A为'is_quiet'标记位。即,如果A = 1,则该数是quiet NaN(QNaN);如果A为零、其余X部分非零,则是signaling NaN(SNaN)。IEEE 754-2008标准采纳了这一方案。
SNaN会设异常寄存器。
返回NaN的运算[编辑]¶
返回NaN的运算有如下三种[1]:
-
至少有一个参数是NaN的运算
-
不定式
- 下列乘法运算:0×∞、0×−∞
- 下列加法运算:∞ + (−∞)、(−∞) + ∞
- 下列减法运算:∞ - ∞、(−∞) - (−∞)
-
下列指数运算:0^0、∞^0、1^∞、∞^(−∞)
-
产生
复数
结果的实数运算。例如:
For single-precision values:
Positive infinity is represented by the bit pattern 7F800000
Negative infinity is represented by the bit pattern FF800000
A signalling NaN (NANS) is represented by any bit pattern
between 7F800001 and 7FBFFFFF or between FF800001 and FFBFFFFF
A quiet NaN (QNaN) is represented by any bit pattern
between 7FC00000 and 7FFFFFFF or between FFC00000 and FFFFFFFF
For double-precision values:
Positive infinity is represented by the bit pattern 7FF0000000000000
Negative infinity is represented by the bit pattern FFF0000000000000
A signalling NaN is represented by any bit pattern
between 7FF0000000000001 and 7FF7FFFFFFFFFFFF or
between FFF0000000000001 and FFF7FFFFFFFFFFFF
A quiet NaN is represented by any bit pattern
between 7FF8000000000000 and 7FFFFFFFFFFFFFFF or
between FFF8000000000000 and FFFFFFFFFFFFFFFF
Canonical-NaN¶
https://webassembly.github.io/spec/core/syntax/values.html
A canonical NaN is a floating-point value ±𝗇𝖺𝗇(canonN)±nan(canonN) where canonNis a payload whose most significant bit is 11 while all others are 00:
canonN=2signif(N)−1
An arithmetic NaN is a floating-point value ±𝗇𝖺𝗇(n)±nan(n) with n≥canonNn≥canonN, such that the most significant bit is 11 while all others are arbitrary. QNaN.
https://blog.csdn.net/weixin_33898233/article/details/86023108
Risc-V架构规定,如果浮点运算的结果是一个NaN数,那么使用一个固定的NaN数,将之命名为Canonical-NaN。单精度浮点对应的Canonical-NaN数值为0x7fc00000,双精度浮点对应Canonical-NaN数值为0x7ff80000_00000000