Я использую следующий фрагмент кода и при некоторых загадочных обстоятельствах результат сложения не является, как это должно быть:добавить два двойных дал неправильный результат
double _west = 9.482935905456543;
double _off = 0.00000093248155508263153;
double _lon = _west + _off;
// check for the expected result
Debug.Assert(_lon == 9.4829368379380981);
// sometimes i get 9.48293685913086 for _lon (which is wrong)
Я использую некоторые собственные библиотеки DLL в моем приложении, и я подозреваю, что некоторые DLL несет ответственность за этот «просчет», но мне нужно выяснить, какой из них. Может ли кто-нибудь дать мне подсказку, как выяснить корень моей проблемы?
То, что я говорю здесь, относится к удваивать, а также: http://stackoverflow.com/questions/ 1193554/problem-with-float-in-objective-c/1193607 # 1193607 –
Корень проблемы вызван неправильной настройкой точности с плавающей запятой. Кто-то устанавливает точность с плавающей точкой в 24 бита, и это приводит к неправильному вычислению. Использование _fpreset или _controlfp (из DLL среды выполнения MSVC) может исправить это, но по-прежнему остается загадкой, которая устанавливает эту точность в первую очередь? –