如何在Lua中实现C#的Math.IEEERemainder?

我正在尝试在Lua中复制Math.IEEERemainder(在C#中)的行为。 我知道我可以始终从头开始编写,但如果有一些内置功能,我会尽量避免它。

我已经尝试使用%操作符和math.fmod。 它们中没有一个的行为相同。

例如:

Math.IEEERemainder(3.02.0)// -13.02.0-1
math.fmod3.02.0-1
点赞
用户6834680
用户6834680
function IEEERemainder(x, y)
   y = y + 0.0
   local q1 = math.floor(x/y)  // 对 x/y 取下整
   local q2 = math.ceil(x/y)   // 对 x/y 取上整
   local r1 = x - y * q1      // 计算余数
   local r2 = x - y * q2
   local d1 = math.abs(r1)     // 取 r1 的绝对值
   local d2 = math.abs(r2)     // 取 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
2018-11-07 08:50:34