[Haskell-cafe] Division: Is there a way to simultaneously find the quotient and remainder?
Daniel Fischer
daniel.is.fischer at googlemail.com
Sat May 14 18:00:56 CEST 2011
On Saturday 14 May 2011 15:55:15, Henning Thielemann wrote:
> Chris Smith schrieb:
> > Sure... see quotRem in the prelude.
>
> http://www.haskell.org/haskellwiki/Haskell_programming_tips#Forget_about
> _quot_and_rem
No, don't, just know when you want which.
quot and rem are what you get from the hardware (perhaps not all, but
most), thus they are faster. If speed is important and the semantics
coincide (e.g. when all operands are positive), use quot and rem.
If the semantics of quot or rem are better for your goal than those of div
or mod (example from GHC.Float.floatToDigits:
-- Using quot instead of div is a little faster and requires
-- fewer fixup steps for negative lx.
let lx = p - 1 + e0
k1 = (lx * 8651) `quot` 28738
), use quot or rem.
div and mod have the better semantics for most use-cases, so they should be
what one normally uses, but there are cases where you want quot and rem.
For those cases, knowing them causes happiness.
More information about the Haskell-Cafe
mailing list