Относительная ошибка округления для числа с плавающей запятой x определяется как
e_r = | (round (x) - x) / x |= | раунд (х) / х - 1 |(1)
Если предположить, что для round(x)
используется режим округления до ближайшего, абсолютная ошибка округления |round(x) - x|
будет меньше 0.5 ulp(x)
, где ulp
- единицы в последнемplace
ulp = 2 ^ E * epsilon
, а E - это показатель степени, используемый для x
, а epsilon
- точность машины epsilon=2^-(p-1)
, p
- точность (24для одинарной точности и 53 для форматов IEEE двойной точности).
Используя это, относительная ошибка может быть выражена для любого действительного числа x
e_r = | (round (x) - x) / x |= | (раунд (х) - х) |/ | х |<| 0,5 * 2 ^ E * 2 ^ - (р-1) |/ | 2 ^ E |<0.5 epsilon </p>
Проблема в том, что для денормализованных чисел 0 < x < 2^Em
, где Em
- минимальный показатель (-126 для одинарной точности, -1022 для двойного), то есть
0
округление всегда равно 0!
Если round(x)
равно 0, то (1)
e_r = | (0 - x) / x |= | 1 |!
Как вычисляется относительная ошибка для таких чисел?Следует ли даже использовать относительную ошибку для чисел, округленных до 0
?