Print

Print


I apologise for the errors in the program source.
I am not sure how that happened when cutting and pasting.

The program below has been corrected.

Cheers

Ian Chivers
-----Original Message-----
From: Fortran 90 List [mailto:[log in to unmask]] On Behalf Of
Ian Chivers
Sent: 18 January 2005 15:44
To: [log in to unmask]
Subject: Real literal constants

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