summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-02-24 00:43:24 +0000
committerRich Hickey <richhickey@gmail.com>2009-02-24 00:43:24 +0000
commit7de85da26926cf9350f1ee4638a32fac26208216 (patch)
tree4d6ba8b5ebc9201039dc886dcabd1f3c764f31fb
parent80f36b287a89c1773f19ef3a9866353b0281455f (diff)
mod fix [issue 23], patch from timothypratley
-rw-r--r--src/clj/clojure/core.clj14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 243bcd22..81bee135 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -1930,14 +1930,12 @@
(instance? Byte n)))
(defn mod
- "modulus of num and div."
- [num div]
- (cond
- (or (not (integer? num)) (not (integer? div)))
- (throw (IllegalArgumentException.
- "mod requires two integers"))
- (or (< num 0 div) (< div 0 num)) (+ (rem num div) div)
- :else (rem num div)))
+ "Modulus of num and div. Truncates toward negative infinity."
+ [num div]
+ (let [m (rem num div)]
+ (if (or (zero? m) (pos? (* num div)))
+ m
+ (+ m div))))
(defn ratio?
"Returns true if n is a Ratio"