Hi,

Besides the hack by Alan you might also want to think about an overflow save 
implementation for roughly:

user=> (defn roughly
         [expected-value delta]
         (let [exp-pos? (pos? expected-value)
               upper    (if (neg? delta) (- delta) delta)
               lower    (- upper)]
           (fn [tested-value]
             (if (= (pos? tested-value) exp-pos?)
               (< lower (- tested-value expected-value) upper)
               (< lower (+ tested-value expected-value) upper)))))
#'user/roughly
user=> (+ 9223372036854775803 5)
ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow 
(Numbers.java:1374)
user=> ((roughly 9223372036854775804 5) 9223372036854775803)
true
user=> ((roughly 9223372036854775804 5) 9223372036854775500)
false

Sincerely
Meikel



-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to