ULP单位精度最低

时间:2017-05-14 14:57:02

标签: testing math precision fractions

任何人都可以解释最低精度的ULP单位吗? 我有以下定义,但仍然不清楚

“表示分数时的误差大小与存储的数量大小成正比.ULP或最小精度单位定义了存储数字时可以获得的最大误差。存储的数字越大ULP越大。“

这究竟是什么意思? 提前致谢

2 个答案:

答案 0 :(得分:2)

在浮点格式中,数字用符号 s 表示,有效数字(也称为分数) f 和指数 e 。例如,对于二进制浮点, s f e 表示的值为(-1) 小号 ˚F•2 ë

f 被限制为一定数量的数字,并且以二进制形式,通常要求至少为1且小于2。可以在数字中进行的最小变化(下面讨论的某些例外情况)是将 f 的最后一位数修改为1.例如,如果 f 被限制为六个二进制数字,然后它具有从1.00000到1.11111的值,并且可以在其中进行的最小变化是0.00001。给定指数 e f 中的0.00001变化会修改由0.00001•2 e 表示的值。这是最低精度(ULP)的单位

请注意,ULP因指数而异。

我提到的例外发生在最大可表示的有限值(其中数字只能通过产生无穷大来增加),最小(最负)可表示的有限值,零和次正规数(特殊情况发生在分数和指数),以及指数变化的边界。在这些边界处,您正在减小指数,这意味着 f 的最低有效位的值减小,因此该步骤实际上是旧ULP的1/2。

当计算仅受浮点系统可以表示的数字限制时,结果中的最大误差是ULP的1/2。这是因为,如果您从数学上精确的结果中得到超过ULP的1/2,则可以将计算结果改为1 ULP,以使其误差在幅度上减小。 (例如,如果确切结果为3.75,则从3更改为4会将错误从.75更改为.25。)

基本算术运算,例如加法,乘法和除法,应该提供四舍五入到最接近的可表示结果的结果,因此它们具有最多½个ULP的误差。平方根也应该以这种方式实现。数学库函数(例如余弦和对数)的目标是提供良好的舍入,但很难得到正确的舍入,因此商业库通常不能保证正确的舍入。

从十进制(例如ASCII文本)到内部浮点格式的转换应该正确舍入,但并非所有软件库或语言实现都能正确执行此操作。

复合操作(例如执行许多计算以获得结果的子例程)将具有许多舍入误差,并且通常不会返回在数学上精确结果的½个ULP内的结果。

请注意,在表示分数时,表示分数的大小与存储的数字的大小成比例时,在技术上并不正确。错误上的绑定大致成比例 - 我们可以说½ULP是错误的界限,ULP与数字大致成比例。它只是大致成比例,因为它变化了两倍(当使用二进制时),因为分数范围从1到2。例如,1和1.9375具有相同的ULP,因为它们使用相同的指数,但ULP的比例大于1,而不是1.9375。

只有误差的界限大致成比例。实际误差取决于所涉及的数字。例如,如果我们加1和1,我们得到2没有错误。

答案 1 :(得分:0)

每个浮点数表示实数的间隔。该间隔相对于其浮点数的位置(解释为二元分数)取决于舍入模式。该错误与间隔中任何实数与浮点数的最大距离有关。

所以最安全的答案是到两边的下一个浮点数的距离。如果舍入模式是通常的舍入到最近的浮点数,则最大误差是其一半。