我有一個FORTRAN代碼,我需要在服務器上運行。我注意到兩臺機器的結果有點不同。縱觀它,我瞭解到差異從返回real
值的函數變爲double precision
變量。在本地機器上,我使用舊編譯器(gnu f95 4.1.2),並在遠程機器上使用ifort。FORTRAN應該從``real``轉換爲``double precision``會受到編譯器的影響嗎?
回答
您應該會由不同的編譯器編譯相同的程序之間的微小差異。有限精度算術不遵守我們對實數所期望的規則。因此,如果編譯器改變操作順序,結果可能會略有不同。
這就是說,gfortran 4.1是很老的是過時的點。我不會使用早於4.3的gfortran版本。我強烈建議升級。
注意,很可能你的真正價值是一個32位浮點數字,而雙精度是64位。我懷疑結果的差異是由於兩個編譯器在通過real
值時填充了double precision
變量中的額外位的方式不同。但是,Fortran real
的默認大小取決於編譯器,可以通過編譯器選項進行設置,因此請檢查文檔和編譯選項。
double precision
現已被棄用,但需要提供比默認值更高的精度real
,儘管連續的Fortran標準沒有提供多高的精度。期望大多數計算機上的大多數編譯器默認使用64位的double precision
是合理的,但您可能不想按合理期望對抵押進行押注。
雙精度現在已被棄用?我應該用什麼來代替? – Matt
我傾向於使用那種。最近在內部模塊iso_fortran_env中定義的參數(例如'real64','int32')。如果您的編譯器尚未提供此功能,請查看函數'selected_real_kind'以及它如何使用。 –
- 1. C++編譯器從double轉換爲int
- 2. 編譯器的編譯可能會影響編譯的程序?
- 3. C++ double precision/precision
- 4. 評論會影響編譯時間嗎?
- 5. 將C#double轉換爲Pascal real
- 6. C#預編譯會影響行號嗎?
- 7. C#Double不受Math.Round影響 - 爲什麼?
- 8. 日誌應該受到國際化的影響嗎?
- 9. 交叉編譯會影響應用程序的性能嗎?
- 10. 重新編譯編譯器對編譯後的代碼有影響嗎?
- 11. z-index爲什麼會受到變換的影響?
- 12. 爲什麼更改通過JavaScript的樣式會受到CSS轉換的影響
- 13. gcc編譯器優化受影響的代碼
- 14. double和precision
- 15. float or double precision
- 16. ostream double precision
- 17. 爲什麼常量的值會影響HLSL着色器編譯?
- 18. 將double轉換爲BigDecimal並設置BigDecimal Precision
- 19. 您使用AWSDBProxy嗎?擴展時性能會受到影響嗎?
- 20. SQL將real轉換爲INT,可以嗎?
- 21. 當我加入了父表中的結果,它會影響一個項目,它應該不會受到影響
- 22. std :: cout會影響編譯的結果嗎?
- 23. 文字顏色不受轉換影響?
- 24. UIScrollView拖動受UIWindow轉換影響
- 25. 在C語言ARM RVCT編譯器中將double轉換爲int
- 26. java編譯器是否將Function <Double,Integer>轉換爲DoubleToIntFunction?
- 27. Xaml轉換保持現有轉換不受影響轉換
- 28. 關於從int到double的隱式轉換的編譯器警告
- 29. Python scipy/Fortran:float64,real,double?
- 30. MVVM Light工具包的性能不會受到影響嗎?
謝謝。簡短的答案是我無法升級它。我得到的數字(例如)是-8.442167043685913E-003對-8.442166328430176E-003。這種差異是否如你所描述的那麼小? – Yotam
如果在分配給雙精度變量之前以單精度完成計算,那麼這種差異是合理的。它僅在小數點第六位有所不同,這就是你所期望的單精度。如果以雙精度完成,它比典型的大,但仍然可能,具體取決於... –