Fortran的數(shù)字

2018-12-12 14:24 更新

Fortran中的數(shù)字由三個(gè)固有的數(shù)據(jù)類型來表示:

  • 整型
  • 房地產(chǎn)類型
  • 復(fù)雜類型

整型

整數(shù)類型只能容納整數(shù)值。下面的例子中提取,可以在通常的4字節(jié)的整數(shù)是容納最大價(jià)值:

program testingInt
implicit none

   integer :: largeval
   print *, huge(largeval)
   
end program testingInt

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

2147483647

請(qǐng)注意, 大()函數(shù)給出可由特定整數(shù)數(shù)據(jù)類型被保持的最大數(shù)目。還可以指定使用的那種符的字節(jié)數(shù)。下面的例子說明了這一點(diǎn):

program testingInt
implicit none

   !two byte integer
   integer(kind=2) :: shortval
   
   !four byte integer
   integer(kind=4) :: longval
   
   !eight byte integer
   integer(kind=8) :: verylongval
   
   !sixteen byte integer
   integer(kind=16) :: veryverylongval
   
   !default integer 
   integer :: defval
        
   print *, huge(shortval)
   print *, huge(longval)
   print *, huge(verylongval)
   print *, huge(veryverylongval)
   print *, huge(defval)
   
end program testingInt

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

32767
2147483647
9223372036854775807
170141183460469231731687303715884105727
2147483647

實(shí)型

它存儲(chǔ)浮點(diǎn)數(shù),例如2.0,3.1415,-100.876等

傳統(tǒng)上有兩種不同類型的實(shí) :默認(rèn)的實(shí)型和雙精度型。

然而,F(xiàn)ortran語(yǔ)言90/95提供了真實(shí)和整數(shù)數(shù)據(jù)類型通過一種說明,我們很快就會(huì)研究精密的控制。

下面的例子說明了如何使用真實(shí)的數(shù)據(jù)類型:

program division   
implicit none

   ! Define real variables   
   real :: p, q, realRes 
   
   ! Define integer variables  
   integer :: i, j, intRes  
   
   ! Assigning  values   
   p = 2.0 
   q = 3.0    
   i = 2 
   j = 3  
   
   ! floating point division
   realRes = p/q  
   intRes = i/j
   
   print *, realRes
   print *, intRes
   
end program division  

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

0.666666687    
0

復(fù)雜類型

這個(gè)用于存儲(chǔ)復(fù)數(shù)。一個(gè)復(fù)雜的數(shù)字有兩部分:實(shí)部和虛部。兩個(gè)連續(xù)的數(shù)字存儲(chǔ)單元存儲(chǔ)這兩個(gè)部分。

例如,該復(fù)數(shù)(3.0,-5.0)等于3.0 - 5.0i

通用功能CMPLX()創(chuàng)建一個(gè)復(fù)數(shù)。它產(chǎn)生的結(jié)果是誰(shuí)的實(shí)部和虛部是單精度,而不論輸入?yún)?shù)的類型。

program createComplex
implicit none

   integer :: i = 10
   real :: x = 5.17
   print *, cmplx(i, x)
   
end program createComplex

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

(10.0000000, 5.17000008)

下面的程序演示的復(fù)雜數(shù)字運(yùn)算:

program ComplexArithmatic
implicit none

   complex, parameter :: i = (0, 1)   ! sqrt(-1)   
   complex :: x, y, z 
   
   x = (7, 8); 
   y = (5, -7)   
   write(*,*) i * x * y
   
   z = x + y
   print *, "z = x + y = ", z
   
   z = x - y
   print *, "z = x - y = ", z 
   
   z = x * y
   print *, "z = x * y = ", z 
   
   z = x / y
   print *, "z = x / y = ", z 
   
end program ComplexArithmatic

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

(9.00000000, 91.0000000)
z = x + y = (12.0000000, 1.00000000)
z = x - y = (2.00000000, 15.0000000)
z = x * y = (91.0000000, -9.00000000)
z = x / y = (-0.283783793, 1.20270276)

該范圍大,精度和數(shù)字的大小

上整數(shù)的范圍內(nèi),精度和浮點(diǎn)數(shù)的大小取決于分配給特定的數(shù)據(jù)類型比特的數(shù)目。

下表顯示的比特整數(shù)的數(shù)量和范圍:

比特?cái)?shù)最大值原因
64 9,223,372,036,854,774,807 (2 ** 63)-1
32 2,147,483,647 (2 ** 31)-1

下表顯示比特,最小和最大的值的數(shù)目,并且為實(shí)數(shù)的精度。

比特?cái)?shù)最大值最小值精確
64 0.8E + 308 0.5E-308 15-18
32 1.7E + 38 0.3E-38 6-9

下面的例子說明這一點(diǎn):

program rangePrecision
implicit none

   real:: x, y, z
   x = 1.5e+40
   y = 3.73e+40
   z = x * y 
   print *, z
   
end program rangePrecision

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

x = 1.5e+40
    1
Error : Real constant overflows its kind at (1)
main.f95:5.12:

y = 3.73e+40
    1
Error : Real constant overflows its kind at (1)

現(xiàn)在讓我們用一個(gè)較小的數(shù)字:

program rangePrecision
implicit none

   real:: x, y, z
   x = 1.5e+20
   y = 3.73e+20
   z = x * y 
   print *, z
   
   z = x/y
   print *, z
   
end program rangePrecision

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

Infinity
0.402144760   

現(xiàn)在,讓我們看下溢:

program rangePrecision
implicit none

   real:: x, y, z
   x = 1.5e-30
   y = 3.73e-60
   z = x * y 
   print *, z
   
   z = x/y
   print *, z

end program rangePrecision

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

y = 3.73e-60
    1
Warning : Real constant underflows its kind at (1)

Executing the program....
$demo?

0.00000000E+00
Infinity

那種說明符

在科學(xué)程序設(shè)計(jì),人們往往需要知道在其上的工作正在做的硬件平臺(tái)的數(shù)據(jù)的范圍和精度。

本征函數(shù)一種()允許您運(yùn)行程序前查詢硬件的數(shù)據(jù)表示的細(xì)節(jié)。

program kindCheck
implicit none
   
   integer :: i 
   real :: r 
   complex :: cp 
   print *,' Integer ', kind(i) 
   print *,' Real ', kind(r) 
   print *,' Complex ', kind(cp) 
   
end program kindCheck

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

Integer 4
Real 4
Complex 4

您還可以檢查所有類型的數(shù)據(jù)類型:

program checkKind
implicit none

   integer :: i 
   real :: r 
   character*1 :: c 
   logical :: lg 
   complex :: cp 
   
   print *,' Integer ', kind(i) 
   print *,' Real ', kind(r) 
   print *,' Complex ', kind(cp)
   print *,' Character ', kind(c) 
   print *,' Logical ', kind(lg)
   
end program checkKind

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

Integer 4
Real 4
Complex 4
Character 1
Logical 4

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)