【问题标题】:How to compute relative error for the rounding of floating point numbers when the rounded number is 0?当舍入数为 0 时,如何计算浮点数舍入的相对误差?
【发布时间】:2019-03-27 15:39:21
【问题描述】:

浮点数 x 的相对舍入误差定义为

e_r = |(round(x) - x) / x| = |round(x)/x - 1| (1)

假设round(x)使用四舍五入模式,则绝对舍入误差|round(x) - x|将小于0.5 ulp(x),其中ulp是最后一位的单位

ulp = 2^E * epsilon

E 是用于x 的指数,epsilon 是机器精度 epsilon=2^-(p-1)p 是精度(24 用于单精度,53 用于双精度 IEEE 格式)。

使用这个,相对误差可以表示为任何实数 x

e_r = |(round(x) - x) / x| = |(回合(x) - x)| / |x|

问题在于,对于非规范化数字0 < x < 2^Em,其中Em 是最小指数(-126 表示单精度,-1022 表示双精度)

0

四舍五入总是为 0!

如果round(x)为0,则由(​​1)

e_r =|(0 - x) / x| = |1| !

如何计算这些数字的相对误差?四舍五入到0的数字是否应该使用相对误差?

【问题讨论】:

  • 给定round(x) 为0,则“e_r =|(0 - 1) / 1| = |1| !”表示当计算结果为零且理想数学结果非零时,相对误差为 100%。这是对的。四舍五入为零的非零数字的相对误差为 100%。
  • @EricPostpischil:计算结果不为零,它是 0
  • 计算结果为四舍五入后下发的结果。如果对a + b进行运算,理想的数学结果是a+b,即ab与正常数学相加的结果。从概念上讲,这会产生一个中间结果,然后将其四舍五入到最接近的可表示值。该可表示值由计算机传送到目的地(例如处理器寄存器)。该交付值是计算结果。
  • 您还没有说明代码的作用,因此无法知道是否可以以适合您代码目标的方式处理下溢为零。这个 Stack Overflow 问题询问四舍五入为零的数字的相对误差。如果理想数不为零,则相对误差为 100%。弄清楚这如何影响您的代码以及如何处理它是一个不同的问题。也许你应该问这个问题。
  • 这与算术运算无关。给定一个低于最小非规范化数的实数 x,将该数舍入到最接近的浮点数并计算相对误差。如果所有此类数字的此错误为 1,而归一化范围内的所有其他数字为 0.5 epsilon,我必须将其作为一种特殊情况处理,在每个基于相对舍入误差的程序代码中进行决策。

标签: floating-point floating-accuracy


【解决方案1】:

当运算的精确数学结果不为零,并且计算机为该运算提供的最终结果为零时,相对误差为 100%。

公式er = |(0 − x) / x| = |1|,其中 x 非零,正确表达了这一点。

关于“是否应该将相对误差用于四舍五入到0 的数字?”这个问题,相对误差作为度量的适用性取决于应用程序。如果交付的结果丢失了对应用程序有用的所有信息,这反映在相对误差为 100% 的事实中。如果交付的结果对应用程序有一些用处,因为知道结果很小可能很有用,而其他结果要大得多,那么相对误差可能不相关。如果没有有关该应用程序的更多信息,则无法提供具体答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2018-09-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2020-08-04
    相关资源
    最近更新 更多