最小浮点数X s.t. 1 / X不是无穷大

时间:2017-08-31 17:53:40

标签: floating-point ieee-754

什么是最小的单精度和双精度浮点数,使其倒数在IEEE 754下仍然不等于无穷大?

编辑:我问它是因为我只想了解它是如何运作的

1 个答案:

答案 0 :(得分:1)

让我们以IEEE 754双精度为例。我们假设它在我们的C编译平台中映射到doubleC99 hexadecimal notation很方便,所以我们会利用它。我们还假设long doubledouble上至少有一个额外的精度,例如,long double是Intel的80位“扩展双精度”。

当且仅当分割的数学结果高于数字double时,1.0 / x操作+inf才会轮到1.fffffffffffff8p1023L。此数字不能表示为double,但它恰好是DBL_MAXdouble之后的DBL_MAX值之间的中点,如果double指数范围更广。这就是IEEE 754定义/等基本操作是否应该舍入到无穷大的方式。

因此,可以通过以下步骤计算回报时舍入到double的最高值+inf

  • 将舍入模式设置为FE_DOWNWARD
  • compute 1.0L / 1.fffffffffffff8p1023L
  • (当仍处于向下舍入模式时)将结果舍入为double

不是圆形到无穷大的最小值是之后的那个。它可以用nextafter来计算,例如标准化的in POSIX

将这四个步骤翻译成C应该很简单(不要忘记#pragma STDC FENV_ACCESS ON)。或者,正如托马斯韦勒所推荐的那样,蛮力。通过二分法进行搜索将花费不到64步。

注意:通过使用FE_UPWARD舍入模式并且只有三个步骤,可以计算回复到有限结果的最小值,但这依赖于1.0L / 1.fffffffffffff8p1023L不能成为的附加属性确切的操作。四步法在概念上更清晰。