I have a query regarding real literal constants
when reading data from a file or the terminal.
I can't find anything in the standard that covers this issue, only
in the context of real literal constants in a program.
Consider the following program
program ch1310
implicit none
INTEGER , PARAMETER :: Long=SELECTED_REAL_KIND(15,307)
integer , parameter :: longi = selected_int_kind(15)
REAL (Long) :: R1
real :: x1
REAL (Long) :: R2=0.01_long
real :: x2=0.01
read *,x1
read *,r1
print *,x1
print *,x2
print *,r1
print *,r2
print *,bitpattern32(x1)
print *,bitpattern32(x2)
print *,bitpattern64(r1)
print *,bitpattern64(r2)
contains
function bitpattern32(x)
implicit none
real , intent(in) :: x
character*32 :: bitpattern32
integer :: i,j
bitpattern32=' '
i=transfer(x,i)
Jloop : &
DO J=0,31
IF (BTEST(i,J)) THEN
bitpattern32(32-J:32-J)='1'
ELSE
bitpattern32(32-J:32-J)='0'
END IF
END DO Jloop
end function bitpattern32
function bitpattern64(x)
implicit none
real (long) , intent(in) :: x
character*64 :: bitpattern64
integer (longi) :: i,j
bitpattern64=' '
i=transfer(x,i)
Jloop : &
DO J=0,64
IF (BTEST(i,J)) THEN
bitpattern64(64-J:64-J)='1'
ELSE
bitpattern64(64-J:64-J)='0'
END IF
END DO Jloop
end function bitpattern64
end program ch1310
And input of
0.01
0.01
With the second read I do not need to add _long to the external data
to get the higher precision. Is this standard conforming?
Cheers
Ian Chivers
|