0
我正在使用Code :: Blocks編譯gfortran的一些數字代碼。我有兩個版本的可執行文件:Debug和Release。爲什麼gfortran/gdb在調試時產生不同的數字結果?
- 調試編譯標誌:
-Jobj\Debug\ -Wall -g -c
- 版本的編譯選項:
-Jobj\Release\ -Wall -O2 -c
- GDB invokation標誌:
-nx -fullname -quiet -args
當我正常運行的代碼,無論是發佈和調試可執行文件產生相同的輸出。但是,當我運行代碼gdb
時,輸出是不同的。這似乎是由於數值計算在執行過程中產生了不同的結果。
例如,當在gdb運行一個計算的結果是7.93941842553643E-06和正常運行時是1.71006041855278E-03。更奇怪的是,一些非零結果在雙精度精度內是相同的。
我怎麼能保證輸出是一樣的,當我運行使用gdb
?使用gdb時,默認使用的是不同類型的數值計算或評估?
您必須刪除您的錯誤和未定義的行爲。哪個?誰知道沒有看到你的代碼... –
我編輯了原始問題,以反映這一事實,我相信我看到的行爲是由於在使用gdb運行代碼時計算數值的方式有所不同。 –
那麼計算如何呢? –