Вы читали "Что должен знать каждый программист об арифметике с плавающей запятой"< /а>?
В нем обсуждается ошибка округления (то, что вы называете «вычислительным шумом»), стандарт IEEE 754 для представления чисел с плавающей запятой и реализация математики с плавающей запятой на компьютерах.
Я считаю, что чтение этой статьи ответит на ваш вопрос или, по крайней мере, даст вам более полное представление о том, как именно работает математика с плавающей запятой.
Некоторые разъяснения, чтобы помочь вашему пониманию - слишком большие, чтобы поместиться в комментарии к сообщению @Richante:
Во-первых, разница между realmin
и eps
:
realmin
— наименьшее нормализованное число с плавающей запятой. Вы можете представлять меньшие числа в денормализованной форме.
eps
— наименьшее приращение между различными числами. realmin
= eps(realmin) * 2^52
.
«Нормализованные» и «денормализованные» числа с плавающей запятой объясняются в статье, указанной выше.
Во-вторых, ошибка округления не является показателем того, насколько можно «доверять» n
цифре числа.
Возьмем, к примеру, это:
>> ((0.1+0.1+0.1)^512)/(0.3^512)
ans =
1.0000
Мы делим 0.3^512
само по себе, поэтому ответ должен быть ровно один, верно? Мы должны быть в состоянии доверять каждой цифре до eps(1)
.
Ошибка в этом расчете на самом деле 400 * eps
:
>> ((0.1+0.1+0.1)^512)/(0.3^512) - 1
ans =
9.4591e-014
>> ans / eps(1)
ans =
426
Ошибка вычисления, т. е. степень недостоверности n
-й цифры, намного больше, чем eps
, ошибка округления с плавающей запятой в представлении ответа. Обратите внимание, что здесь мы выполнили только шесть операций с плавающей запятой! Вы можете легко набрать миллионы флопов, чтобы получить один результат.
Повторю еще раз: eps()
не показатель ошибки в вашем расчете. Не пытайтесь отобразить: «Мой результат 1234,567 +/- eps (1234,567)». Это бессмысленно и обманчиво, потому что подразумевает, что ваши цифры более точны, чем они есть на самом деле.
eps
, ошибка округления в представлении вашего ответа составляет всего 1 часть на миллиард триллионов или около того. Ваш настоящий враг — это ошибка, которая накапливается каждый раз, когда вы выполняете операцию с плавающей запятой, и это то, что вам нужно отслеживать для значимой оценки ошибки.
person
Li-aung Yip
schedule
13.04.2012