Em JavaScript:
console.log(13 % 5);
// Expected output: 3
console.log(-13 % 5);
// Expected output: -3
Eu preciso do mesmo em Haskell. Eu fiz
:{
modulo :: Double -> Int -> Double
modulo a p =
let p' = fromIntegral p
in
if a > 0
then a - fromIntegral(p * floor(a/p'))
else a - fromIntegral(p * ceiling(a/p'))
:}
Isso parece funcionar (pelo menos encontro os mesmos resultados que os do JavaScript). Existe uma maneira melhor?
Ao contrário de rem
, deve funcionar para Double
a
:
ghci> modulo (-13.5) 5
-3.5
Isso já existe, é isso
rem :: Integral a => a -> a -> a
:Haskell tem dois "pares" de funções em relação à divisão e ao módulo:
div
emod
, que truncam em direção ao infinito negativo; equot
erem
que truncam para zero.ou para
RealFrac
tipos: