浮點數的精度
real
型別的浮點數不能有任何實際值。它們可以表示一定數量的十進位制數字的實數。
FORTRAN 77 保證了兩種浮點型別,更新的標準保證了至少兩種實際型別。實變數可以宣告為
real x
double precision y
x
這裡是一個真實的預設型別,y
是一個比 x
更精確的小數精度。在 Fortran 2008 中,y
的小數精度至少為 10,小數指數範圍至少為 37。
real, parameter :: single = 1.12345678901234567890
double precision, parameter::double = 1.12345678901234567890d0
print *, single
print *, double
版畫
1.12345684
1.1234567890123457
在使用預設配置的常見編譯器中。
請注意雙精度常數中的 d0
。包含 d
而不是 e
的真實文字用於表示指數用於表示雙精度。
! Default single precision constant
1.23e45
! Double precision constant
1.23d45
Fortran 90 使用種類引入引數化 real
型別。真實型別的型別是一個名為常量或文字常量的整數:
real(kind=real_kind) :: x
要不就
real(real_kind) :: x
該宣告宣告 x
屬於 real
,具有一定的精度,具體取決於 real_kind
的值。
可以使用字尾使用特定型別宣告浮點文字
1.23456e78_real_kind
real_kind
的確切值不是標準化的,並且不同於編譯器。要查詢任何實變數或常數的型別,可以使用函式 kind()
:
print *, kind(1.0), kind(1.d0)
通常會列印
4 8
要麼
1 2
取決於編譯器。
種類數量可以通過多種方式設定:
-
單(預設)和雙精度:
integer, parameter::single_kind = kind(1.) integer, parameter::double_kind = kind(1.d0)
-
使用內在函式
selected_real_kind([p, r])
指定所需的小數精度。返回的種類具有至少p
位的精度,並且允許指數至少為r
。integer, parameter::single_kind = selected_real_kind( p=6, r=37 ) integer, parameter::double_kind = selected_real_kind( p=15, r=200 )
-
從 Fortran 2003 開始,可以通過內部模組
ISO_C_Binding
獲得預定義的常量,以確保實際型別可以與隨附的 C 編譯器的float
,double
或long_double
型別互操作:use ISO_C_Binding integer, parameter::single_kind = c_float integer, parameter::double_kind = c_double integer, parameter::long_kind = c_long_double
-
從 Fortran 2008 開始,可以通過內部模組
ISO_Fortran_env
獲得預定義的常量。這些常量提供具有特定儲存大小的實數型別use ISO_Fortran_env integer, parameter::single_kind = real32 integer, parameter::double_kind = real64 integer, parameter::quadruple_kind = real128
如果編譯器中沒有某種型別,則 selected_real_kind()
返回的值或整數常量的值為 -1
。