rem的作用是:
Prelude> rem 9 8
1
我想要像这样的东西:
Prelude> nonIntRem 9.1 8
1.0999999999999996
我是这样实现的:
nonIntRem x y = x - (y * (fromIntegral $ truncate (x/y)))
我的问题是:
- 类似这样的功能在标准的Haskell库中是否已经存在?我更喜欢使用标准函数,可能我已经错过了它。
- 如果没有,在其他语言中,是否有更标准的名称用于此函数?也许是fmod,但在这种情况下,负数的行为不像mod,而像rem。如果没有标准名称,您能否为此函数想到更好的名称?
- 它似乎正常工作,但如果您注意到此函数存在问题,我想知道。
fmod
是 C 语言中的名称,所以frem
看起来像是一个合理的扩展。 - luquitoInteger
是唯一防止浮点类型成为Integral
实例的东西... 如果你可以接受这个漏洞,也许只需实例化它,然后你就可以称之为rem
(实现quotRem
,你就可以得到所有浮点数的 div/mods)。 - luqui