2012-05-09 62 views
20

用Fortran 90編寫的程序手冊說:「所有實參和參數都是以64位精度指定的(即real*8)。」「real * 8」是什麼意思?

根據Wikipedia,單精度對應32位精度,而雙精度對應64位精度,顯然程序使用雙精度。

但是real*8是什麼意思?

我認爲8意味着8位數字在小數點後面。然而,Wikipedia似乎表示單精度通常提供6-9位數,而double precision通常提供15-17位數。這是否意味着「64位精度」語句與real*8不一致?

回答

28

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」語句相同。

+9

-1喬恩斯基特通過從古老和誤導參考引用回答一個Fortran問題。這個問題的其他答案顯示了對現代Fortran的更好理解。 –

+5

@HighPerformanceMark:也許你可以給我一個更有用的鏈接,然後改變呢?我當然不會聲稱我稍微懂行的Fortran,但答案(即8個代表的字節數),實際上是不正確或具誤導性的核心是什麼? –

10

的星形符號(如TYPE*n被調用)是如果與其它TYPECHARACTER使用非標準的Fortran構建體。

如果應用於字符類型,它創建的n字符的數組(或n字符的字符串)。

如果應用於其他類型,它將以字節爲單位指定存儲大小。在Fortran 90+中應該避免任何代價,其中引入了類型的概念。指定存儲大小將創建不可移植的應用程序。

21

現在在Fortran中至少有4種指定精度的方法。

前面已經回答了,real*8指定的字節數。它已經過時了,但應該是安全的。

新的方法是用「種」。應該使用內在函數來獲得具有所需精度的那種。由於不同的編譯器使用不同的值,因此按具體的數值指定種類是有風險的。

另一種方法是使用指定的類型ISO_C_BINDING的。This question討論了整數的類型系統 - 它與實數非常相似。

+5

更新:ISO環境模塊的Fortran 2008擴展現在更受支持。所以,如果你使用'ISO_FORTRAN_ENV'你將有機會獲得樣的價值觀,通過位數指定實數和整數類型(例如,'實(real32)::'和'實(real64)::')作爲一個標準的便攜式按存儲大小指定類型的方式。 –