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