2012-11-14 37 views
1
變量聲明

我想讀Fortran語言編寫的90.它例如變量聲明代碼:(實(RA))在Fortran語言

real(ra) :: X 

我一直沒能找到在這個代碼中可以引用ra。我認爲這將是像real(kind=8)有人可以解釋這個給我嗎?

回答

3

real(ra) :: X 

就像

real(kind=8) 

事實上,它是,如果RA = 8同樣的事情! kind =在這裏是可選的。

至於找到它將是一個參數。它可能與上面的聲明在同一個例程中,它可能在例程使用的模塊中,或者我認爲它可能在例程中包含的文件中。可能有不同的選擇,但它會以某種方式在範圍內。

那麼爲什麼不使用第二種形式呢?這是因爲類型號碼不是可移植的,並且因編譯器和編譯器而異 - 例如,

[[email protected] stackoverflow]$ cat kind.f90 
Program real_kinds 

    Implicit None 

    Real(8) :: a 

End Program real_kinds 
[[email protected] stackoverflow]$ gfortran kind.f90 
[[email protected] stackoverflow]$ nagfor kind.f90 
NAG Fortran Compiler Release 5.3.1 pre-release(904) 
Warning: kind.f90, line 7: Unused local variable A 
Error: kind.f90, line 5: KIND value (8) does not specify a valid representation method 
Errors in declarations, no further processing for REAL_KINDS 
[NAG Fortran Compiler error termination, 1 error, 1 warning] 

因此,最好使用與selected_real_kind固有的初始化參數指定類型:

[[email protected] stackoverflow]$ cat kind.f90 
Program real_kinds 

    Implicit None 

    Integer, Parameter :: wp = Selected_real_kind(12, 70) 

    Real(wp) :: a 

    Write(*, *) Kind(a) 

End Program real_kinds 
[[email protected] stackoverflow]$ gfortran kind.f90 
[[email protected] stackoverflow]$ ./a.out 
      8 
[[email protected] stackoverflow]$ nagfor kind.f90 
NAG Fortran Compiler Release 5.3.1 pre-release(904) 
[NAG Fortran Compiler normal termination] 
[[email protected] stackoverflow]$ ./a.out 
2 

可能會做你想要什麼。到selected_real_kind常見的替代方案是

Integer, Parameter :: wp = Kind(1.0d0) 

因此,在總結它是一樣的,如果用心做它更便於攜帶的,只是更好。

(最後我真的應該說是一種價值需要沒有任何關係的字節數用於存儲變量)

+0

你可以採取另一種道路是'使用iso_fortran_env'。使用F2008標準,這使得(除其他外)分別提供參數「real32」,「real64」和「real128」,分別對應於編譯器的4,8和16字節實型的類型參數,或負數如果不支持。還有一個'real_kinds'數組包含支持的種類。 – sigma