F90 compiler
Double Precision
In F90, double precision can be handled in various ways.
Using Fortran KIND command
One of them is using the KIND command in F90.
Example Program: |
A simple example is given below: |
PROGRAM TEST_DOUBLE IMPLICIT NONE ! INTEGER, PARAMETER :: num = KIND(1.E0) INTEGER, PARAMETER :: dbl = KIND(1.D0) ! REAL(num), PARAMETER :: pi1=0.12345678901234567890_num REAL(dbl), PARAMETER :: pi2=0.12345678901234567890_dbl REAL(num), PARAMETER :: pi3=0.12345678901234567890 REAL(dbl), PARAMETER :: pi4=0.12345678901234567890 REAL*8, PARAMETER :: pi5=0.12345678901234567890 REAL*4, PARAMETER :: pi6=0.12345678901234567890 ! write(*,*)'num = KIND(1.E0)',num write(*,*)'dbl = KIND(1.D0)',dbl write(*,*)'REAL(num) :: pi=0.12345678901234567890_num',pi1 write(*,*)'REAL(dbl) :: pi=0.12345678901234567890_dbl',pi2 write(*,*)'REAL(num) :: pi=0.12345678901234567890',pi3 write(*,*)'REAL(dbl) :: pi=0.12345678901234567890',pi4 write(*,*)'REAL :: pi5=0.12345678901234567890',pi5 write(*,*)'REAL :: pi6=0.12345678901234567890',pi6 ! STOP END PROGRAM TEST_DOUBLE |
You can compile the program wthout any compiler options. |
pgf90 program.f90 |
Then the output is:
Sample Output: |
A sample output is given below: |
num = KIND(1.E0) dbl = KIND(1.D0) REAL(num) :: pi=0.12345678901234567890_num 0.1234568 REAL(dbl) :: pi=0.12345678901234567890_dbl 0.123456789012346 REAL(num) :: pi=0.12345678901234567890 0.1234568 REAL(dbl) :: pi=0.12345678901234567890 0.123456791043282 REAL*8 :: pi5=0.12345678901234567890 0.123456791043282 REAL :: pi6=0.12345678901234567890 0.1234568 |
Using compile option
Perhaps easier way is using the -r8 compiler option. pgf90 -r8 program.f90
Example Program: |
A simple example is given below: |
PROGRAM TEST_DOUBLE IMPLICIT NONE ! INTEGER, PARAMETER :: num = KIND(1.E0) INTEGER, PARAMETER :: dbl = KIND(1.D0) ! REAL(num), PARAMETER :: pi1=0.12345678901234567890_num REAL(dbl), PARAMETER :: pi2=0.12345678901234567890_dbl REAL(num), PARAMETER :: pi3=0.12345678901234567890 REAL(dbl), PARAMETER :: pi4=0.12345678901234567890 REAL*8, PARAMETER :: pi5=0.12345678901234567890 REAL*4, PARAMETER :: pi6=0.12345678901234567890 ! write(*,*)'num = KIND(1.E0)',num write(*,*)'dbl = KIND(1.D0)',dbl write(*,*)'REAL(num) :: pi=0.12345678901234567890_num',pi1 write(*,*)'REAL(dbl) :: pi=0.12345678901234567890_dbl',pi2 write(*,*)'REAL(num) :: pi=0.12345678901234567890',pi3 write(*,*)'REAL(dbl) :: pi=0.12345678901234567890',pi4 write(*,*)'REAL :: pi5=0.12345678901234567890',pi5 write(*,*)'REAL :: pi6=0.12345678901234567890',pi6 ! STOP END PROGRAM TEST_DOUBLE |
You can compile the program wthout any compiler options. |
pgf90 -r8 program.f90 |
Then the output is:
Sample Output: |
A sample output is given below: |
num = KIND(1.E0) 8 dbl = KIND(1.D0) 8 REAL(num) :: pi=0.12345678901234567890_num 0.123456789012346 REAL(dbl) :: pi=0.12345678901234567890_dbl 0.123456789012346 REAL(num) :: pi=0.12345678901234567890 0.123456789012346 REAL(dbl) :: pi=0.12345678901234567890 0.123456789012346 REAL*8 :: pi5=0.12345678901234567890 0.123456789012346 REAL :: pi6=0.12345678901234567890 0.123456789012346 |