Floating point 0.0/0.0是一个定义良好的值吗?

Floating point 0.0/0.0是一个定义良好的值吗?,floating-point,language-agnostic,nan,ieee-754,numerical-computing,Floating Point,Language Agnostic,Nan,Ieee 754,Numerical Computing,由于0.0/0.0在数学上没有定义,因此IEEE-754浮点标准合理地定义了NaN。现在,因为与无穷不同,NaN不是一个定义良好的值,而是一组值,0.0/0.0是否是一个定义良好的常数的问题也是合理的 值得一提的是,如果x!=0.0 0.0/0.0是否是IEEE-754浮点标准中定义良好的常量NaN值?换句话说,它是否具有定义良好的位模式 NaN不是一个定义良好的值,而是一组值 对于IEEE来说,值是抽象的数学实体,独立于它们的编码。例如,并行位模式可以对数值42.0进行编码。位模式不是实数,而

由于
0.0/0.0
在数学上没有定义,因此IEEE-754浮点标准合理地定义了
NaN
。现在,因为与
无穷
不同,
NaN
不是一个定义良好的值,而是一组值,
0.0/0.0
是否是一个定义良好的常数的问题也是合理的

值得一提的是,如果
x!=0.0

0.0/0.0
是否是IEEE-754浮点标准中定义良好的常量
NaN
值?换句话说,它是否具有定义良好的位模式

NaN不是一个定义良好的值,而是一组值

对于IEEE来说,值是抽象的数学实体,独立于它们的编码。例如,并行位模式可以对数值42.0进行编码。位模式不是实数,而是一的编码

NaN是一个符号实体(不是一个数字,顾名思义),它有两种,安静的NaN和信号的NaN。NaN有多个编码作为位模式

它是否具有定义良好的位模式


IEEE-754不要求任何特定的位模式。

IEEE 754-2008描述了指定浮点数据的四个级别

第1级是扩展实数加上实数−∞ 及+∞. 这是普通数学的水平;二除以三正好是三分之二

级别2是浮点数据。它包括所有可用浮点(有限和无限)加上NaN表示的值,并区分−0和+0。这是浮点运算的级别;操作返回一个值,该值是精确的数学值,四舍五入为可表示的值。使用舍入到最近模式的基本64位二进制格式中的2除以3正好是0.6666662965923251249478198587894439697265625。这个层次是代数闭的;对浮点数据的任何算术运算都会生成浮点数据(可能是NaN)

第3级是浮点数据的表示。在这个级别上,有限数用符号、指数和有效位表示,它包括−∞ 及+∞ 和两个NaN,一个安静(非信号)NaN和一个信号NaN。(使用时,信号NaN会导致异常。)有效位是表示的一小部分。如果二进制浮点数的指数为e,有效位为f,则表示的值为−f•2e或+f•2e,取决于其符号。在这个级别上,二除以三的结果是+号、指数-1和有效位1.33325931846502498955639717578887939453125,或者十六进制的1.5555516

第4级是位字符串。在这一级别:

  • 对于有限数,符号为0(表示+)或1(表示−). 对于普通数字,通过向实际指数添加偏差,指数被编码为无符号值。对于基本64位二进制格式,偏差为1023,因此实际指数为−1编码为−1+1023=1022。有效位编码时删除其第一位。因此,对于53位有效位,只有52位存储在有效位字段中。对于低于正常值的数字,指数编码为0

  • 无穷大使用符号位、全1的指数字段(基本64位二进制格式为2047)和全零的有效位字段进行编码

  • 使用符号位、全1指数字段和不全零的有效位字段对NAN进行编码。IEEE 754-2008建议在有效位字段的第一位使用1对安静的NAN进行编码,并在第一位使用0对信令NAN进行编码,但这不是必需的

由于“NaN”不是数字,IEEE 754-2008避免将其称为数字或值。第2级中的事物是数据

NAN是定义良好的数据。生成它们的操作和对它们的操作都是指定的

从技术上讲,
0.0/0.0
不是一个常量;它是一个表达式。IEEE 754-2008规定,将零除以零表示无效的操作异常。当发出异常信号时,正常处理可能会中断,因此此除法可能不会产生任何结果。在许多环境中,浮点异常只会出现e记录异常但正常处理继续的标志。在这种情况下,IEEE 754-2008指定操作产生安静NaN。IEEE 754-2008未指定安静NaN中的特定位;系统可自由使用这些位编码诊断信息或用于其他目的


(为了专注于NaN,我省略了一些细节,比如什么是次正常数,第四级的有效位是如何标准化的,以及有效位的前导位在未存储的情况下是如何知道的。)

只是为了学究:x/0.0在数学上对于所有x都是未定义的:它没有任何不确定的地方(只有在除数非零时才定义除法)。@Richard不正确。
x/0.0
infinity
如果
x!=infinity
x!=0
,则为
:检查实数域的公理化定义。@Richard,我的错,我把你的评论解释为IEEE-754数学。另一方面,不确定和未定义只是同一事物的不同措辞。Wolfram Mathematica使用不确定这个词作为例子。@Richard:为了恰当地学究,数学家使用许多不同的系统数字/算术/符号/逻辑的TEM。定义或不定义*x*/0.0没有绝对意义;它是否定义为非零取决于您使用的系统。这些系统有各种有用的原因,尤其是因为它们模拟了表面现实的各个方面