Как найти наименьшее положительное целое число, совпадающее с i по модулю m? - PullRequest
2 голосов
/ 16 ноября 2009

У меня есть переменная, которая содержит угол в градусах, который может быть как положительным, так и отрицательным. Теперь мне нужно убедиться, что это число от 0 до 360. Номер двойной.

Каким будет хороший алгоритм для этого? Простое выполнение угла% 360 не работает, потому что отрицательные числа остаются отрицательными. Бонус указывает на самый маленький алгоритм (он же Code Golf).


EDIT

Видимо, это отличается на разных языках. В ActionScript и JavaScript модуль по модулю вернет число от + m до -m:

(-5) % 360 = -5

Ответы [ 3 ]

3 голосов
/ 16 ноября 2009
d = ((d % 360) + 360) % 360;

будет работать, если по модулю вы получите значение от -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 на этом языке: -)

3 голосов
/ 16 ноября 2009
angle - 360 * floor(angle/360)
0 голосов
/ 16 ноября 2009

На каком языке? Модуль также должен возвращать положительное значение,

Ruby:

>> -5 % 360
=> 355

Python:

>>> -5 % 360
355

Если это не работает ни на каком языке, самым простым способом будет сложение или вычитание числа, которое будет справа от модуля, пока решение не окажется между нулем и этим числом включительно.

...