# [racket-dev] Racket Questions?

For the record, I've always just defined my own modulo when I need it
for floats:
; A modulo operator for floats!
(define (float-modulo p q)
(- p (* q (truncate (/ p q)))))
It doesn't properly handle negative numbers though.
David Van Horn <dvanhorn at ccs.neu.edu> writes:
>* On 9/14/12 3:36 PM, Becca MacKenzie wrote:
*>>* Hello!
*>>* So a friend of mine just started learning Racket and was wondering if
*>>* there's a particular reason why the modulo function in racket only takes
*>>* in integers? He wrote his own mod function to take in other things but
*>>* he was just wondering what the reasoning is behind this.
*>*
*>* Hi Becca,
*>*
*>* Excellent question -- I hope you don't mind that I've forwarded it to
*>* the Racket developers list for a more authoritative answer (and
*>* potentially a change to Racket).
*>*
*>* I don't believe there's any principled reason not to extend `modulo' to
*>* other kinds of numbers such as rationals and (exact) complex numbers. I
*>* worry that the idea of modulo may not be well defined for inexact
*>* numbers, but I could be wrong (inexact numbers don't obey a lot of the
*>* usual mathematical properties we're used to). I see that in
*>* Mathematica, "the arguments of Mod can be any numeric quantities, not
*>* necessarily integers". Here are some examples:
*>*
*>* http://reference.wolfram.com/mathematica/ref/Mod.html#6881
*>*
*>* Recently, Racket's GCD and LCM were extended to work on non-integer
*>* arguments, and I believe this is a similar case where the function could
*>* (and should?) be extended to work for more kinds of numbers. But I'm
*>* interested to hear what the dev list has to say on the matter.
*>*
*>* David
*>*
*>* _________________________
*>* Racket Developers list:
*>* http://lists.racket-lang.org/dev
*