I Modulo M에 가장 작은 양의 정수를 어떻게 찾을 수 있습니까?
문제
나는 각도를 각도로 유지하는 변수를 가지고 있으며, 이는 양수와 부정적 일 수 있습니다. 이제이 숫자가 0에서 360 사이인지 확인해야합니다. 숫자는 두 배입니다.
그렇게하기위한 좋은 알고리즘은 무엇입니까? 마이너스 숫자는 여전히 음수이기 때문에 단순히 각도 % 360을 수행하는 것은 작동하지 않습니다. 보너스는 가장 작은 알고리즘 (일명 코드 골프)을 가리 킵니다.
편집하다
분명히 이것은 다른 언어에서 다릅니다. ActionScript 및 JavaScript에서 Modulo는 +m과 -m 사이의 숫자를 반환합니다.
(-5) % 360 = -5
해결책
d = ((d % 360) + 360) % 360;
Modulo가 -359에서 359 사이의 가치를 제공하면 작동합니다.
나는 개인적으로 이것을 죄처럼 못 생겼기 때문에 이것을 별도의 기능에 넣었습니다.
def mymodulo(n,m):
return ((n % m) + m) % m;
- 첫 번째 모듈로는 -359에서 359까지의 값을 제공합니다.
- 추가는 1에서 719 사이의 무언가에 달합니다.
- 두 번째 모듈로는이를 원하는 범위, 0 ~ 359로 가져옵니다.
코드 골프의 경우, Python의 Newline을 포함한 29 자 :
def f(n,m):return((n%m)+m)%m
파이썬이 실제로 필요한 것은 아닙니다. (-5)%360
그 언어로 355를 제공합니다 :-)
다른 팁
angle - 360 * floor(angle/360)
어떤 언어? 모듈로는 또한 긍정적 인 반환을 받아야합니다.
루비:
>> -5 % 360
=> 355
파이썬 :
>>> -5 % 360
355
이것이 어떤 언어로든 작동하지 않는다면, 가장 간단한 방법은 솔루션이 0과 해당 숫자 사이에있을 때까지 모듈로의 오른쪽에있는 숫자를 추가하거나 빼는 것입니다.
제휴하지 않습니다 StackOverflow