是否有可能實現的Fortran非常小的數字像1E-1200
?我知道如何在python中完成它,但是我的碩士論文代碼運行速度太慢。我的主管建議我使用Fortran,但我不確定這是否是一個問題。用Fortran
用Fortran
回答
大多數Fortran編譯器支持它匹配IEEE binary128 REAL128數據格式。一些支持也與REAL80具有相似的範圍,匹配C long double。這些沒有REAL64的性能,但應該比python快得多。
C沒有指定'long double'是哪種格式,其他類型也是如此。在MSVC中,long double和double是完全一樣的。在沒有80位擴展精度的平臺中,它可能是IEEE-754雙精度或四倍精度 –
簡短的回答是肯定的。
現代編譯器通常支持所謂的四精度,一個128位的真實。訪問這種類型的便攜方式是使用ISO_FORTRAN_ENV
。下面是一個示例程序,說明如何大大小小這些數字得到:
program main
use ISO_FORTRAN_ENV, only : REAL32, REAL64, REAL128
! -- tiny and huge grab the smallest and largest
! -- representable number of each type
write(*,*) 'Range for REAL32: ', tiny(1._REAL32), huge(1._REAL32)
write(*,*) 'Range for REAL62: ', tiny(1._REAL64), huge(1._REAL64)
write(*,*) 'Range for REAL128: ', tiny(1._REAL128), huge(1._REAL128)
end program main
類型REAL32
,REAL64
和REAL128
通常被稱爲單,雙精度和四精度。更長的類型具有更大範圍的可表示數字和更高的精度。
在我的機器與gfortran 4.8,我得到:
mach5% gfortran types.f90 && ./a.out
Range for REAL32: 1.17549435E-38 3.40282347E+38
Range for REAL62: 2.2250738585072014E-308 1.7976931348623157E+308
Range for REAL128: 3.36210314311209350626E-4932 1.18973149535723176502E+4932
正如你可以看到,四精度可以表示數字小3.4E-4932
。
先前答案提示從ISO_FORTRAN_ENV使用REAL128的描述的非便攜式解決方案。你在這裏得到的是一個真實類型,其表示形式是128位,但沒有提到類型的範圍或精度。例如,一些IBM系統有128位實際類型,實際上是兩個帶偏移量指數的雙精度型。這讓你更精確,但範圍並不大。
正確的方式做,這是使用SELECTED_REAL_KIND內部函數來確定實施的一種支持所需的範圍。例如:
integer, parameter :: bigreal = SELECTED_REAL_KIND(R=1200)
real(KIND=bigreal) :: x
如果實現沒有一種真正能夠代表有正負1200的十進制指數的值,你會得到一個錯誤,否則你會得到相應的最小類。
你也可以指定在調用P =值,以表明你所需要的最小精度(十進制位數)。
- 1. 用Fortran
- 2. 用Fortran
- 3. 用Fortran的
- 4. 使用變量FORTRAN
- 5. 從Fortran調用Matlab
- 6. 如何使用Fortran
- 7. 如何使用Fortran
- 8. 將Eclipse用於Fortran
- 9. 使用MPI_Gatherv Fortran的
- 10. 在Fortran中的另一個Fortran程序中調用Fortran程序77
- 11. 使用ctypes調用FORTRAN DLL
- 12. Fortran中
- 13. 在FORTRAN
- 14. 從FORTRAN
- 15. 在FORTRAN
- 16. FORTRAN WRITE()
- 17. fortran轉換器軟件77到fortran 90
- 18. 編譯FORTRAN IV或轉換爲FORTRAN 77?
- 19. 如何鏈接Fortran exe與Fortran DLL?
- 20. 如何安裝Fortran編譯器(gcc42-fortran)
- 21. 我想編輯我的FORTRAN生成FORTRAN
- 22. 從fortran轉換成excel文件fortran(ftn95)
- 23. 這兩行Fortran代表Fortran宏嗎?
- 24. 從Fortran IV更新到Fortran 77
- 25. 將Fortran 77轉換爲Fortran 95
- 26. 使用Fortran 77編譯器編譯Fortran IV代碼
- 27. 如何在Fortran 90/95中使用Fortran 77子例程?
- 28. 的Fortran:在英特爾Fortran 64用C功能
- 29. 使用FORTRAN 90中的ran1 FORTRAN 77子程序90
- 30. 在fortran中使用pthreads
我是一個fortranner,但不過,我會檢查算法是否足夠快。改變語言並不會創造奇蹟,儘管一些循環在Python中很慢。 –
Hi @wafelos,通常情況下,當使用適當的單位系統(即原子單位https://en.wikipedia.org/wiki/Atomic_units)時,浮點數的範圍變得更窄。知道使用128個精度類型可能會減慢計算速度,因爲它們不受硬件支持,這一點很重要。 –