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