본문으로 이동

모듈로

위키백과, 우리 모두의 백과사전.

컴퓨팅과 수학에서 모듈로 연산(modulo operation)은 한 숫자를 다른 숫자로 나누었을 때의 나머지 또는 부호가 있는 나머지를 반환한다. 이때 나누는 수를 연산의 모듈러스(modulus)라고 부른다.

두 양수 a와 n이 주어졌을 때, a 모듈로 n(종종 a mod n으로 축약함)은 a를 n으로 나눈 유클리드 나눗셈의 나머지이며, 여기서 a는 피제수, n은 제수이다.[1]

예를 들어, "5 mod 2"의 결과는 1이다. 왜냐하면 5를 2로 나누면 몫이 2이고 나머지가 1이기 때문이다. 반면 "9 mod 3"의 결과는 0인데, 이는 9를 3으로 나누면 몫이 3이고 나머지가 0이기 때문이다.

일반적으로 a와 n 모두 정수일 때 연산이 수행되지만, 오늘날 많은 컴퓨팅 시스템은 다른 유형의 숫자 피연산자도 허용한다. n에 대한 정수 모듈로 연산의 결과 범위는 0부터 n − 1까지이다. a가 정수라고 가정할 때, a mod 1은 항상 0이다.

a 또는 n 중 정확히 하나만 음수일 경우, 기본적인 정의는 적용되지 않으며 프로그래밍 언어마다 이러한 값들을 어떻게 정의하는지가 다르다.

정의의 변형

[편집]

수학에서 모듈로 연산의 결과는 동치류이며, 해당 류의 모든 원소는 대표원으로 선택될 수 있다. 하지만 보통은 그 류에 속하는 가장 작은 음수가 아닌 정수, 즉 유클리드 나눗셈의 나머지인 최소 양의 나머지(least positive residue)를 대표원으로 사용한다.[2] 그러나 다른 관례도 가능하다. 컴퓨터와 계산기는 숫자를 저장하고 표현하는 다양한 방법을 가지고 있으므로, 모듈로 연산의 정의는 사용하는 프로그래밍 언어나 기반 하드웨어에 따라 달라진다.

거의 모든 컴퓨팅 시스템에서, a를 으로 나눈 몫 q와 나머지 r은 다음 조건을 만족한다.

 

 

 

 

(1)

나머지가 0이 아닐 경우 부호의 모호성이 여전히 남는다. 나머지를 음수 또는 양수 중 하나로 선택할 수 있는데, 이 선택이 식 (1)을 만족시키기 위해 사용해야 하는 두 연속된 몫 중 무엇인지를 결정한다. 수론에서는 항상 양의 나머지를 선택하지만, 컴퓨팅에서 프로그래밍 언어들은 언어 자체의 특성과 a 또는 n의 부호에 따라 선택한다.[a] 예를 들어, 표준 파스칼과 ALGOL 68은 제수가 음수일 때도 양의 나머지(또는 0)를 반환하며, C90과 같은 일부 프로그래밍 언어는 n이나 a 중 하나가 음수일 때 그 동작을 구현 정의에 맡긴다(자세한 내용은 § 프로그래밍 언어별 모듈로 연산 아래의 표 참조). 일부 시스템은 a 모듈로 0을 정의하지 않지만, 어떤 시스템은 이를 a로 정의하기도 한다.

  •     몫 (q)과      나머지 (r). 피제수 (a)에 대한 함수로 표현, 절단 나눗셈(truncated division) 사용

    많은 구현체는 절단 나눗셈을 사용하며, 여기서 몫은 다음과 같이 정의된다. 여기서 는 정수 부분 함수(0 방향으로 반올림)이다. 따라서 식 (1)에 따르면, 나머지는 피제수 a와 같은 부호를 가지며 다음과 같이 2|n| − 1개의 값을 가질 수 있다.

  • 바닥 나눗셈(floored division)을 사용한 몫과 나머지

    도널드 커누스[3]는 바닥 나눗셈을 권장하며, 여기서 몫은 다음과 같이 정의된다. 여기서 는 바닥 함수(내림)이다. 따라서 식 (1)에 따르면, 나머지는 제수 n과 같은 부호를 가진다.

  • 유클리드 나눗셈(Euclidean division)을 사용한 몫과 나머지

    Raymond T. Boute[4]는 유클리드 나눗셈을 권장하며, 여기서 음수가 아닌 나머지 는 다음과 같이 정의된다. (강조 추가됨.) 이 정의하에서 몫 에 대해 다음과 같이 말할 수 있다. 여기서 sgn은 부호함수, 는 바닥 함수(내림), 그리고 , 는 유리수이다.

    동등하게, 몫 를 다음과 같이 정의할 수도 있다. 여기서 는 천장 함수(올림)이다. 따라서 식 (1)에 따르면, 나머지 은 음수가 아니다.

  • 반올림 나눗셈을 사용한 몫과 나머지

    Common Lisp와 IEEE 754는 반올림 나눗셈을 사용하며, 여기서 몫은 다음과 같이 정의된다. 여기서 round는 반올림 함수(짝수 쪽으로 반올림)이다. 따라서 식 (1)에 따르면, 나머지는 와 사이에 위치하며, 그 부호는 이 경계 내에 들어가기 위해 0의 어느 쪽에 떨어지는지에 따라 결정된다.

  • 올림 나눗셈을 사용한 몫과 나머지

    Common Lisp는 또한 올림 나눗셈을 사용하며, 여기서 몫은 다음과 같이 정의된다. 여기서 ⌈⌉는 천장 함수(올림)이다. 따라서 식 (1)에 따르면, 나머지는 제수의 반대 부호를 가진다.

피제수와 제수가 모두 양수이면 절단, 바닥, 유클리드 정의가 일치한다. 피제수가 양수이고 제수가 음수이면 절단 정의와 유클리드 정의가 일치한다. 피제수가 음수이고 제수가 양수이면 바닥 정의와 유클리드 정의가 일치한다. 피제수와 제수가 모두 음수이면 절단 정의와 바닥 정의가 일치한다.

그러나 절단 나눗셈은 항등식 을 만족한다.[5][6]

표기법

[편집]

일부 계산기에는 mod() 함수 버튼이 있으며, 많은 프로그래밍 언어도 예를 들어 mod(a, n)과 같이 유사한 함수를 가지고 있다. 일부 언어는 a % n이나 a mod n과 같이 모듈로 또는 나머지 연산자로서 "%", "mod", "Mod"를 사용하는 표현식을 지원하기도 한다.

유사한 함수가 없는 환경에서는 위에 언급된 세 가지 정의 중 하나를 사용할 수 있다.

일반적인 오류

[편집]

모듈로 연산의 결과가 피제수의 부호를 따르는 경우(절단 정의), 놀라운 실수를 초래할 수 있다.

예를 들어, 정수가 홀수인지 테스트하기 위해 나머지가 2로 나누었을 때 1과 같은지 확인하려는 경우를 생각해보자.

bool is_odd(int n) {
    return n % 2 == 1;
}

하지만 모듈로 결과가 피제수의 부호를 따르는 언어에서는 n(피제수)이 음수이면서 홀수일 때 n mod 2가 -1을 반환하여 함수가 거짓(false)을 반환하므로 이는 잘못된 코드이다.

올바른 대안 중 하나는 나머지가 0이 아님을 테스트하는 것이다(나머지 0은 부호에 상관없이 같기 때문이다).

bool is_odd(int n) {
    return n % 2 != 0;
}

또는 비트 산술을 사용한다.

bool is_odd(int n) {
    return n & 1;
}

성능 문제

[편집]

모듈로 연산은 매번 나머지를 구하는 나눗셈을 계산하도록 구현될 수 있다. 특수한 경우, 일부 하드웨어에서는 더 빠른 대안이 존재한다. 예를 들어, 2의 거듭제곱의 모듈로는 (x가 양의 정수라고 가정하거나 비절단 정의를 사용하는 경우) 비트 AND 연산으로 표현할 수 있다.

x % 2n == x & (2n - 1)

예:

x % 2 == x & 1
x % 4 == x & 3
x % 8 == x & 7

비트 연산을 모듈로 연산보다 효율적으로 수행하는 기기 및 소프트웨어에서는 이러한 대안적 형식이 더 빠른 계산 결과를 낼 수 있다.[7]

컴파일러 최적화는 expression % constant 형태의 표현식에서 constant가 2의 거듭제곱인 경우 이를 자동으로 expression & (constant-1)로 구현하여, 프로그래머가 성능 저하 없이 더 명확한 코드를 작성할 수 있게 한다. 이 간단한 최적화는 모듈로 연산의 결과가 피제수의 부호를 따르는 언어(C 언어 포함)에서는 (피제수가 부호 없는 정수 유형이 아닌 경우) 불가능하다. 왜냐하면 피제수가 음수이면 모듈로는 음수가 되지만 expression & (constant-1)은 항상 양수이기 때문이다. 이러한 언어의 경우, 비트 OR, NOT, AND 연산을 사용하여 x % 2n == x < 0 ? x | ~(2n - 1) : x & (2n - 1)와 같이 작성해야 한다.

일반적인 상수-모듈로 연산에 대해서도 상수-제수 최적화를 사용하여 나눗셈을 먼저 계산하는 방식의 최적화가 존재한다.

성질 (항등식)

[편집]

일부 모듈로 연산은 다른 수학 연산과 유사하게 인수분해되거나 확장될 수 있다. 이는 디피-헬먼 키 교환과 같은 암호학 증명에서 유용할 수 있다. 곱셈, 나눗셈, 거듭제곱과 관련된 성질은 일반적으로 a와 n이 정수여야 함을 전제로 한다.

  • 항등원:
    • (a mod n) mod n = a mod n.
    • 모든 양의 정수 x에 대하여 nx mod n = 0.
    • p가 b의 약수가 아닌 소수인 경우, 페르마의 소정리에 의해 abp−1 mod p = a mod p.
  • 역원:
    • [(−a mod n) + (a mod n)] mod n = 0.
    • b−1 mod n은 모듈러 역원을 의미하며, 이는 b와 n이 서로소일 때만 정의된다. 즉, 좌변이 정의될 때 [(b−1 mod n)(b mod n)] mod n = 1.
  • 분배법칙:
    • (a + b) mod n = [(a mod n) + (b mod n)] mod n.
    • ab mod n = [(a mod n)(b mod n)] mod n.
  • 나눗셈 (정의): 우변이 정의될 때(즉, b와 n이 서로소일 때), ⁠a/b⁠ mod n = [(a mod n)(b−1 mod n)] mod n. 정의되지 않을 때는 부정이다.
  • 역곱셈: [(ab mod n)(b−1 mod n)] mod n = a mod n.

프로그래밍 언어별 모듈로 연산

[편집]

또한, 많은 컴퓨터 시스템은 몫과 나머지를 동시에 생성하는 divmod 기능을 제공한다. 예로는 x86 아키텍처의 DIV 및 IDIV 명령어, C 언어의 div() 함수, 파이썬의 divmod() 함수 등이 있다.

일반화

[편집]

오프셋 모듈로

[편집]

때때로 a 모듈로 n의 결과를 0과 n − 1 사이가 아닌, 특정 숫자 d와 d + n − 1 사이로 두는 것이 유용할 때가 있다. 이 경우 d를 오프셋이라 하며, 특히 d = 1인 경우가 흔하다.

이 연산에 대한 표준 표기법은 없는 것으로 보이나, 잠정적으로 a modd n으로 표기하자. 다음과 같이 정의할 수 있다.[127] x = a modd n은 d ≤ x ≤ d + n − 1이고 x mod n = a mod n일 때만 성립한다. 분명히 일반적인 모듈로 연산은 오프셋이 0인 경우에 해당한다: a mod n = a mod0 n.

오프셋이 있는 모듈로 연산은 바닥 함수와 다음과 같이 관련된다.

이를 확인하기 위해 라고 하자. 먼저 x mod n = a mod n임을 보이겠다. 모든 정수 b에 대해 (a + bn) mod n = a mod n이 성립하므로, 인 경우에도 성립한다. 즉, 이다. 이제 d ≤ x ≤ d + n − 1임을 보이면 된다. a − d = kn + r을 만족하고 0 ≤ r ≤ n − 1인 정수 k와 r을 잡자( 유클리드 나눗셈 참조). 그러면 이므로, 이다. 0 ≤ r ≤ n − 1에서 양변에 d를 더하면 d ≤ d + r ≤ d + n − 1을 얻는다. x = d + r이므로 증명이 끝났다.

오프셋이 있는 모듈로 a modd n은 Mathematica에서 Mod[a, n, d]로 구현되어 있다.[127]

절단을 사용한 다른 모듈로 정의 구현

[편집]

커누스의 바닥 나눗셈과 유클리드 나눗셈의 수학적 우아함에도 불구하고, 프로그래밍 언어에서는 절단 기반 나눗셈을 사용하는 모듈로를 훨씬 더 흔하게 찾아볼 수 있다. Leijen은 절단 정수 나눗셈이 주어졌을 때 두 가지 나눗셈을 계산하기 위한 다음 알고리즘을 제공한다.

/* C의 ldiv() 스타일을 사용한 유클리드 및 바닥 divmod */
typedef struct {
  /* 이 구조체는 C stdlib.h의 일부이지만 명확성을 위해 여기에 재현함 */
  long int quot;
  long int rem;
} ldiv_t;

/* 유클리드 나눗셈 */
inline ldiv_t ldivE(long numer, long denom) {
  /* C99와 C++11 언어는 이 둘을 모두 절단으로 정의한다. */
  long q = numer / denom;
  long r = numer % denom;
  if (r < 0) {
    if (denom > 0) {
      q = q - 1;
      r = r + denom;
    } else {
      q = q + 1;
      r = r - denom;
    }
  }
  return (ldiv_t){.quot = q, .rem = r};
}

/* 바닥 나눗셈 */
inline ldiv_t ldivF(long numer, long denom) {
  long q = numer / denom;
  long r = numer % denom;
  if ((r > 0 && denom < 0) || (r < 0 && denom > 0)) {
    q = q - 1;
    r = r + denom;
  }
  return (ldiv_t){.quot = q, .rem = r};
}

두 경우 모두 나머지는 몫과 독립적으로 계산될 수 있지만 그 반대는 불가능하다. 논리적 분기 조건이 동일하므로 화면 공간을 절약하기 위해 연산들을 하나로 결합하였다.

같이 보기

[편집]

각주

[편집]
  1. ↑ Weisstein, Eric W. “Congruence” (영어). 《Wolfram MathWorld》. 2020년 8월 27일에 확인함.
  2. ↑ Caldwell, Chris. “residue”. 《Prime Glossary》. 2020년 8월 27일에 확인함.
  3. ↑ Knuth, Donald. E. (1972). 《The Art of Computer Programming》. Addison-Wesley.
  4. ↑ Boute, Raymond T. (April 1992). “The Euclidean definition of the functions div and mod”. 《ACM Transactions on Programming Languages and Systems》 (ACM Press (New York, NY, USA)) 14 (2): 127–144. doi:10.1145/128861.128862. hdl:1854/LU-314490. S2CID 8321674.
  5. ↑ Peterson, Doctor (2001년 7월 5일). “Mod Function and Negative Numbers”. 《Math Forum - Ask Dr. Math》. 2019년 10월 22일에 원본 문서에서 보존된 문서. 2019년 10월 22일에 확인함.
  6. ↑ “Ada 83 LRM, Sec 4.5: Operators and Expression Evaluation”. 《archive.adaic.com》. 2025년 3월 3일에 확인함.
  7. ↑ Horvath, Adam (2012년 7월 5일). “Faster division and modulo operation - the power of two”.
  8. ↑ “ABAP Keyword Documentation” (미국 영어). 《help.sap.com》. 2024. 2026년 1월 18일에 확인함.
  9. ↑ “Operators - Adobe ActionScript® 3 (AS3) API Reference” (미국 영어). 《help.adobe.com》. 2026년 1월 19일에 확인함.
  10. 1 2 《ISO/IEC 8652:2012 - Information technology — Programming languages — Ada》. ISO, IEC. 2012. sec. 4.5.5 Multiplying Operators.
  11. ↑ 《Revised Report on the Algorithmic Language Algol 68》. IFIP WG2.1. 1973. sec. 10.2.3.3.n.
  12. ↑ “awk”. 《pubs.opengroup.org》. 2026년 1월 19일에 확인함.
  13. ↑ “bc”. 《pubs.opengroup.org》. 2026년 5월 23일에 확인함.
  14. ↑ “C99 specification (ISO/IEC 9899:TC2)” (PDF). 2005년 5월 6일. sec. 6.5.5 Multiplicative operators. 2018년 8월 16일에 확인함.
  15. ↑ 《ISO/IEC 14882:2003: Programming languages – C++》. 국제 표준화 기구 (ISO), 국제전기기술위원회 (IEC). 2003. sec. 5.6.4. 이항 % 연산자는 첫 번째 표현식을 두 번째로 나눈 나머지를 산출한다. ... 두 피연산자가 모두 음수가 아니면 나머지는 음수가 아니다; 그렇지 않으면 나머지의 부호는 구현 정의에 따른다
  16. ↑ 《ISO/IEC 9899:1990: Programming languages – C》. ISO, IEC. 1990. sec. 7.5.6.4. fmod 함수는 y가 0이 아닐 경우 x와 같은 부호를 가지며 절댓값이 y보다 작은, x - i * y 값을 반환한다.
  17. ↑ 《ISO/IEC 9899:1999: Programming languages — C》. ISO, IEC. 1999. sec. 7.12.10.2. remainder 함수는 IEC 60559에서 요구하는 x REM y 나머지를 계산한다.
  18. ↑ “Expressions - C# language specification” (미국 영어). 《learn.microsoft.com》. 2026년 1월 19일에 확인함.
  19. 1 2 dotnet-bot. “Math.IEEERemainder(Double, Double) Method (System)” (미국 영어). 《Microsoft Learn》. 2022년 10월 4일에 확인함.
  20. ↑ “clojure.core - Clojure v1.10.3 API documentation”. 《clojure.github.io》. 2022년 3월 16일에 확인함.
  21. ↑ “clojure.core - Clojure v1.10.3 API documentation”. 《clojure.github.io》. 2022년 3월 16일에 확인함.
  22. 1 2 ISO/IEC JTC 1/SC 22/WG 4 (January 2023). 《ISO/IEC 1989:2023 – Programming language COBOL》. ISO.
  23. 1 2 “CoffeeScript”. 《coffeescript.org》. 2026년 7월 22일에 확인함.
  24. ↑ ISO/IEC JTC 1/SC 22 (February 2012). 《ISO/IEC 23271:2012 — Information technology — Common Language Infrastructure (CLI)》. ISO. §§ III.3.55–56.
  25. 1 2 “CLHS: Function MOD, REM”. 《www.lispworks.com》. 2026년 1월 20일에 확인함.
  26. ↑ “mod() - CSS: Cascading Style Sheets | MDN” (미국 영어). 《developer.mozilla.org》. 2024년 6월 22일. 2024년 10월 23일에 확인함.
  27. ↑ “rem() - CSS: Cascading Style Sheets | MDN” (미국 영어). 《developer.mozilla.org》. 2024년 10월 15일. 2024년 10월 23일에 확인함.
  28. ↑ “Expressions - D Programming Language”. 《dlang.org》. 2021년 6월 1일에 확인함.
  29. ↑ “operator % method - num class - dart:core library - Dart API”. 《api.dart.dev》. 2021년 6월 1일에 확인함.
  30. ↑ “remainder method - num class - dart:core library - Dart API”. 《api.dart.dev》. 2021년 6월 1일에 확인함.
  31. ↑ “dc, an arbitrary precision calculator”. 《www.gnu.org》. 2025년 12월 10일에 원본 문서에서 보존된 문서. 2026년 5월 23일에 확인함.
  32. ↑ “Kernel — Elixir v1.11.3”. 《hexdocs.pm》. 2021년 1월 28일에 확인함.
  33. ↑ “Integer — Elixir v1.11.3”. 《hexdocs.pm》. 2021년 1월 28일에 확인함.
  34. ↑ “Basics - core 1.0.5”. 《package.elm-lang.org》. 2022년 3월 16일에 확인함.
  35. ↑ “Basics - core 1.0.5”. 《package.elm-lang.org》. 2022년 3월 16일에 확인함.
  36. ↑ “Erlang -- math”. 《erlang.org》. 2021년 6월 1일에 확인함.
  37. ↑ “OpenEuphoria: Euphoria v4.0”. 《openeuphoria.org》. 2026년 1월 20일에 확인함.
  38. ↑ “OpenEuphoria: Euphoria v4.0”. 《openeuphoria.org》. 2026년 1월 20일에 확인함.
  39. ↑ “18. The F# Library FSharp.Core.dll - F# Language Specification”. 《fsharp.github.io》. 2026년 1월 19일에 확인함.
  40. ↑ “mod ( x y -- z ) - Factor Documentation”. 《docs.factorcode.org》. 2026년 1월 21일에 확인함.
  41. ↑ “rem ( x y -- z ) - Factor Documentation”. 《docs.factorcode.org》. 2026년 1월 21일에 확인함.
  42. ↑ “Manipulation and properties of numeric values — Fortran Programming Language”. 《fortran-lang.org》. 2026년 5월 22일에 확인함.
  43. ↑ “Manipulation and properties of numeric values — Fortran Programming Language”. 《fortran-lang.org》. 2026년 5월 22일에 확인함.
  44. ↑ “Frink”. 《frinklang.org》. 2026년 7월 22일에 확인함.
  45. ↑ 미국 국가표준 협회 (1987년 1월 28일). 《Programming Languages — Full BASIC》. New York: American National Standards Institute. § 5.4.4. X modulo Y, i.e., X-Y*INT(X/Y).
  46. ↑ 미국 국가표준 협회 (1987년 1월 28일). 《Programming Languages — Full BASIC》. New York: American National Standards Institute. § 5.4.4. The remainder function, i.e., X-Y*IP(X/Y).
  47. ↑ “GLSL Language Specification, Version 4.50.7” (PDF). section 5.9 Expressions. 두 피연산자가 모두 음수가 아니면 나머지는 음수가 아니다. 결과는 피연산자 중 하나 이상이 음수일 때 정의되지 않는다.
  48. ↑ “GLSL Language Specification, Version 4.50.7” (PDF). section 8.3 Common Functions.
  49. ↑ “int” (영어). 《Godot Engine documentation》. 2026년 1월 19일에 확인함.
  50. ↑ “@GlobalScope” (영어). 《Godot Engine documentation》. 2026년 1월 19일에 확인함.
  51. ↑ “@GlobalScope” (영어). 《Godot Engine documentation》. 2026년 1월 19일에 확인함.
  52. ↑ “@GlobalScope” (영어). 《Godot Engine documentation》. 2026년 1월 19일에 확인함.
  53. ↑ “The Go Programming Language Specification - The Go Programming Language”. 《go.dev》. 2022년 2월 28일에 확인함.
  54. ↑ “math package - math - pkg.go.dev”. 《pkg.go.dev》. 2022년 2월 28일에 확인함.
  55. ↑ “big package - math/big - pkg.go.dev”. 《pkg.go.dev》. 2022년 2월 28일에 확인함.
  56. ↑ “big package - math/big - pkg.go.dev”. 《pkg.go.dev》. 2024년 4월 12일에 확인함.
  57. 1 2 “6 Predefined Types and Classes”. 《www.haskell.org》. 2022년 5월 22일에 확인함.
  58. ↑ “Binary Operators”. 《Haxe - The Cross-platform Toolkit》. 2026년 1월 20일에 확인함.
  59. ↑ “Operators”. 마이크로소프트. 2021년 6월 30일. 2021년 7월 19일에 확인함. % 연산자는 양쪽이 모두 양수이거나 음수인 경우에만 정의된다. C와 달리 정수뿐만 아니라 부동소수점 데이터 유형에도 작동한다.
  60. ↑ “Java Platform, Standard Edition Java API Reference”. 《docs.oracle.com》. 2026년 5월 24일에 확인함.
  61. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  62. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  63. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  64. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  65. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  66. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  67. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  68. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  69. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  70. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  71. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  72. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  73. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  74. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  75. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  76. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  77. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  78. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  79. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  80. ↑ “Java Platform, Standard Edition Java API Reference” (영어). 《docs.oracle.com》. 2026년 5월 25일에 확인함.
  81. ↑ “Mathematics · The Julia Language”. 《docs.julialang.org》. 2021년 11월 20일에 확인함.
  82. ↑ “Mathematics – The Julia Language”. 《docs.julialang.org》. 2021년 11월 20일에 확인함.
  83. ↑ “rem – Kotlin Programming Language” (영어). 《Kotlin》. 2021년 5월 5일에 확인함.
  84. ↑ “mod – Kotlin Programming Language” (영어). 《Kotlin》. 2021년 5월 5일에 확인함.
  85. ↑ “Mathematical Functions”. 《help.libreoffice.org》. 2026년 1월 21일에 확인함.
  86. ↑ “Mod: Get the remainder on division—Wolfram Documentation” (영어). 《reference.wolfram.com》. 2026년 5월 25일에 확인함.
  87. ↑ “mod - Remainder after division (modulo operation) - MATLAB” (영어). 《www.mathworks.com》. 2026년 1월 15일에 원본 문서에서 보존된 문서. 2026년 1월 21일에 확인함.
  88. ↑ “rem - Remainder after division - MATLAB” (영어). 《www.mathworks.com》. 2026년 1월 1일에 원본 문서에서 보존된 문서. 2026년 1월 21일에 확인함.
  89. ↑ “fmod command”. 《help.autodesk.com》. 2026년 6월 14일에 확인함.
  90. ↑ “MOD function - Microsoft Support”. 《support.microsoft.com》. 2026년 1월 21일에 확인함.
  91. ↑ O'Neill, Joseph T. 외 (1976). 《MUMPS language standard》. Gaithersburg, MD: U.S. Dept. of Commerce, National Institute of Standards and Technology. sec. 3.3.1 Arithmetic Binary Operators. doi:10.6028/NBS.HB.118.
  92. ↑ “Chapter 3: The NASM Language”. 《NASM - The Netwide Assembler version 2.15.05》.
  93. ↑ “system”. 《nim-lang.org》. 2026년 6월 15일에 확인함.
  94. ↑ “std/math”. 《nim-lang.org》. 2026년 6월 15일에 확인함.
  95. ↑ “std/math”. 《nim-lang.org》. 2026년 6월 15일에 확인함.
  96. ↑ “OCaml library: Stdlib”. 《Ocaml.org》. 2022년 2월 19일에 확인함.
  97. ↑ “OCaml library: Stdlib”. 《Ocaml.org》. 2022년 2월 19일에 확인함.
  98. ↑ Perl documentation
  99. ↑ “POSIX - Perl interface to IEEE Std 1003.1 - Perldoc Browser”. 《perldoc.perl.org》. 2026년 5월 22일에 확인함.
  100. ↑ “PHP: Arithmetic Operators - Manual”. 《www.php.net》. 2021년 11월 20일에 확인함.
  101. ↑ “PHP: fmod - Manual”. 《www.php.net》. 2021년 11월 20일에 확인함.
  102. ↑ “Mod”. 《www.purebasic.com》. 2026년 7월 22일에 확인함.
  103. ↑ “EuclideanRing”.
  104. ↑ “6. Expressions” (영어). 《Python documentation》. 2026년 1월 21일에 확인함.
  105. ↑ “math — Mathematical functions” (영어). 《Python documentation》. 2026년 1월 21일에 확인함.
  106. ↑ “math — Mathematical functions” (영어). 《Python documentation》. 2026년 1월 21일에 확인함.
  107. ↑ QuantumWriter. “Expressions” (미국 영어). 《docs.microsoft.com》. 2018년 7월 11일에 확인함.
  108. ↑ “R: Arithmetic Operators”. 《search.r-project.org》. 2022년 12월 24일에 확인함.
  109. ↑ “4.3 Numbers”. 《docs.racket-lang.org》. 2026년 7월 22일에 확인함.
  110. ↑ “4.3.2 Generic Numerics”. 《docs.racket-lang.org》. 2026년 7월 22일에 확인함.
  111. ↑ “4.3.2 Generic Numerics”. 《docs.racket-lang.org》. 2026년 7월 22일에 확인함.
  112. ↑ “Operator expressions - The Rust Reference”. 《doc.rust-lang.org》. 2026년 1월 21일에 확인함.
  113. ↑ “F32 - Rust”.
  114. 1 2 r6rs.org
  115. ↑ “Shell Command Language”. 《pubs.opengroup.org》. 2021년 2월 5일에 확인함.
  116. 1 2 《ANSI INCITS 319-1998 (R2002): Information Technology - Programming Languages - Smalltalk》. 미국 국가표준 협회 (ANSI). 1998.
  117. ↑ “Solidity Documentation”. 《docs.soliditylang.org》. 2024년 10월 17일에 확인함.
  118. ↑ “Apple Developer Documentation”. 《developer.apple.com》. 2021년 11월 20일에 확인함.
  119. ↑ “Apple Developer Documentation”. 《developer.apple.com》. 2021년 11월 20일에 확인함.
  120. ↑ “Apple Developer Documentation”. 《developer.apple.com》. 2021년 11월 20일에 확인함.
  121. ↑ “mathop manual page - Tcl Mathematical Operator Commands”. 《www.tcl-lang.org》. 2026년 5월 22일에 확인함.
  122. ↑ “expr manual page - Tcl Built-In Commands”. 《www.tcl-lang.org》. 2026년 5월 22일에 확인함.
  123. ↑ “mathop manual page - Tcl Mathematical Operator Commands”. 《www.tcl-lang.org》. 2026년 5월 22일에 확인함.
  124. ↑ “mathfunc manual page - Tcl Mathematical Functions”. 《www.tcl-lang.org》. 2026년 5월 22일에 확인함.
  125. 1 2 Rossberg, Andreas 편집 (2022년 4월 19일). “WebAssembly Core Specification: Version 2.0”. 월드 와이드 웹 컨소시엄. § 4.3.2 Integer Operations.
  126. ↑ “Zig Documentation”. 《Zig Programming Language》. 2022년 12월 18일에 확인함.
  127. 1 2 “Mod”. 《Wolfram Language & System Documentation Center》. 울프럼 리서치. 2020. 2020년 4월 8일에 확인함.
내용주
  1. ↑ 수학적으로, 이 두 가지 선택은 나머지가 만족하는 부등식에 대해 가능한 무한한 선택지 중 두 가지일 뿐이다.
  2. ↑ 개정된 보고서는 키워드와 식별자를 구별하기 위해 굵게 표기하지만, 대문자 사용(예: MOD) 등 다른 형식도 허용한다.
  3. 1 2 인수 순서가 뒤바뀜, 즉 α|ω는 ω를 α로 나눈 나머지인 를 계산한다.
  4. ↑ C99와 C++11은 %의 동작을 절단으로 정의한다.[14] 그 이전 표준들은 구현 정의에 따른다.[15]
  5. ↑ 제수는 양수여야 하며, 그렇지 않으면 정의되지 않음.
  6. ↑ Boute가 논의했듯이, ISO 파스칼의 div 및 mod 정의는 D = d · (D / d) + D % d 나눗셈 항등식을 따르지 않으므로 근본적으로 잘못되었다.
  7. ↑ 펄은 일반적으로 기계 독립적인 산술 모듈로 연산자를 사용한다. 예외 사항은 펄의 곱셈 연산자 문서를 참조하라.[98]
  8. 1 2 래킷은 정수를 round를 적용했을 때 동일한 숫자가 생성되는 유리수로 정의한다. 여기에는 42.0 같은 일부 부정확한 숫자가 포함되지만 3.14와 같은 다른 숫자는 제외된다.[109]
  9. ↑ expr 명령은 ::tcl::mathop 네임스페이스의 명령들과 독립적으로 정의된다.[121]
  10. ↑ expr 명령은 ::tcl::mathfunc 네임스페이스의 명령들로 정의된다.[124]

외부 링크

[편집]