Если я запустил оператор
Math.Exp(113.62826122038274).ToString("R")
на машине с установленной .net 4.5.1, затем я получаю ответ
2.2290860617259248E+49
Однако, если я запустил ту же команду на компьютере с установленной установкой .net framework 4.5.2, тогда я получаю ответ
2.2290860617259246E+49
(т.е. окончательная цифра изменяется)
Я понимаю, что это очень незначительно в чистых числовых выражениях, но кто-нибудь знает о каких-либо изменениях, внесенных в .net 4.5.2, которые объяснят изменение?
(Я не предпочитаю один результат другому, мне просто интересно понять, почему он изменился)
Если я вывешу
The input in roundtrip format
The input converted to a long via BitConverter.DoubleToInt64Bits
Math.Exp in roundtrip format
Math.Exp converted to a long via BitConverter.DoubleToInt64Bits
тогда на 4.5.1 я получаю
113.62826122038274
4637696294982039780
2.2290860617259248E+49
5345351685623826106
а на 4.5.2 я получаю:
113.62826122038274
4637696294982039780
2.2290860617259246E+49
5345351685623826105
Итак, для одного и того же ввода я получаю другой вывод (как видно из битов, поэтому не требуется форматирование округления)
Подробнее:
Скомпилирован один раз с использованием VS2015
Обе машины, на которых я запускаю двоичные файлы, являются 64-битными
У вас установлен .net 4.5.1, другой 4.5.2
Просто для ясности: преобразование строк не имеет значения... Я получаю изменение результатов независимо от того, связано ли преобразование строк. Я упомянул об этом исключительно для демонстрации изменений.