rem gives this:

Prelude> rem 9 8
1

I wanted something like this:

Prelude> nonIntRem 9.1 8
1.0999999999999996

I implemented it like this:

nonIntRem x y = x - (y * (fromIntegral $ truncate (x/y)))

My questions are:

  1. Does something like this already exist in a standard Haskell library? I'd prefer to use a standard function, and I may have missed it.
  2. If not, is there a more standard name for this function in other languages? Maybe fmod, but the behavior for negatives in this case is not like mod, but like rem. If there is no standard name, can you think of a better name for this function?
  3. It seems to work properly, but if you notice a problem with this function, I'd like to know about it.
share|improve this question
1  
Yeah, fmod is C's name for it, so frem seems like a logical extension – luqui Dec 25 '12 at 7:15
    
Also, toInteger is the only thing preventing the floating point types from being an instance of Integral... if you are okay with that hole, maybe just instantiate it and then you can call it rem (implement quotRem and you get all the floating div/mods). – luqui Dec 25 '12 at 7:18

The function you're after is mod' from Data.Fixed.

share|improve this answer
4  
Yes, this is close. However, this has the mod behavior for negatives, while my function has the rem behavior for negatives.Prelude Data.Fixed> mod' 9.1 (-8) -6.9 Prelude Data.Fixed> nonIntRem 9.1 (-8) 1.0999999999999996 – renick Dec 25 '12 at 5:35

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.