由于0.0 / 0.0
在数学上未定义,因此 IEEE-754 浮点标准合理地定义NaN
为其结果。现在,因为不像infinity
,NaN
不是一个明确定义的值,而是一组值,所以是否0.0 / 0.0
是一个明确定义的常数的问题也是合理的。
值得一提的x / 0.0
是infinity
,如果x != 0.0
.
IEEE-754 浮点标准中是否0.0 / 0.0
有明确定义的常量值?NaN
换句话说,它是否具有明确定义的位模式?
由于0.0 / 0.0
在数学上未定义,因此 IEEE-754 浮点标准合理地定义NaN
为其结果。现在,因为不像infinity
,NaN
不是一个明确定义的值,而是一组值,所以是否0.0 / 0.0
是一个明确定义的常数的问题也是合理的。
值得一提的x / 0.0
是infinity
,如果x != 0.0
.
IEEE-754 浮点标准中是否0.0 / 0.0
有明确定义的常量值?NaN
换句话说,它是否具有明确定义的位模式?
IEEE 754-2008 描述了指定浮点数据的四个级别。
级别 1 是扩展实数——实数加 -∞ 和 +∞。这是普通数学的水平;二除以三正好是三分之二。
级别 2 是浮点数据。它包括可以用浮点数(有限和无限)表示的所有值加上一个 NaN,它区分 -0 和 +0。这是浮点运算的级别;运算返回一个值,该值是四舍五入为可表示值的精确数学值。使用四舍五入的基本 64 位二进制格式中,二除以三正好是 0.66666666666666662965923251249478198587894439697265625。这个级别是代数封闭的;对浮点数据的任何算术运算都会产生浮点数据(可能是 NaN)。
第 3 级是浮点数据的表示。在这个级别,有限数用符号、指数和有效数表示,它包括 -∞ 和 +∞ 以及两个 NaN,一个安静(非信号)NaN 和一个信号 NaN。(使用信号 NaN 会导致异常。)有效数字是表示的一小部分。如果二进制浮点数的指数为e且有效数为f,则它表示 -<em>f • 2 e或 + f • 2 e的值,具体取决于其符号。在这个级别上,二除以三的结果是 + 号、-1 的指数和 1.3333333333333332593184650249895639717578887939453125 或十六进制的有效数字 1.5555555555555 16。
第 4 级是位串。在这个级别:
对于有限数,符号为 0(表示 +)或 1(表示 -)。对于普通数,通过向实际指数添加偏差,指数被编码为无符号值。对于基本的 64 位二进制格式,偏差为 1023,因此 -1 的实际指数被编码为 -1+1023 = 1022。有效数字的第一位被删除。因此,对于 53 位有效位,有效位字段中仅存储 52 位。对于次正规数,指数编码为 0。
无穷大用一个符号位、一个全为 1 的指数字段(基本 64 位二进制格式中的 2047)和一个全为零的有效数字字段进行编码。
NaN 使用符号位、全为 1 的指数字段和不全为零的有效数字字段进行编码。IEEE 754-2008 建议安静的 NaN 在有效数字段的第一位编码为 1,而信令 NaN 在第一位编码为 0,但这不是必需的。
由于“NaN”不是数字,IEEE 754-2008 避免将其称为数字或值。级别 2 中的事物是基准。
NaN 是定义明确的数据。指定产生它们的操作和对它们的操作。
从技术上讲,0.0 / 0.0
不是一个常数值;它是一种表达方式。IEEE 754-2008 规定将零除以零表示无效操作异常。当发出异常信号时,可能会中断正常处理,因此这种除法可能不会产生任何结果。在许多环境中,浮点异常只是引发一个记录异常的标志,但正常处理仍在继续。在这种情况下,IEEE 754-2008 指定该操作产生安静的 NaN。IEEE 754-2008 没有指定安静 NaN 中的特定位;系统可以自由地使用这些位来编码诊断信息或将它们用于其他目的。
(为了专注于 NaN,我省略了一些细节,例如次正规数是什么,有效数如何为四级标准化,以及如果不存储有效数的前导位如何知道。)
NaN 不是定义明确的值,而是一组值
对于 IEEE,值是抽象的数学实体,与它们的编码分开。例如,特定位模式可以编码数值 42.0。位模式不是实数,而是一个的编码。
NaN是一个符号实体(不是数字,顾名思义),有两种,安静的NaN和信号的NaN。NaN 具有多个编码作为位模式。
它是否具有明确定义的位模式
IEEE-754 不要求任何特定的位模式。