2013-02-21 72 views
0

我正在進行蒙特卡羅(MC)模擬。我有一種方法可以從頭開始計算粒子的能量,也可以只計算舊狀態和新狀態之間的差異。爲了測試對我所做的代碼的修改,我在一步之後通過雙向計算了能量,並得到了不同的結果。這個數字很低(10^-5的規模,而總能量是10^8的規模),但我預計它會更低。有我懷疑這是一個Fortran問題兩個函數,不同的結果。疑似fortran功能

  1. 縱觀所有交互三個方面的原因,我沒有看到這兩種方式有什麼區別

  2. 值重複自己

  3. 許多的值是例如兩個(2^-14)的負冪。

我會很感激你的想法。

上述變量和計算中使用的大多數變量(如果不是全部的話)都是雙精度類型的。編譯器是gnu f95。

回答

3

雙精度有15到17位十進制數字。你的兩個計算在10^13中有一部分差別。改變真實數字的計算順序不會改變答案可以改變有限精度算術的答案。取決於計算的次數和算法的細節,這個順序的不同可能是合理的。 Fortran編譯器中的錯誤似乎不太可能......如果您仍然確信,請嘗試使用其他編譯器。

你的意思是說你正在使用GNU gfortran?如果是這樣,哪個版本?

+0

相當可能的原因。我會嘗試四倍精度,或gfortran的KIND(10),看看它是否改變。 – 2013-02-21 08:08:46

+0

在一個路由中,有100個計算的順序。在另一條路線上有幾千個。至少10,000。當我輸入f95 -v時,我得到''gcc version 4.1.2 20080704(Red Hat 4.1.2-50)''。 – Yotam 2013-02-21 08:11:46

+0

我不確定gfortran 4.1自2007年以來的版本是什麼;也許是一個RedHat定製版本。 gfortran從4.0開始,早期版本有一些bug。目前的版本是4.7。我會使用的早期版本是4.3。 – 2013-02-21 08:50:19

相關問題