我使用下面的代码段,并在一些神秘的情况下,加入的结果并不像它应该是:添加两个双误给出结果
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 /遇到问题时使用float-in-objective-c/1193607#1193607 – 2009-07-28 12:11:54
问题的根源是由浮点精度的错误设置引起的。有人将浮点精度设置为24位,这会导致计算错误。使用_fpreset或_controlfp(MSVC运行时DLL)可以解决这个问题,但是它仍然是设置这个精度的神秘之处吗? – 2009-07-29 15:10:23