我們已經(jīng)討論了,在舊版本的Fortran,有兩個(gè)真正的類(lèi)型:默認(rèn)的實(shí)型和雙精度型。
然而,F(xiàn)ortran語(yǔ)言90/95提供了真實(shí)和整數(shù)數(shù)據(jù)類(lèi)型通過(guò)一種 specifie精確的控制。
不同類(lèi)型的數(shù)字是計(jì)算機(jī)內(nèi)部存儲(chǔ)方式不同。 那種屬性允許您指定一個(gè)數(shù)字在內(nèi)部存儲(chǔ)。例如,
real, kind = 2 :: a, b, c real, kind = 4 :: e, f, g integer, kind = 2 :: i, j, k integer, kind = 3 :: l, m, n
在上述聲明中,實(shí)變量E,F(xiàn)和g具有比真實(shí)變量a,b和c更精確。整數(shù)變數(shù)l,m和n,可以存儲(chǔ)較大的值,并具有用于存儲(chǔ)比整數(shù)變量I,J和k多個(gè)數(shù)字。雖然這是依賴(lài)于機(jī)器。
例
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
當(dāng)你編譯和執(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)在的功能,使您可以詢(xún)問(wèn)數(shù)字的大小。
例如,BIT_SIZE(ⅰ)內(nèi)部函數(shù)指定用于存儲(chǔ)的位數(shù)。對(duì)于實(shí)數(shù), 精度(x)的內(nèi)部函數(shù),返回的精度小數(shù)位數(shù),而范圍(x)的內(nèi)部函數(shù)返回指數(shù)的十進(jìn)制范圍內(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
當(dāng)你編譯和執(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語(yǔ)言提供了兩個(gè)內(nèi)部函數(shù)來(lái)獲得一種價(jià)值整數(shù)和實(shí)數(shù)的精度要求:
該selected_real_kind函數(shù)返回一個(gè)整數(shù),是必要的一個(gè)給定的小數(shù)精度p和小數(shù)指數(shù)范圍r的那種類(lèi)型的參數(shù)值。小數(shù)精度是顯著的位數(shù),而小數(shù)指數(shù)范圍規(guī)定了最小和最大可表示數(shù)。因此,該范圍是從10-R 10 + R。
例如,selected_real_kind(P = 10,R = 99)返回需要10精確到小數(shù)點(diǎn)的那種價(jià)值,射程至少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
當(dāng)你編譯和執(zhí)行上面的程序它產(chǎn)生以下結(jié)果:
selected_real_kind (p = 10, r = 99) 8
更多建議: