我使用下面的代碼段,並在一些神祕的情況下,加入的結果並不像它應該是:添加兩個雙誤給出結果
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