나머지의 수학적 정의는 다음과 같다.
$ a = bq + r (0 \leq r \leq \left | b \right | ) $
하지만, C언어와 Python에서 음수를 포함해 몫과 나머지 계산을 하면, 결과가 다르다.
두 결과 모두 위의 수학적 정의는 만족하지만, 두 언어가 나머지 연산을 하는 방법에 차이가 있다.
아래의 실험결과는, -9 ~ -7 그리고 7~9 의 범위를 3과 -3으로 나눈 몫과 나머지이다.
먼저 몫을 계산하는 방법을 비교해보면,
C언어는 몫에 대해서, 버림을 사용한다. 소수점 뒷부분을 모두 버리기 때문에, 나눗셈에 대한 정수부를 얻을 수 있다.
Python은 몫에 대해서, 내림을 사용한다. 따라서 음수의 경우 정수부가 바뀌는 현상이 나타난다.
ex)
C (버림) | Python (내림) |
8 / 3 = 2.666 -> 2 |
8 / 3 = 2.666 -> 2 |
8 / (-3) = -2.666 -> -2 |
8 / (-3) = -2.666 -> -3 |
이렇게 계산하고 수학적 정의에 맞춰 나머지를 결정한다.
$ a = bq + r (0 \leq r \leq \left | b \right | ) $
C | Python |
8 = 3 * 2 + 2 | 8 = 3 * 2 + 2 |
8 = (-3) * (-2) + 2 | 8 = (-3) * (-3) + (-1) |
따라서, 두 결과는 다르지만, 둘 다 수학적 정의는 만족하게 된다.
C언어에서는 X % Y 연산 결과 부호가 X의 부호와 같다. 또한, 3으로 나누나 -3으로 나누나 같은 결과가 나온다.
Python에서는 X % Y 연산 결과의 부호가 Y의 부호와 같다.
'공부기록 > C, C++' 카테고리의 다른 글
[BOJ] 기타 입출력 문제 C++ (0) | 2020.10.24 |
---|---|
[BOJ] 입출력 A+B 문제 C++ (0) | 2020.10.18 |
[C++] 포인터 대신 참조자(reference)를 써야하는 경우는 ? (0) | 2020.07.11 |
[C] 이중포인터의 선언, 할당, 참조 이해하기 (0) | 2020.06.12 |
[gcc warning] comparison is always true due to limited range of data type (0) | 2020.04.02 |