I Modulo M에 가장 작은 양의 정수를 어떻게 찾을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1739883

  •  20-09-2019
  •  | 
  •  

문제

나는 각도를 각도로 유지하는 변수를 가지고 있으며, 이는 양수와 부정적 일 수 있습니다. 이제이 숫자가 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과 해당 숫자 사이에있을 때까지 모듈로의 오른쪽에있는 숫자를 추가하거나 빼는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top