0.0 / 0.0是一个定义明确的值吗?

问题描述 投票:-1回答:2

由于0.0 / 0.0在数学上未定义,因此IEEE-754浮点标准合理地将NaN定义为其结果。现在,因为与infinity不同,NaN不是一个明确定义的值,而是一组值,0.0 / 0.0是否是明确定义的常数的问题也是合理的。

值得一提的是,如果x / 0.0infinity将是IEEE-754中的x != 0.0

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

floating-point language-agnostic nan ieee-754 numerical-computing
2个回答
4
投票

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

1级是扩展的实数 - 实数加上-∞和+∞。这是常规数学的水平;两分三分正好是三分之二。

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

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

4级是位串。在这个级别:

  • 对于有限数,符号为0(对于+)或1(对于 - )。对于正常数字,通过向实际指数添加偏差,将指数编码为无符号值。对于基本的64位二进制格式,偏差为1023,因此实际指数-1被编码为-1 + 1023 = 1022.有效数据的第一位被删除。因此,对于53位有效数,只有52位存储在有效位字段中。对于次正规数,指数编码为0。
  • Infinity用符号位编码,指数字段全部为1(基本64位二进制格式为2047),有效字段全为零。
  • NaN用符号位,全部为1的指数字段和不全为零的有效字段编码。 IEEE 754-2008建议在有效数字字段的第一位使用1编码静默NaN,并在第一位使用0编码信令NaN,但这不是必需的。

由于“NaN”不是数字,IEEE 754-2008避免将其称为数字或值。第2级的东西是基准。

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

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

(为了关注NaN,我省略了一些细节,例如什么是次正规数,如何对第四级规范化有效数,以及如果未存储有效数的前导位如何已知。)


2
投票

NaN不是定义明确的值,而是一组值

对于IEEE,值是抽象的数学实体,与它们的编码分开。例如,一个parricular位模式可以编码数值42.0。位模式不是实数,而是一个编码。

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

它是否具有明确定义的位模式

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

© www.soinside.com 2019 - 2024. All rights reserved.