2013-05-21 62 views

回答

5

您應該會由不同的編譯器編譯相同的程序之間的微小差異。有限精度算術不遵守我們對實數所期望的規則。因此,如果編譯器改變操作順序,結果可能會略有不同。

這就是說,gfortran 4.1是很老的是過時的點。我不會使用早於4.3的gfortran版本。我強烈建議升級。

+0

謝謝。簡短的答案是我無法升級它。我得到的數字(例如)是-8.442167043685913E-003對-8.442166328430176E-003。這種差異是否如你所描述的那麼小? – Yotam

+0

如果在分配給雙精度變量之前以單精度完成計算,那麼這種差異是合理的。它僅在小數點第六位有所不同,這就是你所期望的單精度。如果以雙精度完成,它比典型的大,但仍然可能,具體取決於... –

1

注意,很可能你的真正價值是一個32位浮點數字,而雙精度是64位。我懷疑結果的差異是由於兩個編譯器在通過real值時填充了double precision變量中的額外位的方式不同。但是,Fortran real的默認大小取決於編譯器,可以通過編譯器選項進行設置,因此請檢查文檔和編譯選項。

double precision現已被棄用,但需要提供比默認值更高的精度real,儘管連續的Fortran標準沒有提供多高的精度。期望大多數計算機上的大多數編譯器默認使用64位的double precision是合理的,但您可能不想按合理期望對抵押進行押注。

+0

雙精度現在已被棄用?我應該用什麼來代替? – Matt

+4

我傾向於使用那種。最近在內部模塊iso_fortran_env中定義的參數(例如'real64','int32')。如果您的編譯器尚未提供此功能,請查看函數'selected_real_kind'以及它如何使用。 –

相關問題