浮点运算:推导摆动

Floating Point Arithmetic: Deriving Wobble

我正在阅读 David Goldberg 的每个计算机科学家都应该知道的关于浮点运算的知识。我没有正式的数值分析背景,很难理解这篇论文。在 相对误差和 Ulps 一节中,他继续推导出用接近的 FP 数逼近实数时的相对误差上限。所以对应.5 ULPs,当一个实数被一个FP数逼近时d.ddd...d x β e,绝对误差为((β/2)β-p) x βe。他说 d.ddd...d x βe 形式的数字的值范围为 βe 到 β x βe。我不明白这个范围是怎么来的。要找到相对误差,我需要除以我近似的实际实数。他为什么要除以 FP 数可以取的值?我错过了什么?

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

不知何故,我无法对这种关系形成直觉。有什么用处?

So corresponding to .5 ULPs, when a real number is approximated by a FP number d.ddd...d x βe, the absolute error is ((β/2)β-p) x βe.

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

He says that numbers of the form d.ddd...d x βe have values that range from βe to β x βe. I don't understand how this range comes from.

那是因为第一个数字d总是从1到β−1的某个数字。如果第一个数字是 0,我们将把指数 e 调低一个以提高更多数字。如果小数点之前有两个或更多数字,我们会调整 e 向上推数字。例如,我们不会将 12345 表示为 .012345•106 或 12.345•103;我们使用 1.2345•104。 Goldberg 格式中的有效数总是至少为 1 且小于 β。由于尾数S满足1≤S<β,所表示的(正)数满足1•βeS < β•βe

Further, I am struggling to understand the significance of wobble.

考虑10000(含)到100000(不含)之间的所有实数。对于以 10 为基数的五位浮点数,它们的 ULP 均为 1。当我们将 10,000.7 转换为这种格式时,最接近的数字为 10,001,因此绝对误差为 .3,ULP 误差为 .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 的相对误差是 .3 ULP 略高于 10,000,但 3 ULP 略低于 100,000。

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