浮点运算:推导摆动

Pra*_*dey 3 floating-point precision numerical-methods

我正在阅读 David Goldberg 的What Every Computer Scientist should Know About Floating-Point Arithmetic。我在数值分析方面没有正式的背景,并且很难理解这篇论文。在“相对误差和 Ulps ”部分中,他继续推导出用接近的 FP 数逼近实数时的相对误差的上限。因此对应于0.5 ULP,当一个实数近似于一个 FP 数d.ddd...dx β e 时,绝对误差为 ((β/2)β -p ) x β e。他说d.ddd...dx β e形式的数字的值范围从β e至 β x β e。我不明白这个范围是怎么来的。为了找到相对误差,我需要除以我近似的实际实数。他为什么要除以FP数可以取的值?我错过了什么?

此外,我正在努力理解wobble的重要性。几段之后,他通过取一个实数 x 然后用一个 FP 数逼近它来证明这种关系。然后在 ULP 和相对中找到错误。然后将实数乘以 8(以及 FP 近似)。以 ULP 测量时的误差增加,但相对误差保持不变。

不知何故,我无法对这种关系产生直觉。它在哪里有用?

Eri*_*hil 5

所以对应于 0.5 ULP,当一个实数由一个 FP 数d近似时。ddd ... d x ?e,绝对误差是 ((?/2)? - p ) x ? 电子

不完全是,它说当一个实数被最接近的浮点数逼近时,绝对误差可以大到((?/2)? - p ) x ? Ë,而不是它该值。

他说d形式的数字。ddd ... d x ?e 的值范围从 ? Ë什么?X ?电子。我不明白这个范围是怎么来的。

那是因为第一个数字d总是从 1 到 ??1 的某个数字。如果第一个数字是 0,我们会将指数e向下调整一个以增加更多数字。如果小数点之前有两个或更多数字,我们将向上调整e以向下推数字。例如,我们不会将 12345 表示为 .012345•10 6或 12.345•10 3;我们使用 1.2345•10 4。Goldberg 格式中的有效数总是至少为 1 且小于 ?。由于有效数S满足 1 ? S < ?,表示的(正)数满足 1•? èS < ?•? 电子

此外,我正在努力理解wobble的重要性。

考虑 10,000(含)和 100,000(不含)之间的所有实数。对于基数为 10 的五位浮点数,这些都具有 1 的 ULP。当我们将 10,000.7 转换为这种格式时,最接近的数字是 10,001,因此绝对误差为 0.3,ULP 误差为 0.3,并且相对误差是 .3 / 10,000.7 ?2.9998•10 ?5 . 当我们将 99,000.7 转换为这种格式时,最接近的数字是 99,001,因此绝对误差为 .3,ULP 误差为 .3,相对误差为 .3 /99,000.7 ?3.03•10 ?6 . 所以ULP误差是一样的,但是相对误差要小近十倍。相反,大约 3•10 ?5的相对误差是 0.3 ULP 刚好高于 10,000,但 3 ULP 刚好低于 100,000。

当我们将 100,007 转换为这种格式时,最接近的可表示数字是 100,010,因此绝对误差为 3,ULP 误差为 0.3,相对误差回到 2.9998•10 ?5。这就是 Goldberg 所说的相对于 ULP 误差的相对误差摆动的意思。在固定指数区间内,ULP 为固定量。在较大的指数范围内,ULP 误差近似于相对误差;它以与相对误差相同的平均值变化,但它在跳跃中这样做,而相对误差是连续的。