非整数的模数/余数函数

ren*_*ick 18 floating-point haskell modulo

rem给出了这个:

Prelude> rem 9 8
1
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

Prelude> nonIntRem 9.1 8
1.0999999999999996
Run Code Online (Sandbox Code Playgroud)

我这样实现了:

nonIntRem x y = x - (y * (fromIntegral $ truncate (x/y)))
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 在标准的Haskell库中是否已存在类似的内容?我更喜欢使用标准功能,我可能错过了它.
  2. 如果没有,这个功能在其他语言中是否有更标准的名称?也许fmod,但在这种情况下负面的行为不像mod,而是像rem一样.如果没有标准名称,你能想到这个功能更好的名字吗?
  3. 它似乎工作正常,但如果您发现此功能有问题,我想了解它.

sha*_*haf 18

你所追求的功能mod'来自Data.Fixed.

  • 是的,这很接近.但是,这有负面的mod行为,而我的函数有负面的rem行为.Prelude Data.Fixed> mod'9.1(-8)-6.9 Prelude Data.Fixed> nonIntRem 9.1(-8)1.0999999999999996 (6认同)