浮點數的精度

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

取決於編譯器。

種類數量可以通過多種方式設定:

  1. 單(預設)和雙精度:

    integer, parameter::single_kind = kind(1.)
    integer, parameter::double_kind = kind(1.d0)
    
  2. 使用內在函式 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 )
    
  3. 從 Fortran 2003 開始,可以通過內部模組 ISO_C_Binding 獲得預定義的常量,以確保實際型別可以與隨附的 C 編譯器的 floatdoublelong_double 型別互操作:

    use ISO_C_Binding
    
    integer, parameter::single_kind = c_float
    integer, parameter::double_kind = c_double
    integer, parameter::long_kind = c_long_double
    
  4. 從 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