source

"mod"와 "remainer"의 차이점은 무엇입니까?

factcode 2022. 8. 11. 21:54
반응형

"mod"와 "remainer"의 차이점은 무엇입니까?

내 친구는 mod와 remainer의 차이가 있다고 말했다.

그렇다면 C와 C++의 차이점은 무엇입니까?'%'는 C에서 "mod" 또는 "rem" 중 하나를 의미합니까?

계수와 나머지 사이에는 차이가 있다.예를 들어 다음과 같습니다.

-2143-21 + 4 x 63.

★★★★★★★★★★★★★★★★★.-21.4-5-1.

양의 값에는 차이가 없습니다.

'%'는 C에서 "mod" 또는 "rem" 중 하나를 의미합니까?

식식사는,%나머지1 됩니다.

의...의 결과입니다./ 상수입니다. (은 종종 으로 향하는 분할.) . 5 . 5 6 연연연 。 C11dr 6.5.5 6

%.5 2C11dr 6 . 5 . 2

/첫를 두 번째 피연산자로 의 몫입니다.이은 피연산자가 두 번째 피연산자임을 나타냅니다.%연산자는 나머지...C11dr § 6.5.5 5


"mod"와 "remainer"의 차이점은 무엇입니까?

C는 유클리드 나눗셈이나 다른 모듈로사용되는 정수 계수 함수처럼 "mod"나 "modulo" 연산자/함수를 정의하지 않는다.

C는 나머지를 정의합니다.

'와 '남다'를 비교해 요?%「mod(를) 사용하다.

모드의 '유클리드 모드'와 a%b의 operation ★★★ ★★a음성이에요.

 // a % b, the remainder after an integer division that truncates toward 0.
 7 %  3 -->  1  
 7 % -3 -->  1  
-7 %  3 --> -1  
-7 % -3 --> -1   

유클리드 나눗셈에서와 같이 "Mod" 또는 modulo.결과는 항상 0 또는 양수입니다.

 7 modulo  3 -->  1
 7 modulo -3 -->  1
-7 modulo  3 -->  2
-7 modulo -3 -->  2

후보 모듈로 코드:

int modulo_Euclidean(int a, int b) {
  int m = a % b;
  if (m < 0) {
    // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN
    m = (b < 0) ? m - b : m + b;
  }
  return m;
}

:double fmod(double x, double y)라고 불리지만,나눗셈 "와 , C 와 유사하다 "fmod"는 "fmod"라고 불리며, "mod"는 "mod"라고 불리고 있다.

fmod 합니다.x/y 2. C11dr © 7.12.10.1 2

fmod( 7,  3) -->  1.0
fmod( 7, -3) -->  1.0
fmod(-7,  3) --> -1.0
fmod(-7, -3) --> -1.0

명확성: C에도 유사한 이름의 함수가 있습니다.double modf(double value, double *iptr)이것은 인수 값을 정수 부분과 분수 부분으로 나눕니다. 각 부분에는 인수와 같은 유형과 부호가 있습니다.이는 이름 유사성 이외에는 여기에서의 "mod" 논의와는 거의 관련이 없습니다.


[2020년 12월 편집]

로 하는 된 기능modulo_Euclidean() 을 합니다.mod(x,0) UB 결과가 없음 2) UB의 결과, UB의 결과.modulo_Euclidean2(INT_MIN, -1)완전히 정의된 동작을 가진 4가지 모듈로의 구현에서 영감을 받았습니다.

int modulo_Euclidean2(int a, int b) {
  if (b == 0) TBD_Code(); // perhaps return -1 to indicate failure?
  if (b == -1) return 0; // This test needed to prevent UB of `INT_MIN % -1`.
  int m = a % b;
  if (m < 0) {
    // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN
    m = (b < 0) ? m - b : m + b;
  }
  return m;
}

1 C99 이전 C에서는%아직 분할의 나머지였다./"0을 향한 논쟁"보다는 마이너스 지수를 반올림할 수 있도록 했다.C89에서 정수 나눗셈에 대해 다른 값을 얻는 이유를 참조하십시오.따라서 C99 이전 컴파일에서는%코드는 유클리드 나눗셈 "mod"와 같이 작동할 수 있습니다.의 「 」modulo_Euclidean()이 대체 구식 잔여물도 함께 사용할 수 있습니다.

나머지 부호는 나눗셈과 같고 계수 부호는 나눗셈과 같습니다.

나머지는 단순히 두 정수 사이의 산술 나눗셈 후의 나머지 부분이고, 반면 계수는 반대 부호일 때 나머지와 제수의 합이며, 나머지와 제수가 모두 같은 부호일 때 산술 나눗셈 후의 나머지 부분이다.

나머지 예:

10% 3 = 1 (여기서 나누면 10이 정의 서명되므로 결과도 정의 서명됨)

-10 % 3 = -1 [여기서 나누면 -10으로 음수 부호가 있으므로 결과도 음수 부호가 됩니다.

10% - 3 = 1 (여기서 나누기 10은 긍정적인 서명이므로 결과도 긍정적인 서명이 됩니다)

-10 % -3 = -1 [여기서 -10은 음수 부호이므로 결과도 음수 부호입니다]

계수 예:

5% 3 = 2 [여기서 나눗셈은 5로 정의 부호화되므로 나머지도 정의 부호화되며 제수도 정의 부호화된다]나머지와 제수가 모두 같은 부호이므로 결과는 나머지와 같습니다.

-5% 3 = 1 [여기서 나눗셈은 -5로 음수 부호이므로 나머지도 음수 부호이고 제수는 양수 부호입니다.나머지와 제수가 모두 반대 부호이므로 결과는 나머지의 합과 -2 + 3 = 1]이 됩니다.

5% - 3 = -1 [여기서 나눗셈은 5로 정의 부호화되므로 나머지도 정의 부호화되며 제수는 부정 부호화됩니다.나머지와 제수가 모두 반대 부호이므로 결과는 나머지의 합이 되고 2 + -3 = -1]이 됩니다.

-5% -3 = -2 [여기서 나눗셈은 -5로 음수 부호이므로 나머지도 음수 부호이고 제수도 음수 부호입니다.나머지와 제수가 모두 같은 부호이므로 결과는 나머지와 같습니다.

나는 이것이 나머지와 계수를 명확하게 구별하기를 바란다.

C, C++, 그리고 많은 언어로%는 모듈러스 연산자가 아닌 나머지 값입니다.

예를 들어, 조작의 경우-21 / 4정수 부분은-5그리고 소수 부분이 있어.-.25. 나머지는 그 부분번 인자, 그래서 우리는 남는다.-1. 자바 스크립트와 이 확인 할 나머지 연산자를 사용하다.

console.log(-21 % 4 == -1);

계수 연산자는 "시계"를 가지고 있는 것과 같습니다.각각 12시, 3시, 6시 및 9시 위치에 값이 0, 1, 2, 3인 원을 상상해 보십시오.시계방향으로 시계방향으로 스테핑하면 계수연산의 결과 또는 이 예에서는 시계반대방향의 음수계수를 사용하여 3이 산출됩니다.

주의: 계수는 항상 제수와 같은 기호이며 나머지는 지수와 같은 기호입니다.적어도 1이 음수일 때 제수와 나머지를 더하면 계수가 산출됩니다.

% is a remainder(leftover after dividend / divisor) NOT modulus. 

관계별 나머지(%)를 사용하여 자체 계수 함수를 작성할 수 있습니다.

  ((n%m)+m)%m

  where `n` is the given number and `m` is the modulus

n = (-7,7) 및 m = 3 범위의 나머지 값과 계수 값 사이의 차이를 아래에서 구합니다.

n       -7 -6 -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  
------------------------------------------------------------------------- 
%(-m)   -1  0 -2 -1  0 -2 -1  0  1  2  0  1  2  0  1  =>  remainder
% m     -1  0 -2 -1  0 -2 -1  0  1  2  0  1  2  0  1  =>  remainder
mod m    2  0  1  2  0  1  2  0  1  2  0  1  2  0  1  =>  ((n%m)+m)%m
mod(-m) -1  0 -2 -1  0 -2 -1  0 -2 -1  0 -2 -1  0 -2  =>  ((n%m)+m)%m

주의사항:

n%(-m)   = +(remainder)
(-n)%(m) = -(remainder)
sign of 'm' doesn't matter

n mod (-m) = -(result)
(-n) mod m = +(result)
sign of 'n' doesn't matter

For +ve 'n' and '%(-m)' or '%m' or 'mod m' gives the same remainder

모듈러스(modulus)는 모듈식 산술에서 산술 나눗셈 후 남은 값입니다.이것은 보통 나머지로 알려져 있습니다.%는 공식적으로 C / C++의 나머지 연산자입니다.예:

7 % 3 = 1  // dividend % divisor = remainder

이제 남은 것은 이 % 연산에 대한 부정적인 입력을 어떻게 처리할 것인가입니다.현대 C와 C++는 이 연산에 대해 부호화된 나머지 값을 생성합니다.여기서 결과 부호는 제수 입력 부호에 관계없이 항상 배당 입력과 일치합니다.

수학에서, 모듈로 연산의 결과는 유클리드 나눗셈의 나머지다.그러나 다른 표기법도 가능합니다.컴퓨터와 계산기는 숫자를 저장하고 표현하는 다양한 방법을 가지고 있습니다. 따라서 모듈로 연산의 정의는 프로그래밍 언어 및/또는 기본 하드웨어에 따라 달라집니다.

 7 modulo  3 -->  1  
 7 modulo -3 --> -2 
-7 modulo  3 -->  2  
-7 modulo -3 --> -1 

언급URL : https://stackoverflow.com/questions/13683563/whats-the-difference-between-mod-and-remainder

반응형