Сравнивая IEEE с плавающей и двойной для равенства - PullRequest
9 голосов
/ 22 августа 2008

Каков наилучший метод для сравнения чисел с плавающей точкой IEEE и двойных чисел на равенство? Я слышал о нескольких методах, но я хотел посмотреть, что думает сообщество.

Ответы [ 15 ]

0 голосов
/ 22 августа 2008

Если у вас есть ошибки с плавающей точкой, у вас есть еще больше проблем, чем это. Хотя, думаю, это зависит от личной перспективы.

Даже если мы проведем числовой анализ, чтобы минимизировать накопление ошибки, мы не сможем ее устранить, и у нас могут остаться результаты, которые должны быть идентичными (если мы рассчитывали по реалам), но отличаться (потому что мы не можем рассчитать реалов).

0 голосов
/ 22 августа 2008

Это, похоже, решает большинство проблем, сочетая относительную и абсолютную погрешность. Подход ULP лучше? Если так, то почему?

ULP - это прямая мера «расстояния» между двумя числами с плавающей запятой. Это означает, что они не требуют, чтобы вы вызывали в памяти относительные и абсолютные значения ошибок, и при этом вы не должны обязательно получать эти значения «примерно правильно». С ULP вы можете напрямую указать, насколько близко вы хотите, чтобы числа были, и тот же порог работает так же хорошо для маленьких значений, как и для больших.

0 голосов
/ 22 августа 2008

это лучший способ сделать это из тех, что мне встречались, поскольку он обеспечивает самые надежные сравнения даже при ошибках с плавающей запятой.

Если у вас есть ошибки с плавающей точкой, у вас есть еще больше проблем, чем это. Хотя, думаю, это зависит от личной перспективы.

0 голосов
/ 22 августа 2008

О, господин мой, пожалуйста, не интерпретируйте биты с плавающей точкой как целые, если вы не используете P6 или более раннюю версию.

Даже если это заставляет его копировать из векторных регистров в целочисленные регистры через память, и даже если это останавливает конвейер, это лучший способ сделать это, с которым я столкнулся, поскольку он обеспечивает самые надежные сравнения перед лицом ошибок с плавающей запятой.

т.е. это цена, которую стоит заплатить.

0 голосов
/ 22 августа 2008

О, дорогой лорд, пожалуйста, не интерпретируйте биты с плавающей точкой как целые, если вы не используете P6 или более раннюю версию.

...