diff --git a/lib/scheme/extras.scm b/lib/scheme/extras.scm index 6629c725..89f06b2e 100644 --- a/lib/scheme/extras.scm +++ b/lib/scheme/extras.scm @@ -42,7 +42,7 @@ ;; Adapted from Bawden's algorithm. (define (rationalize x e) (define (sr x y return) - (let ((fx (inexact->exact (floor x))) (fy (inexact->exact (floor y)))) + (let ((fx (floor x)) (fy (floor y))) (cond ((>= fx x) (return fx 1)) @@ -50,12 +50,10 @@ (sr (/ (- y fy)) (/ (- x fx)) (lambda (n d) (return (+ d (* fx n)) n)))) (else (return (+ fx 1) 1))))) - (if (exact? x) - (let ((return (if (negative? x) (lambda (num den) (/ (- num) den)) /)) - (x (abs x)) - (e (abs e))) - (sr (- x e) (+ x e) return)) - x)) + (let ((return (if (negative? x) (lambda (num den) (/ (- num) den)) /)) + (x (abs x)) + (e (abs e))) + (sr (- x e) (+ x e) return))) (define (square x) (* x x)) diff --git a/tests/r7rs-tests.scm b/tests/r7rs-tests.scm index dad40489..256db0fe 100644 --- a/tests/r7rs-tests.scm +++ b/tests/r7rs-tests.scm @@ -561,7 +561,7 @@ (test 7 (round 7)) (test 1/3 (rationalize (exact .3) 1/10)) -;; (test #i1/3 (rationalize .3 1/10)) ; inexact +(test #i1/3 (rationalize .3 1/10)) (test 1.0 (exp 0)) (test 20.0855369231877 (exp 3)) diff --git a/vm.c b/vm.c index 0a33e1d2..7cf3cd2b 100644 --- a/vm.c +++ b/vm.c @@ -1861,7 +1861,7 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) { else if (sexp_ratiop(_ARG1)) _ARG1 = sexp_make_flonum(ctx, sexp_ratio_to_double(_ARG1)); #endif - else if (! sexp_flonump(_ARG1)) + } else if (! sexp_flonump(_ARG1)) sexp_raise("exact->inexact: not a number", sexp_list1(ctx, _ARG1)); #endif break;