用Fortran 90編寫的程序手冊說:「所有實參和參數都是以64位精度指定的(即real*8
)。」「real * 8」是什麼意思?
根據Wikipedia,單精度對應32位精度,而雙精度對應64位精度,顯然程序使用雙精度。
但是real*8
是什麼意思?
我認爲8
意味着8位數字在小數點後面。然而,Wikipedia似乎表示單精度通常提供6-9位數,而double precision通常提供15-17位數。這是否意味着「64位精度」語句與real*8
不一致?
用Fortran 90編寫的程序手冊說:「所有實參和參數都是以64位精度指定的(即real*8
)。」「real * 8」是什麼意思?
根據Wikipedia,單精度對應32位精度,而雙精度對應64位精度,顯然程序使用雙精度。
但是real*8
是什麼意思?
我認爲8
意味着8位數字在小數點後面。然而,Wikipedia似乎表示單精度通常提供6-9位數,而double precision通常提供15-17位數。這是否意味着「64位精度」語句與real*8
不一致?
8表示數據類型使用的字節的數目。
所以一個32位整數是integer*4
沿着相同的行。
快速搜索發現this guide to Fortran data types,包括:
「真實* 4」語句指定的變量名是具有準確性的7位和的大小範圍的單精度4字節的實數10從-38到+38。幾乎所有32位計算機中的「真實」語句都與「真實* 4」語句相同。
和
「真實* 8」語句指定的變量名是具有精度的15位和從-308至10的大小範圍雙精度8字節的實數+ 308。幾乎在所有32位計算機中,「雙精度」語句與「real * 8」語句相同。
的星形符號(如TYPE*n
被調用)是如果與其它TYPE
比CHARACTER
使用非標準的Fortran構建體。
如果應用於字符類型,它創建的n
字符的數組(或n
字符的字符串)。
如果應用於其他類型,它將以字節爲單位指定存儲大小。在Fortran 90+中應該避免任何代價,其中引入了類型的概念。指定存儲大小將創建不可移植的應用程序。
現在在Fortran中至少有4種指定精度的方法。
前面已經回答了,real*8
指定的字節數。它已經過時了,但應該是安全的。
新的方法是用「種」。應該使用內在函數來獲得具有所需精度的那種。由於不同的編譯器使用不同的值,因此按具體的數值指定種類是有風險的。
另一種方法是使用指定的類型ISO_C_BINDING的。This question討論了整數的類型系統 - 它與實數非常相似。
更新:ISO環境模塊的Fortran 2008擴展現在更受支持。所以,如果你使用'ISO_FORTRAN_ENV'你將有機會獲得樣的價值觀,通過位數指定實數和整數類型(例如,'實(real32)::'和'實(real64)::')作爲一個標準的便攜式按存儲大小指定類型的方式。 –
-1喬恩斯基特通過從古老和誤導參考引用回答一個Fortran問題。這個問題的其他答案顯示了對現代Fortran的更好理解。 –
@HighPerformanceMark:也許你可以給我一個更有用的鏈接,然後改變呢?我當然不會聲稱我稍微懂行的Fortran,但答案(即8個代表的字節數),實際上是不正確或具誤導性的核心是什麼? –