Несоответствие арифметики с плавающей запятой между x86 и x64
В Visual Studio 2010 заметная разница в арифметике с плавающей запятой между сборками x86 и x64 возникает при сравнении значений определенных выражений. Это несоответствие проявляется в следующем коде:
float a = 50.0f; float b = 65.0f; float c = 1.3f; float d = a * c; bool bLarger1 = dАрхитектуры x86 и x64 обрабатывают второе выражение, bLarger2, по-разному. В сборке x86 значение bLarger2 оценивается как true, а в сборке x64 — как false. Это несоответствие коренится в вычислении выражения (a * c) в операциях с плавающей запятой. модули с плавающей запятой, используемые в двух архитектурах: x87 для x86 и SSE для x64. Фундаментальное различие между этими двумя устройствами заключается в их точности. Модуль x87 по умолчанию использует точность выше одинарной (обычно двойную), тогда как модуль SSE работает исключительно с одинарной точностью.
Устранение несоответствия
Чтобы устранить проблему несоответствия, точность модуля x87 можно вручную настроить так, чтобы она соответствовала точности модуля SSE. Этого можно добиться в 32-битном коде, выполнив следующее:
_controlfp(_PC_24, _MCW_PC);Установив точность одинарной точности, оценка (a * c) в выражение bLarger2 будет соответствовать выражению сборки x64, в результате чего для bLarger1 и bLarger2 будет установлено значение false.
Вывод_controlfp(_PC_24, _MCW_PC);Разница в арифметике с плавающей запятой между сборками x86 и x64 связана с разными уровнями точности модулей с плавающей запятой x87 и SSE. Путем ручного управления точностью модуля x87 в соответствии с точностью модуля SSE можно устранить несоответствие, гарантируя согласованную оценку выражений в обеих архитектурах.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3