0

對於我確定性的物理引擎,我需要確認C#中的雙打計算在多個平臺上足夠一致。有誰知道下列功能在結果上有多少差異?在我的計算機作爲Windows 32位應用程序,這些都是結果(注:僞代碼):跨多個平臺的雙數學一致嗎?

double x = 123.123; 
x * 2 = 246.246 
Math.Pow (x, 2) = 15159.273129 
Math.Sqrt (x) = 11.0960803890383 
Math.Sin (x) = -0.56537391969734 

我仍然不知道,如果同樣的結果會變成了在其他平臺或其他語言(我使用C#)。如果需要更多信息,我會盡快提供。如果有任何人有知識或有時間幫助測試其他平臺上的計算,請幫助我克服這種不確定性。

+0

這不是一個完全重複的內容,但是您可以從[跨平臺浮點合併]中的問題和答案中獲得一些見解(http://stackoverflow.com/questions/20963419/cross-platform-floating-point-consistancy )。 – Simon 2015-02-10 02:57:14

+0

http://stackoverflow.com/questions/28389634/is-double-math-deterministic-enough-for-physics-simulations http://stackoverflow.com/questions/7365790/how-can-floating-point-calculations- be-made-deterministic http://stackoverflow.com/questions/20963419/cross-platform-floating-point-consistancy – 2015-02-10 03:36:13

+0

哦,謝謝。我會檢查這些鏈接。 – JPtheK9 2015-02-10 05:12:02

回答

0

C#標準ECMA-334中說過11.1.6浮點類型「浮點運算可以以比操作的結果類型更高的精度執行」。

鑑於這種規則,你無法確定在任何地方都能得到完全相同的答案。 「can」意味着某些實現可能使用比其他實現更高的精度,用於相同的計算。

即使測試顯示當前的所有實現在一系列輸入中對所有計算都有相同的答案,但任何平臺上的下一個編譯器發行版都可能會改變這種情況。如果你真的需要相同的結果,你需要選擇一個圖書館或類似的承諾相同的結果。

計算結果對輸入的小變化的敏感程度有所不同。極端情況下,模擬一些物理系統,如天氣,輸入的微小變化可能會擴大到結果的巨大變化。

獲得對模擬行爲的感覺的一種方法是故意通過例如擾動來擾動某些值。一部分在1e15。這會改變結果嗎?但是,總會有一些投入會導致比其他投資更不穩定的風險。

+0

哦,謝謝你的信息。我只需要足夠的準確性,但差異不會顯而易見。計算結果的最大值可能有什麼不同?我只需要它足夠準確的視頻遊戲。 – JPtheK9 2015-02-10 03:13:04

+0

這將非常依賴於你在做什麼計算。 – 2015-02-10 03:16:21

+0

您認爲上面列出的計算結果是否可以?我估計在單場比賽中每場比賽大約有720萬。 – JPtheK9 2015-02-10 04:07:02