From: <no...@so...> - 2002-10-15 16:51:58
|
Bugs item #620070, was opened at 2002-10-08 00:30 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=620070&group_id=4933 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Stavros Macrakis (macrakis) Assigned to: Nobody/Anonymous (nobody) Summary: rat->float loses 9 digits of precision! Initial Comment: Maxima 5.5 / gcl 2-3.6 / Windows 2000 / Athlon num: 1099511627775 $ den: 1099511627776 $ fnfd : float(num)/float(den) => 0.9999999999990905 (correct) but fnd: float(num/den) => 0.9999999403953552 That is, we're only getting 7 digits of precision when our floating point actually supports 16! The problem is in Fpcofrat1, with the value of machine- mantissa-precision, which is substituted at read-time, and is defined as: (eval-when (compile load) (defconstant machine-mantissa-precision (float-digits 1d0)) ) Apparently when Maxima was built, this evaluated to 24, not to 53 as it should have. Correcting machine-mantissa-precision to 53 and redefining fpcofrat1 with the correct value gives the correct result. Why does machine-mantissa-precision have the wrong value? Is Maxima cross-compiled for Windows? Anyway, while looking at the fpcofrat1 code, I realized that it could be simplified and optimized at the same time. Here is my code. Does someone want to look it over and check it in? ----------- The following code takes advantage of modern floating point's extended range for the common case, and Maxima's bfloat routines to simplify the (very rare) case where a numerator or denominator has more than 300 digits. ;; Convert rational number NU/D to float (defun fpcofrat1 (nu d) (if (and (< (abs nu) most-positive-double-float) (< (abs d) most-positive-double-float)) ;; Machine arithmetic is excellent (/ (float nu) d) ;; ...except in the rare case where nu or d are huge (let ((fpprec #.(+ machine-mantissa-precision 3))) (fp2flo ($bfloat (list '(rat simp) nu d)))))) ---------------------------------------------------------------------- >Comment By: Raymond Toy (rtoy) Date: 2002-10-15 12:51 Message: Logged In: YES user_id=28849 This appears to be fixed in the CVS sources. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=620070&group_id=4933 |