如何找到与i modulo m一致的最小正整数?

时间:2009-11-16 03:26:31

标签: math modulo

我有一个变量,它保持一个角度,以度为单位,可以是正数也可以是负数。我现在需要确保此数字仅在0到360之间。这个数字是双倍的。

这样做的好算法是什么?简单地做角度%360不起作用,因为负数最终仍然是负数。奖金指向最小的算法(又名Code Golf)。


修改

显然,这在不同的语言中是不同的。在ActionScript和JavaScript中,modulo将返回+ m和-m之间的数字:

(-5) % 360 = -5

3 个答案:

答案 0 :(得分:3)

d = ((d % 360) + 360) % 360;
如果modulo为您提供介于-359和359之间的值,则

将起作用。

我个人把它放在一个单独的功能中,因为它和罪一样丑陋。

def mymodulo(n,m):
    return ((n % m) + m) % m;
  • 第一个模数为您提供-359到359之间的值。
  • 增加了1到719之间的东西。
  • 第二个模数将其带回到你想要的范围,0到359。

对于代码高尔夫,29个字符,包括Python中的换行符:

def f(n,m):return((n%m)+m)%m

并不是说Python真的需要它:(-5)%360用这种语言给你355: - )

答案 1 :(得分:3)

angle - 360 * floor(angle/360)

答案 2 :(得分:0)

用什么语言? Modulo也应该返回正面,

红宝石:

>> -5 % 360
=> 355

的Python:

>>> -5 % 360
355

如果这不能用于任何语言,最简单的方法是在模数的右侧添加或减去数字,直到解决方案介于零和包含该数字之间。