我有是找到在一個圖上的路徑,並輸出該累積重量的程序。圖形中的所有邊都有一個浮點形式的單個權重爲0到100,最多有2個小數位。0 + 0 + 0 ... + 0!= 0
在Windows/Visual Studio 2010中,對於包含0權重的邊的特定路徑,它輸出正確的總權重爲0.但是,在Linux/GCC上,程序說路徑的權重爲2.35503e-38
。我曾經有過由浮點數造成的瘋狂錯誤的豐富經驗,但是0 + 0何時會等於0以外的任何東西?
我認爲導致這的唯一的事情是程序沒有把一些權重爲整數,使用隱式強制將它們添加到總量。但是0 + 0.0f仍然等於0.0f! 作爲一個快速解決方案,我減少總數爲0時小於0.00001,這足以滿足我的需要,現在。但是什麼vodoo導致這個?
注:我100%確信,沒有在圖中的權重超過我所提到的範圍內,所有在這個特殊的路徑中的權重都爲0
編輯:爲了詳細,我已經嘗試從文件中讀取權重並手動將它們設置爲代碼,等於0.0f除了將它們添加到總數之外,沒有其他操作在其上執行。
你能構建一個最小的測試用例嗎? – 2012-04-24 18:22:33
@OliCharlesworth這是我一直在努力做到的,迄今沒有運氣。相關代碼的數量太多,但我會繼續嘗試在較小範圍內重現該錯誤。我希望在這背後會有明顯的推理。 – 2012-04-24 18:24:28
我會建議你看看機器epsilon的定義。這似乎是什麼導致你的錯誤在這裏。 – andre 2012-04-24 18:28:15