Fortran的數(shù)字精度

2018-12-12 14:24 更新

我們已經(jīng)討論了,在舊版本的Fortran,有兩個真正的類型:默認的實型和雙精度型。

然而,F(xiàn)ortran語言90/95提供了真實和整數(shù)數(shù)據(jù)類型通過一種 specifie精確的控制。

那種屬性

不同類型的數(shù)字是計算機內(nèi)部存儲方式不同。 那種屬性允許您指定一個數(shù)字在內(nèi)部存儲。例如,

real, kind = 2 :: a, b, c
real, kind = 4 :: e, f, g
integer, kind = 2 :: i, j, k
integer, kind = 3 :: l, m, n

在上述聲明中,實變量E,F(xiàn)和g具有比真實變量a,b和c更精確。整數(shù)變數(shù)l,m和n,可以存儲較大的值,并具有用于存儲比整數(shù)變量I,J和k多個數(shù)字。雖然這是依賴于機器。

program kindSpecifier
implicit none

   real(kind = 4) :: a, b, c
   real(kind = 8) :: e, f, g
   integer(kind = 2) :: i, j, k
   integer(kind = 4) :: l, m, n
   integer :: kind_a, kind_i, kind_e, kind_l
   
   kind_a = kind(a)
   kind_i = kind(i)
   kind_e = kind(e)
   kind_l = kind(l)
   
   print *,'default kind for real is', kind_a
   print *,'default kind for int is', kind_i
   print *,'extended kind for real is', kind_e
   print *,'default kind for int is', kind_l
   
end program kindSpecifier

當你編譯和執(zhí)行上面的程序它產(chǎn)生以下結(jié)果:

default kind for real is 4
default kind for int is 2
extended kind for real is 8
default kind for int is 4

查詢變量的大小

有許多內(nèi)在的功能,使您可以詢問數(shù)字的大小。

例如,BIT_SIZE(?。?/b>內(nèi)部函數(shù)指定用于存儲的位數(shù)。對于實數(shù), 精度(x)的內(nèi)部函數(shù),返回的精度小數(shù)位數(shù),而范圍(x)的內(nèi)部函數(shù)返回指數(shù)的十進制范圍內(nèi)。

program getSize
implicit none

   real (kind = 4) :: a
   real (kind = 8) :: b
   integer (kind = 2) :: i
   integer (kind = 4) :: j

   print *,'precision of real(4) =', precision(a)
   print *,'precision of real(8) =', precision(b)
   
   print *,'range of real(4) =', range(a)
   print *,'range of real(8) =', range(b)
   

   print *,'maximum exponent of real(4) =' , maxexponent(a)
   print *,'maximum exponent of real(8) =' , maxexponent(b)
  
   print *,'minimum exponent of real(4) =' , minexponent(a)
   print *,'minimum exponent of real(8) =' , minexponent(b)
   
   print *,'bits in integer(2) =' , bit_size(i)
   print *,'bits in integer(4) =' , bit_size(j)
   
end program getSize

當你編譯和執(zhí)行上面的程序它產(chǎn)生以下結(jié)果:

precision of real(4) = 6
precision of real(8) = 15
range of real(4) = 37
range of real(8) = 307
maximum exponent of real(4) = 128
maximum exponent of real(8) = 1024
minimum exponent of real(4) = -125
minimum exponent of real(8) = -1021
bits in integer(2) = 16
bits in integer(4) = 32

獲取種類值

Fortran語言提供了兩個內(nèi)部函數(shù)來獲得一種價值整數(shù)和實數(shù)的精度要求:

  • selected_int_kind(r)的
  • selected_real_kind([P,R])

該selected_real_kind函數(shù)返回一個整數(shù),是必要的一個給定的小數(shù)精度p和小數(shù)指數(shù)范圍r的那種類型的參數(shù)值。小數(shù)精度是顯著的位數(shù),而小數(shù)指數(shù)范圍規(guī)定了最小和最大可表示數(shù)。因此,該范圍是從10-R 10 + R。

例如,selected_real_kind(P = 10,R = 99)返回需要10精確到小數(shù)點的那種價值,射程至少10-99到10 + 99。

program getKind
implicit none

   integer:: i
   i = selected_real_kind (p = 10, r = 99) 
   print *,'selected_real_kind (p = 10, r = 99)', i
   
end program getKind

當你編譯和執(zhí)行上面的程序它產(chǎn)生以下結(jié)果:

selected_real_kind (p = 10, r = 99) 8

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號