ULP 最低精度单位

Ale*_*eks 9 testing math precision fractions

谁能解释一下最不精确的 ULP 单位?我有以下定义,但仍然不清楚

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

它到底是什么意思?提前致谢

Eri*_*hil 11

在浮点格式中,数字用符号s、尾数(也称为分数)f和指数e表示。例如,对于二进制浮点数,sfe表示的值为(-1) s \xe2\x80\xa2 f \xe2\x80\xa22 e

\n

f被限制为一定数量的数字,并且对于使用 2 作为基数的浮点格式,通常要求至少为 1 且小于 2。可以对数字进行的最小更改(除了下面讨论的某些例外)是将f的最后一位数字修改为 1。例如,如果f被限制为六个二进制数字,则它的值从 1.00000 到 1.11111,并且可以对其进行的最小更改是 0.00001。给定指数e , f中 0.00001 的变化会修改 0.00001\xe2\x80\xa22 e表示的值。这是最小精度单位 (ULP)

\n

请注意,ULP 根据指数而变化。

\n

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

\n

当单个运算仅受浮点系统在其有限范围内可以表示的数字(而不是超出该范围)限制时,结果中的最大误差为 ULP 的 \xc2\xbd 。这是因为,如果从数学上精确的结果来看,您的计算结果比 ULP 的 \xc2\xbd 更远,则可以将计算结果更改 1 个 ULP,从而使其误差减小。(例如,如果精确结果为 3.75,则从 3 更改为 4 会将误差从 0.75 更改为 0.25。)

\n

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

\n

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

\n

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

\n

请注意,表示分数时的误差大小与存储的数字大小成正比,这在技术上是不正确的。误差的界限大致成正比\xe2\x80\x94我们可以说\xc2\xbd ULP是误差的界限,并且ULP大致与数量成正比。它只是大致成比例,因为当分数范围从一到二时,它会变化两倍(使用二进制时)。例如,1 和 1.9375 具有相同的 ULP,因为它们使用相同的指数,但 ULP 中 1 的比例大于 1.9375 的比例。

\n

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

\n


Dr.*_*ann -1

每个浮点数代表一个实数区间。该间隔相对于其浮点数(解释为二进分数)的位置取决于舍入模式。该误差与区间内任何实数到浮点数的最大距离有关。

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

  • 在 IEEE 754 中,浮点数据恰好代表一个实数。它们不代表间隔。所表示的值在第 3.3 节中指定。 (2认同)
  • 四舍五入。理想情况下,“arctan”或其他基本函数返回的值是根据适用的舍入模式的规则和方向将精确的数学结果舍入到最接近的可表示数字的结果(通常是最接近的值,与偶数相关)低位,但其他模式包括向+无穷大舍入、向-无穷大舍入和向零舍入)。使用此属性可以轻松实现“sqrt”。然而,实际上,大多数数学库都没有实现“arctan”和其他具有此属性的函数。 (2认同)