Mod Zero를 할 수 없습니까?
왜 X % 0
잘못된 표현입니까?
저는 항상 X % 0
X와 같아야 한다고 생각 했습니다. 0으로 나눌 수 없기 때문에 당연히 나머지 X (남은 모든 것)가 답이되지 않습니까?
C ++ Standard (2003)는 §5.6 / 4에서 말합니다.
[...] / 또는 %의 두 번째 피연산자가 0이면 동작이 정의되지 않습니다 . [...]
즉, 다음 표현식은 undefined-behavior (UB)를 호출합니다.
X / 0; //UB
X % 0; //UB
그것은 -5 % 2
같지 않습니다 -(5 % 2)
(Petar가 그의 대답에 대한 그의 의견에서 제안한 것처럼). 구현에 따라 정의됩니다. 사양에는 (§5.6 / 4),
[...] 두 피연산자가 음수가 아니면 나머지는 음수가 아닙니다. 그렇지 않은 경우 나머지 부호는 구현 정의 입니다.
이 대답은 수학자를위한 것이 아닙니다. 이 대답은 동기 부여를 시도합니다 (수학적 정밀도를 희생).
수학자 : 여기를 참조하십시오.
프로그래머 : 나눗셈은 0
입니다 undefined
. 따라서 mod
나눗셈에 의존하는는이기도 undefined
합니다.
이것은 긍정적 X
이고 D
; 정수 부분과 분수 부분으로 구성됩니다.
(X / D) = integer + fraction
= floor(X / D) + (X % D) / D
재정렬하면 다음을 얻을 수 있습니다.
(X % D) = D * (X / D) - D * floor(X / D)
대입 0
을 위해 D
:
(X % 0) = 0 * (X / 0) - 0 * floor(X / 0)
분할 이후로는 0
이다 undefined
:
(X % 0) = 0 * undefined - 0 * floor(undefined)
= undefined - undefined
= undefined
X % D
입니다 정의 다수 0 <= R < D
존재하도록, Q
그래서
X = D*Q + R
따라서이면 D = 0
그러한 숫자가 존재할 수 없습니다 (왜냐하면 0 <= R < 0
)
나는 X % 0
당신 의 나머지를 얻으려면 먼저 X / 0
무한대를 산출하는 것을 계산해야하고 나머지 무한대를 계산하려고 시도하는 것은 실제로 불가능하다고 생각합니다.
그러나 당신의 생각에 맞는 최선의 해결책은 다음과 같은 일을하는 것입니다.
REMAIN = Y ? X % Y : X
개념적으로 문제를 이해하기 쉬운 또 다른 방법 :
인수 부호 문제를 잠시 무시하면 a % b
쉽게 a - ((a / b) * b)
. 0 a / b
이면 표현식 은 정의되지 않으므로이 경우 b
전체 표현식도 마찬가지 여야합니다.
결국, 모듈러스는 사실상 분할 연산이므로 a / b
정의되지 않은 경우 a % b
에도 예상 할 수있는 불합리하지 않습니다 .
X % Y는 정수 [0, Y) 범위의 결과를 제공합니다. X % 0은 0보다 크거나 같고 0보다 작은 결과를 제공해야합니다.
float (B) = b = 0.0, 즉 정의되지 않았거나 두 구현간에 다르게 정의 된 유형 float 식별 mod (a, b)에 대해 (A % B)의 "0으로 나누기"사례를 피할 수 있습니다. 산술 오류를 위해 논리 오류 (하드 크래시)를 피하십시오 ...
계산함으로써 mod([a*b],[b])==b*(a-floor(a))
OF INSTREAD
컴퓨팅mod([a],[b])
여기서 [a * b] == 시간 경과에 따른 x 축 [b] == 시소 곡선의 최대 값 (도달되지 않음) == 시소 함수의 1 차 도함수
https://www.shadertoy.com/view/MslfW8
참조 URL : https://stackoverflow.com/questions/7370154/cant-mod-zero
'Program Tip' 카테고리의 다른 글
Alpine Linux에 Pandas를 설치하는 데 시간이 걸리는 이유 (0) | 2021.01.08 |
---|---|
Symfony 2.0 단계별 자습서 필요 (0) | 2021.01.08 |
대규모 프로젝트를위한 NodeJS 대 Play 프레임 워크 (0) | 2021.01.08 |
ssh : 호스트 이름을 확인할 수 없습니다. github.com : 이름 또는 서비스를 알 수 없습니다. (0) | 2021.01.08 |
OS 스케줄러는 어떻게 CPU를 다시 제어합니까? (0) | 2021.01.08 |