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

Floating point 最小浮点数X s.t.1/X不是无穷大,floating-point,ieee-754,Floating Point,Ieee 754,根据IEEE 754,最小的单精度和双精度浮点是什么,使得其倒数仍然不等于无穷大 编辑:我之所以问这个问题,是因为我只想了解它是如何工作的让我们以IEEE 754双精度为例。我们假设它在我们的C编译平台中被映射到double。这很方便,所以我们将充分利用它。我们还假设long double比double至少有一个额外的精度位,例如,long double是Intel的80位“扩展双精度” double操作1.0/x循环到+inf当且仅当除法的数学结果高于数字1.fffffffffff8p1023

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


编辑:我之所以问这个问题,是因为我只想了解它是如何工作的

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

double
操作
1.0/x
循环到
+inf
当且仅当除法的数学结果高于数字
1.fffffffffff8p1023l
。此数字不能表示为
double
,但它正好是
DBL_MAX
和下一个
之间的中点>如果
double指数具有更大的范围,则DBL_MAX后的double值。IEEE 754就是这样定义诸如/之类的基本运算是否应舍入到无穷大

因此,可通过以下步骤计算往复时四舍五入到
+inf
的最高值
double
值:

  • 将舍入模式设置为向下<代码>FE_
  • 计算
    1.0L/1.fffffffffffff8p1023L
  • (仍处于向下四舍五入模式)将结果四舍五入到
    double
不四舍五入到无穷大的最小值是紧随其后的值。它可以用标准化的
nextafter
计算,例如

将这四个步骤转换为C应该很简单(不要忘记在上访问pragma STDC FENV_)。或者,正如Thomas Weller所建议的那样,强制执行。通过二分法进行搜索只需要不到64个步骤


注:通过使用
FE_up
舍入模式和三个步骤,可以计算到有限结果的最小值,但这取决于附加属性
1.0L/1.fffffffffffffff8p1023l
不能是精确的操作。四步方法在概念上更清晰。

Brute force it.T这个问题是关于C浮点的理论问题