Точность с плавающей точкой при перемещении от i386 до x86_64

На вкладке «Предварительный просмотр» щелкните глаз и выберите «Показать декорации макета».

enter image description here

РЕДАКТИРОВАТЬ: Панель инструментов не отображается из-за моих настроек стиля - я использовал 'NoActionBar'. Это должно работать для вас, хотя.

11
задан Peter Mortensen 17 November 2017 в 22:20
поделиться

3 ответа

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

Как Вы узнали, каждая библиотека, на которую Вы полагаетесь, собирается принять плавающую точку SSE, поэтому если Вы не планируете скомпилировать все вручную, теперь и навсегда, именно так можно установить режим FP на x87, Вы - более обеспеченный контакт с проблемой теперь, и просто признав, что математика FP не на 100% точна, и не будет в общем урожае тот же результат на двух различных платформах. (Я верю урожаю ЦП AMD немного отличающиеся результаты в x87 математике также).

Вам абсолютно нужна 80-разрядная точность? (Если так, очевидно, нет многих альтернатив, кроме скомпилировать все самостоятельно для использования 80-разрядного FP.)

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

17
ответ дан 3 December 2019 в 03:37
поделиться

Точность на 80 битов на самом деле опасна. Проблема состоит в том, что это на самом деле сохраняется, пока переменная хранится в регистре ЦП. Каждый раз, когда это вытесняют к RAM, это является усеченным к точности типа. Таким образом, у Вас может быть переменная, на самом деле изменяют ее значение даже при том, что ничего не произошло с нею в коде.

5
ответ дан 3 December 2019 в 03:37
поделиться

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

2
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: