NCEPLIBS-g2  3.4.5
rdieee.f
Go to the documentation of this file.
1 
5 
14 
15  subroutine rdieee(rieee,a,num)
16 
17  real(4),intent(in) :: rieee(num)
18  real,intent(out) :: a(num)
19  integer,intent(in) :: num
20 
21  integer(4) :: ieee
22 
23  real,parameter :: two23=scale(1.0,-23)
24  real,parameter :: two126=scale(1.0,-126)
25 
26  do j=1,num
27 !
28 ! Transfer IEEE bit string to integer variable
29 !
30  ieee=transfer(rieee(j),ieee)
31 !
32 ! Extract sign bit, exponent, and mantissa
33 !
34  isign=ibits(ieee,31,1)
35  iexp=ibits(ieee,23,8)
36  imant=ibits(ieee,0,23)
37  sign=1.0
38  if (isign.eq.1) sign=-1.0
39 
40  if ( (iexp.gt.0).and.(iexp.lt.255) ) then
41  temp=2.0**(iexp-127)
42  a(j)=sign*temp*(1.0+(two23*real(imant)))
43 
44  elseif ( iexp.eq.0 ) then
45  if ( imant.ne.0 ) then
46  a(j)=sign*two126*two23*real(imant)
47  else
48  a(j)=sign*0.0
49  endif
50 
51  elseif ( iexp.eq.255 ) then
52  a(j)=sign*huge(a(j))
53 
54  endif
55 
56  enddo
57 
58  return
59  end
60 
rdieee
subroutine rdieee(rieee, a, num)
This subroutine reads a list of real values in 32-bit IEEE floating point format.
Definition: rdieee.f:16