鍍金池/ 教程/ Java/ Fortran數(shù)字精度
Fortran還原功能
Fortran關(guān)系運(yùn)算符
Fortran運(yùn)算符優(yōu)先級(jí)
Fortran基本語(yǔ)法
Fortran文件輸入輸出
Fortran嵌套select case結(jié)構(gòu)
Fortran變量
Fortran Cycle語(yǔ)句
Fortran語(yǔ)言環(huán)境設(shè)置
Fortran數(shù)據(jù)類型
Fortran數(shù)組
Fortran字符
Fortran if...else if...else 語(yǔ)句
Fortran調(diào)試程序
Fortran編程風(fēng)格
Fortran if...then語(yǔ)句結(jié)構(gòu)
Fortran嵌套循環(huán)
Fortran常量
Fortran循環(huán)
Fortran導(dǎo)出數(shù)據(jù)類型
Fortran字符串
Fortran操作函數(shù)
Fortran do...while循環(huán)結(jié)構(gòu)
Fortran內(nèi)部函數(shù)
Fortran數(shù)字精度
Fortran選擇決策
Fortran重塑函數(shù)
Fortran運(yùn)算符
Fortran構(gòu)造函數(shù)
Fortran模塊
Fortran位置函數(shù)
Fortran數(shù)字
Fortran指針
Fortran算術(shù)運(yùn)算符
Fortran exit語(yǔ)句
Fortran動(dòng)態(tài)數(shù)組
Fortran嵌套if結(jié)構(gòu)
Fortran select case結(jié)構(gòu)
Fortran向量和矩陣乘法函數(shù)
Fortran邏輯運(yùn)算符
Fortran if...then...else 結(jié)構(gòu)
Fortran教程
Fortran過(guò)程
Fortran Stop語(yǔ)句
Fortran基本輸入輸出
Fortran do循環(huán)結(jié)構(gòu)
Fortran查詢函數(shù)

Fortran數(shù)字精度

我們已經(jīng)討論過(guò)了,在舊版本的 Fortran,有兩個(gè)實(shí)型類型:默認(rèn)的實(shí)型和雙精度型。

然而,F(xiàn)ortran語(yǔ)言90/95提供了更多通過(guò)種指定精度控制實(shí)數(shù)和整數(shù)數(shù)據(jù)類型。

類型屬性

不同類型的數(shù)字都在計(jì)算機(jī)內(nèi)部存儲(chǔ)方式不同。 kind屬性允許指定一個(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和g 比實(shí)型變量 a,b 和 c 更精確。整數(shù)變數(shù)l,m 和 n,可以存儲(chǔ)較大的值,并有更多的存儲(chǔ)比整數(shù)變量I,J和k有更多位。雖然這是依賴于機(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)在的功能,用于詢問(wèn)數(shù)字的大小。

例如,bit_size(i)內(nèi)部函數(shù)指定用于存儲(chǔ)位數(shù)。對(duì)于實(shí)數(shù),precision(x)內(nèi)部函數(shù),返回小數(shù)位精度的數(shù)字,而range(x)內(nèi)部函數(shù)返回指數(shù)的十進(jìn)制范圍。

例子

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)獲得類型值整數(shù)和實(shí)數(shù)的精度:

  • selected_int_kind (r)
  • selected_real_kind ([p, r])

selected_real_kind函數(shù)返回一個(gè)整數(shù),一個(gè)給定的小數(shù)精度p 和十進(jìn)制指數(shù)范圍r 的類型的參數(shù)值。小數(shù)精度是明顯的位數(shù),而小數(shù)指數(shù)范圍規(guī)定的最小和最大可表示數(shù)。因此該范圍是從10-r 到 10+r。

例如,selected_real_kind (p = 10, r = 99) 返回所需的10精確到小數(shù)點(diǎn)后類型值,和一系列從10-99?10+99。

示例

program getKind
implicit none

   integer:: i
   i = selected_real_kind (p = 10, r = 99)上一篇:Fortran算術(shù)運(yùn)算符下一篇:Fortran動(dòng)態(tài)數(shù)組