在Lua中复制C#Math.IEEERemainder吗?

时间:2018-11-07 06:36:50

标签: c# lua modulo

我正在尝试在Lua中复制Math.IEEERemainder的行为(在C#中)。我知道我总是可以从头开始编写整个内容,但是如果有内置内容,我会尽量避免。

我尝试了%运算符和math.fmod。它们的行为都不一样。

例如:

Math.IEEERemainder(3.0,2.0) //-1
(3.0%2.0) --1
math.fmod(3.0,2.0) --1

1 个答案:

答案 0 :(得分:1)

function IEEERemainder(x, y)
   y = y + 0.0
   local q1 = math.floor(x/y)
   local q2 = math.ceil(x/y)
   local r1 = x - y * q1
   local r2 = x - y * q2
   local d1 = math.abs(r1)
   local d2 = math.abs(r2)
   local r = (d1 < d2 or d1 == d2 and q1 % 2 == 0) and r1 or r2
   return r == 0 and x < 0 and -r or r
end