From 92d02e8e52cd503b45d30bc2a8f6ff87119af871 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Tue, 22 Jan 2008 10:39:21 -0500 Subject: [PATCH] Fixes bug 173042: Wrong error message for (mod 3.0 3) --- scheme/ikarus.numerics.ss | 31 +++++++++++++++++++------------ scheme/last-revision | 2 +- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/scheme/ikarus.numerics.ss b/scheme/ikarus.numerics.ss index 000b92f..03bd404 100644 --- a/scheme/ikarus.numerics.ss +++ b/scheme/ikarus.numerics.ss @@ -2846,12 +2846,7 @@ b)])) (define (div0-and-mod0 x y) - (define who 'div0-and-mod0) - (unless (integer? x) - (die who "not an integer" x)) - (unless (and (integer? y) (not (= y 0))) - (die who "not an integer" y)) - (let-values ([(d m) (div-and-mod x y)]) + (let-values ([(d m) (div-and-mod* x y 'div0-and-mod0)]) (if (> y 0) (if (< m (/ y 2)) (values d m) @@ -2861,13 +2856,25 @@ (values d m))))) (define (div0 x y) - (let-values ([(n m) (div0-and-mod0 x y)]) - n)) - + (let-values ([(d m) (div-and-mod* x y 'div0)]) + (if (> y 0) + (if (< m (/ y 2)) + d + (+ d 1)) + (if (> m (/ y -2)) + (- d 1) + d)))) + (define (mod0 x y) - (let-values ([(n m) (div0-and-mod0 x y)]) - m))) - + (let-values ([(d m) (div-and-mod* x y 'mod0)]) + (if (> y 0) + (if (< m (/ y 2)) + m + (- m y)) + (if (> m (/ y -2)) + (+ m y) + m)))) + ) (library (ikarus flonums div-and-mod) (export fldiv flmod fldiv-and-mod fldiv0 flmod0 fldiv0-and-mod0) diff --git a/scheme/last-revision b/scheme/last-revision index f9ec74e..5a57e1b 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1360 +1361