.NET Math.Log10 () ведет себя по-разному на разных машинах

Я обнаружил, что запуск

Math.Log10(double.Epsilon) 

вернет примерно -324 на машине A, но вернет -Infinity на машине B.

Они изначально поступил так же, вернув -324 .

Обе машины запускались с одной и той же ОС (WinXP SP3) и версией .NET (3.5 SP1). Возможно, на машине B были обновления Windows, но в остальном никаких изменений не произошло.

Чем может объясняться разница в поведении?

Более подробная информация из обсуждений в комментариях:

  • Машина A CPU - 32-битный Intel Core Duo T2500 2 ГГц
  • Machine B CPU - 32-битный Intel P4 2,4 ГГц
  • Результаты, полученные при выполнении кода в большом приложении с использованием нескольких сторонних компонентов. Однако на обеих машинах работают одинаковые .exe и компоненты.
  • Печать Math.Log10 (double.Epsilon) в простом консольном приложении на машине B печатает -324 , НЕ -Infinity
  • Управляющее слово FPU на обеих машинах всегда 0x9001F (читается с помощью _controlfp () ).

ОБНОВЛЕНИЕ: последняя точка (управление FPU word) больше не соответствует действительности: использование более новой версии _controlfp () выявило различные контрольные слова, что объясняет непоследовательное поведение. (Подробности см. В ответе rsbarro ниже.)

32
задан Johannes Petzold 16 August 2011 в 23:32
поделиться