有没有一种有效的方法可以在 C 中获得最小的非负残差模 n,其中 n 为正?

如果数字是非负数,这很容易,那么它只是一个 % n(其中 a 是非负整数)。

然而,当 a 为负时,C89 中的行为似乎是实现定义的(感谢 kennyTM)。 IE。 -2 % 11 = -2 或 9。

最佳答案

此外,在 C99 中,行为被定义为令人讨厌的行为:-2 % 11 = -2。

一般来说(即 n % mm 不是常数并且 n 的范围不受约束时),您可能无法比通常做得更好

res = ((n % m) + m) % m

将其与您平台上的以下内容进行比较可能会很有趣;一个分支可能会战胜额外的模数:
res = n % m;
if (res < 0)  res += m;

关于c - 在 C 中获得最少非负残差模 n 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2708851/

10-12 23:09