有没有一种有效的方法可以在 C 中获得最小的非负残差模 n,其中 n 为正?
如果数字是非负数,这很容易,那么它只是一个 % n(其中 a 是非负整数)。
然而,当 a 为负时,C89 中的行为似乎是实现定义的(感谢 kennyTM)。 IE。 -2 % 11 = -2 或 9。
最佳答案
此外,在 C99 中,行为被定义为令人讨厌的行为:-2 % 11 = -2。
一般来说(即 n % m
当 m
不是常数并且 n
的范围不受约束时),您可能无法比通常做得更好
res = ((n % m) + m) % m
将其与您平台上的以下内容进行比较可能会很有趣;一个分支可能会战胜额外的模数:
res = n % m;
if (res < 0) res += m;
关于c - 在 C 中获得最少非负残差模 n 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2708851/