Hello all, After a long hiatus, and newly inspired by both peval and the videos from GHM 2011 (especially Andy's excellent talk on the importance of extensibility) I'd like to try to find more time to hack on Guile. However, before embarking on more interesting work, I'd like to submit some numerics patches that have been lingering in my personal repository for far too long. This patch set makes some cleanups and improvements to the numerics code, especially to the handling of exact rationals. Here are some examples of the visible improvements: Before: (exact->inexact (/ 1000001 (expt 10 310))) ==> 0.0 (exact->inexact (/ (expt 10 310) 1000001)) ==> +inf.0 After: (exact->inexact (/ 1000001 (expt 10 310))) ==> 1.000001e-304 (exact->inexact (/ (expt 10 310) 1000001)) ==> 9.99999000001e303 Before: (on the Yeeloong) scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 3.506000s real time, 3.145000s run time. 0.000000s spent in GC. scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 3.250000s real time, 3.140000s run time. 0.000000s spent in GC. scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 3.242000s real time, 3.141000s run time. 0.000000s spent in GC. After: scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 0.305000s real time, 0.273000s run time. 0.000000s spent in GC. scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 0.202000s real time, 0.187000s run time. 0.000000s spent in GC. scheme@(guile-user)> ,time (define r (expt 11/13 100000)) ;; 0.208000s real time, 0.190000s run time. 0.000000s spent in GC. Also, this patch set adds the user-visible procedure `round-ash' which I proposed several months ago, because its functionality was needed internally to implement proper rounding in exact->inexact for bignums. While it doesn't strictly need to be made public, it will certainly be needed to implement many kinds of inexact GOOPS numbers efficiently such as fixed-point and arbitrary-precision floats, and I suspect it has wider utility as well. I'd like to apply these patches to stable-2.0. Comments and suggestions are welcome. Mark