ULP 中的浮点错误(最后一位的单位)
Floating point error in ULPs (units in the last place)
此问题基于 David Goldberg 的论文 What Every Computer Scientist Should Know About Floating-Point Arithmetic。在第 1.2 节“相对误差和 Ulps”(第 8 页)中,论文给出了计算误差的方程式,ULP(最后一位的单位):
| d.d…d - (z/(β^e)) | β^(p-1)
其中 d.d…d * (β^e)
是数字 z
的浮点表示,β
和 p
是表示的基数和精度。
在论文的后面(第 9 页)有一个示例评估操作 10.1 - 9.93
的结果,当使用 β = 10
的浮点表示时,结果为 0.2
和p = 3
,它说结果0.2
有30个ULPs的错误,结果中的每个数字都是错误的。但是我无法使用上面的等式得出 30 个 ULP 的误差,我在使用上面的等式计算误差时得到的值是 0.3 个 ULP。
我是这样计算的:
(0.02 - (0.17/(10^1)))*10^(3-1) = 0.3 // 0.17 is the actual difference
我是不是漏掉了什么?
10.1 - 9.93 的无限精度差为 0.17 .
β = 10 和 p = 3 的机器返回了 0.200 的差异。
注意 3 个有效的 10 位数字作为 p = 3 .
误差值为|0.17 - 0.2|或 0.03 .
本机0.200的ULP为0.001.
正确答案是 0.03/0.001 或 0.2 的 30 个 ULP。
the value that I get while calculating the error using above equation is 0.3 ULPs.
可能因为误差是 10.1 的 0.3 ULP。 ULP 不是给定机器的常量,而是每个值的函数 ULP(x)
。
此问题基于 David Goldberg 的论文 What Every Computer Scientist Should Know About Floating-Point Arithmetic。在第 1.2 节“相对误差和 Ulps”(第 8 页)中,论文给出了计算误差的方程式,ULP(最后一位的单位):
| d.d…d - (z/(β^e)) | β^(p-1)
其中 d.d…d * (β^e)
是数字 z
的浮点表示,β
和 p
是表示的基数和精度。
在论文的后面(第 9 页)有一个示例评估操作 10.1 - 9.93
的结果,当使用 β = 10
的浮点表示时,结果为 0.2
和p = 3
,它说结果0.2
有30个ULPs的错误,结果中的每个数字都是错误的。但是我无法使用上面的等式得出 30 个 ULP 的误差,我在使用上面的等式计算误差时得到的值是 0.3 个 ULP。
我是这样计算的:
(0.02 - (0.17/(10^1)))*10^(3-1) = 0.3 // 0.17 is the actual difference
我是不是漏掉了什么?
10.1 - 9.93 的无限精度差为 0.17 .
β = 10 和 p = 3 的机器返回了 0.200 的差异。
注意 3 个有效的 10 位数字作为 p = 3 .
误差值为|0.17 - 0.2|或 0.03 .
本机0.200的ULP为0.001.
正确答案是 0.03/0.001 或 0.2 的 30 个 ULP。
the value that I get while calculating the error using above equation is 0.3 ULPs.
可能因为误差是 10.1 的 0.3 ULP。 ULP 不是给定机器的常量,而是每个值的函数 ULP(x)
。