Я обнаружил, что запуск
Math.Log10(double.Epsilon)
вернется около -324
на машине A, но вернет -Infinity
на машине B.
Они первоначально вели себя одинаково, возвращая -324
.
Обе машины запускались с использованием той же ОС (WinXP SP3) и версии .NET(3.5 SP1). Возможно, на компьютере B появились обновления Windows, но, как известно, никаких изменений не произошло.
Что может объяснить разницу в поведении?
Подробнее о дискуссиях в комментариях:
- Процессор CPU - это 32-разрядный Intel Core Duo T2500 с частотой 2 ГГц.
- Процессор Machine B - 32-разрядный процессор Intel P4 2,4 ГГц.
- Результаты, полученные из кода, запущенного в большом приложении с использованием нескольких сторонних компонентов. Тем не менее, те же версии .exe и компонентов работают на обеих машинах.
- Печать
Math.Log10(double.Epsilon)
в простом консольном приложении на машине B печатает-324
, NOT-Infinity
- Управляющее слово FPU на обеих машинах всегда
0x9001F
(читается с помощью_controlfp()
).
UPDATE: последняя точка (управляющее слово FPU) больше не верна: использование более новой версии _controlfp() выявило разные управляющие слова, что объясняет непоследовательное поведение. (Подробнее см. Rsbarro ниже).