16 real(4),
intent(in) :: a(num)
17 real(4),
intent(out) :: rieee(num)
18 integer,
intent(in) :: num
21 real,
parameter :: two23 = scale(1.0,23)
22 real,
parameter :: two126 = scale(1.0,126)
24 integer :: iexp, imant, j, n
30 if (a(j) .eq. 0.)
then
32 rieee(j) = transfer(ieee, rieee(j))
37 if (a(j) .lt. 0.0)
then
38 ieee = ibset(ieee, 31)
41 ieee = ibclr(ieee, 31)
46 if (atemp .ge. 1.0)
then
48 do while (2.0**(n+1) .le. atemp)
53 do while (2.0**n .gt. atemp )
58 if (n .gt. 127) iexp = 255
59 if (n .lt. -127) iexp = 0
60 call mvbits(iexp, 0, 8, ieee, 23)
63 if (iexp .ne. 255)
then
65 atemp = (atemp / (2.0**n)) - 1.0
67 atemp = atemp * two126
69 imant = nint(atemp * two23)
74 call mvbits(imant, 0, 23, ieee, 0)
77 rieee(j) = transfer(ieee, rieee(j))
subroutine mkieee(a, rieee, num)
Copy an array of real to an array of 32-bit IEEE floating points.