conversion to/from IEEE double precision



Hi, 

  I'm fairly new to Maxima, and I currently use it to prove accuracy /
correctness of floating point algorithms.

  The question I have is, is there a way to convert a rational number
to IEEE single/double precision formats and vice versa?  For example,
53! is not representable as an IEEE double, but

  53! - float(53!)

gives me 0.0 [with Maxima 5.11].  I'm expecting (perhaps naively)
float(53!) to round 53! to nearest representable IEEE double, and then
perform the subtraction exactly.  I'm guessing (from some experiments)
that float(53!) is represented as a double precision format internally.
Is there a way to convert float(53!) back to rational form?  Or more
generally, is there a routine to transform any rational number x to a
nearest representable floating point number with a given radix B and
mantissa length L, perhaps also with some exponent range E?

If not, maybe I'll write one in my spare time once I get up to speed
with Maxima / Lisp syntax...

I'm trying to convert an exact rational number x into a pair of double
precision number (a, b) such that a = nearest_ieee_double(x), and b =
nearest_ieee_double(x - a).  Such operation is very useful for 
implementing efficient moderate high precision using IEEE floating 
point hardware.

Thanks for any help.

-Yozo