2016-12-29 2 views
1

Я читаю what every computer scientist should know about floating point, и я не понимаю следующее заявление:Понимание ulps в катастрофической отмены

Катастрофическое сокращение происходит, когда операнды подлежат ошибки округления. Например, в квадратичной формуле имеет место выражение b2 - 4ac. Величины b2 и 4ac подвержены ошибкам округления, так как они являются результатами умножения с плавающей запятой. Предположим, что они округлены до ближайшего числа с плавающей запятой, и поэтому с точностью до 0,5 ulp. Когда они вычитаются, отмена может привести к исчезновению многих точных цифр, оставив в основном цифры, загрязненные ошибкой округления. Следовательно, разница может иметь ошибку многих ulps. Например, рассмотрим b = 3,34, a = 1,22 и c = 2,28. Точное значение b2 - 4ac равно 0,0292. Но b2 раундов до 11.2 и 4ac раундов до 11.1, поэтому окончательный ответ равен .1 , что является ошибкой на 70 ulps, хотя 11.2 - 11.1 точно равно .1. Вычитание не вносило никакой ошибки, а скорее выявляло ошибку, введенную в более ранние умножения.

Из того, что я прочитал, ulps являются единицами в последнем месте, так что если я округлить 11.1556 с 11.2 я могу иметь максимум 0,5 единицы в последнем месте, то есть максимум 0,05 ошибки.

Но почему, если я получу 11.2 - 11.1 = 0.1, это ошибка 70 ulps ?? Я бы подумал, что это последнее значение является ошибкой 0,7 ulps

ответ

1

Если вы связываете ошибку 0.1 - 0.0292 = 0.0708 к ULP точного результата (0.0001), ошибка даже 708 ulps. Исходная версия содержала опечатку здесь (см. footnote 6 в your reference).

Смежные вопросы