2012-05-08 108 views
0

我寫了一個服務器和客戶端在Java,它運行良好在我自己的筆記本電腦這是一個Windows Vista企業版,但是當我運行它甚至在其他版本的Windows,如XP(我甚至沒有改變平臺)我在程序的數學部分得到了完全相同的程序不同的結果。問題是什麼以及如何以最簡單的方式解決問題?不同的結果在不同的操作系統

如果我在Windows XP中運行它將導致爲-6.2579985891243E-310,但如果在Windows Vista商業版的結果將是這樣的一半,我不確定在Windows Vista的確切結果,因爲我無法訪問它現在運行該程序並獲得反對它的結果。

結果是通過運行正態分佈庫來計算一些值的正常密度,然後用一些其他值(所有值都在double)中減去它來進行的。使用庫IM是this

兩個OS中的體系結構是32位,並使用JDK 1.6

+1

如何圍繞SSCCE?還是需要大量的代碼? –

+0

@jcomeau_ictx是很多代碼,因此得到的值有很長的處理方式 – lonesome

+2

好的,但除非有人看到並解決了同樣的問題,否則您可能只會得到推測。 –

回答

2

的影響可能是由於在浮點舍入行爲非常細微的差別兩者。這可能是由於處理器的差異,編譯器的不同指令排序優化,數學庫實現中的錯誤等。

您不可能修復上述所有內容(即使專家正確無誤,也很難!) - so我建議你編寫你的代碼,使其不依賴於確切的浮點行爲。

。例如,而不是做在浮點數相等測試應該檢查兩個數字是在小範圍內(例如,1 * E-10)

+1

這適用於幾乎所有的編程語言,而不僅僅是Java。 –

+0

@Salman - 非常真實!儘管我希望人們用Java更頻繁地遇到它,因爲Java被部署到如此衆多的不同平臺的簡單後果 – mikera

相關問題