18 real(4),
intent(in) :: rieee(num)
19 real,
intent(out) :: a(num)
20 integer,
intent(in) :: num
23 real,
parameter :: two23 = scale(1.0,-23)
24 real,
parameter :: two126 = scale(1.0,-126)
25 integer :: iexp, imant, isign, j
30 ieee = transfer(rieee(j), ieee)
33 isign = ibits(ieee, 31, 1)
34 iexp = ibits(ieee, 23, 8)
35 imant = ibits(ieee, 0, 23)
37 if (isign .eq. 1) sign = -1.0
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)
48 elseif (iexp .eq. 255)
then
49 a(j) = sign * huge(a(j))
subroutine rdieee(rieee, a, num)
Copy array of 32-bit IEEE floating point values to local floating point representation.