[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Nitpick with FLOOR etc.



 | Date: Sun, 17 Jul 2005 22:59:12 -0700 (PDT)
 | From: bear <bear@xxxxxxxxx>
 | 
 | One thing that is clear from inspecting code that actually
 | uses FLOOR, CEILING, etc, is that there is a very strong
 | usage pattern; the procedure inexact->exact is almost ALWAYS
 | called on the result.

Originally, I was going to propose changing ROUND, etc to return
exacts; but an inexact FLOOR was needed to avoid exact vs inexact
range problems in extending MODULO to the reals:

(define (modulo x1 x2)
  (if (and (integer? x1) (integer? x2))
      (integer-modulo x1 x2)
      (- x1 (* x2 (floor (/ x1 x2))))))

 | I think standard library macros ought to capture and standardize
 | this usage.
 | 
 | (xfloor x) <==> (inexact->exact (floor x))
 | (xceiling x) <==> (inexact->exact (ceiling x)
 | (xround x) <==> (inexact->exact (round x))

Why macros when procedures would be equivalent?

Also, is the prefixed `x' for exact; wouldn't `e' be more Schemely?