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