Floating point Goldberg纸的ULPs计算

Floating point Goldberg纸的ULPs计算,floating-point,Floating Point,我一直在读这篇论文,每个计算机科学家都应该知道浮点运算 我看过各种各样的ULP计算,我觉得我非常理解它,直到减法的讨论出现 Take another example: 10.1 - 9.93. This becomes x = 1.01 × 10^1 y = 0.99 × 10^1 x - y = .02 × 10^1 The correct answer is .17, so the computed difference is off by 30 ulps and is wro

我一直在读这篇论文,每个计算机科学家都应该知道浮点运算

我看过各种各样的ULP计算,我觉得我非常理解它,直到减法的讨论出现

Take another example: 10.1 - 9.93. This 
becomes 
x = 1.01 × 10^1

y = 0.99 × 10^1 
x - y = .02 × 10^1


The correct answer is .17, so the computed difference is off by 30 ulps 
and is wrong in every digit!

为什么这是30ulps而不是0.3?因为ulp肯定是0.01x10^1,或者换句话说是0.1。错误为0.03,即0.3 ulps。

正确的答案写在评论中,但我会将其作为答案写下来,这样它就不会隐藏在评论噪音中

基本上,
x-y=.02×10^1
被标准化为
2.00×10^-1
,这意味着ULP现在是这个标准化表示中的最小值:
0.01×10^-1

因此,错误是

0.03 / [(0.01 × 10^-1)/ULP] = 30 ULP

误差为0.03,即30*0.001(其中0.001是p=3时的ULP,值为0.2)。因此,可以确定的是,ULP的值是否始终取决于可用于表示浮点数的最低可能指数,即使计算到该点的数字具有更高的指数?基本上,是的。请记住,大多数浮点系统坚持每个值的规范化/规范化表示。@OliCharlesworth ULP不是“when”。它是一个参数的函数。这里的ULP是0.001,好吗?@Gangnus:ULP的绝对值是有效位数的函数,当然是表示的数字的绝对值?