~ chicken-core (chicken-5) 9d8ceff12b43a6e559d8592e0e6bd72fc44185c7


commit 9d8ceff12b43a6e559d8592e0e6bd72fc44185c7
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Sep 2 04:27:14 2010 -0400
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Sep 2 04:27:14 2010 -0400

    simplifed modulo

diff --git a/library.scm b/library.scm
index b1566295..dc3cde45 100644
--- a/library.scm
+++ b/library.scm
@@ -957,18 +957,11 @@ EOF
 (define remainder 
   (lambda (x y) (- x (* (quotient x y) y))) )
 
-(define modulo
-  (let ([floor floor])
-    (lambda (x y)
-      (let ((div (/ x y)))
-	(- x (* (if (integer? div)
-		    div
-		    (let* ([fd (floor div)]
-			   [fdx (##core#inline "C_quickflonumtruncate" fd)] )
-		      (if (= fd fdx)
-			  fdx
-			  fd) ) )
-		y) ) ) ) ) )
+(define (modulo a b)			   ; copied from chibi scheme without asking Alex
+  (let ((res (- a (* (quotient a b) b))) ) ; remainder
+    (if (< b 0)
+        (if (<= res 0) res (+ res b))
+        (if (>= res 0) res (+ res b)))))
 
 (define (even? n) (##core#inline "C_i_evenp" n))
 (define (odd? n) (##core#inline "C_i_oddp" n))
Trap