fix estimate of order of magnitude for ~r

This commit is contained in:
Ryan Culpepper 2013-05-08 12:40:32 -04:00
parent aaa9927cbb
commit 70c06e1e80

View File

@ -349,7 +349,7 @@
[normalized-max (* base normalized-min)])
(let*-values ([(N*0 e-adjust0)
(let ([e-est (- significand-precision
(inexact->exact (floor (/ (log N-abs) (log base)))))])
(estimate-order-of-magnitude N base))])
(values (* N (expt base e-est)) e-est))]
[(N* e-adjust)
(let loop ([N N*0] [e e-adjust0] [r #f])
@ -375,6 +375,16 @@
[else (values N p)]))))])
(values N* e-adjust actual-precision))))
;; estimate-order-of-magnitude : exact-positive-real integer>1 -> exact-integer
(define (estimate-order-of-magnitude N base)
(inexact->exact
(floor
;; log gives -inf.0 on exact numbers smaller than smallest positive flonum;
;; so use difference of numerator/denominator logs, since log ok even on bignums
(/ (- (log (numerator N))
(log (denominator N)))
(log base)))))
;; ----
(define (get-sign-parts N sign-mode)