나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-12-18 10:43:06

0으로 나누기

연산
Numbers and Operations
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#765432> 수 체계 자연수 (홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 (정수가 아닌 유리수) · 실수 (무리수 · 초월수) · 복소수 (허수) · 사원수
표현 숫자 (아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 기수법(과학적 기수법 · E 표기법 · 커누스 윗화살표 표기법 · 콘웨이 연쇄 화살표 표기법 ·BEAF· 버드 표기법) · 진법 (십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 (분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 {유한소수 · 무한소수 (순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수
연산 사칙연산 (덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 (이중근호) · 거듭제곱 · 로그 (상용로그 · 자연로그 · 이진로그) · 검산 · 연산자 · 교환자
방식 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자
용어 이항연산(표기법) · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙
기타 수에 관련된 사항 (0과 1 사이의 수 · 음수 · 작은 수 · 큰 수) · 혼합 계산 (48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기(바퀴 이론) · 0의 0제곱 }}}}}}}}}

1. 개요2. 교육과정 내에서
2.1. 관련 특징2.2. 교육과정 외에서2.3. 바퀴 이론
3. 수학에서 엄밀한 정의4. 1÷0=∞?5. 프로그램에서6. 대중 매체

1. 개요

0제수()로 하여 어떤 수를 나눗셈하는 행위.

2. 교육과정 내에서

교육과정 내의 실수복소수체에서는, 0으로 나누기를 정의하지 않는다. 0으로 나누기를 허용하게 되면 무연근이 발생하거나, 나눗셈이 곱셈의 역연산인 점을 가지고 1=2를 손쉽게 증명하며, 나아가서 모든 수가 같아지는 등 수학 교육과정 자체가 무너진다.

정수론과 같이 나눗셈을 뺄셈의 반복으로 정의하는 경우에는 0으로 나눌 경우 다음과 같은 모순이 생긴다.
  1. 나눗셈은 나누어지는 수([math(a)])에 나누는 수([math(b)])를 몇 번([math(q)]) 뺄 수 있는지 계산하면 된다.
  2. 그 어떤 수도 0으로는 계속, 그러니까 무한히 뺄 수 있다.
  3. 나눈 결과([math(q)])를 나누는 수([math(b)])와 곱하고 나머지([math(r)])를 더하면 나누어지는 수([math(a)])가 되어야 한다.
  4. 하지만 [math(0)]으로 곱하면 무조건 결과는 [math(0)]이 되고 나머지([math(r)])가 항상 나누는 수(0)보다 커진다.[1]
  5. 따라서 이는 성립하지 않는다.

실수체와 같은 일반적인 체에서는 나눗셈을 곱셈의 역연산으로 정의하는데, 0은 어떠한 수를 곱해도 0이 된다고 정의하기 때문에, 쉽게 말해 0으로 곱하는 연산은 일대일 대응이 되지 않아 역연산을 정의할 수가 없다. 때문에 연산 과정에 분모 분자를 0으로 약분했는지 항상 확인해야 하며, 사실 해당 성질은 0으로 나누기만의 문제가 아니고 일대일 대응이 아닌 모든 연산의 역연산을 구하려고 할 때 나타난다. 쉽게 말해, [math(y=x^2)]같은 단순한 함수도 역함수를 구하려면 일대일 대응을 만들기 위해 양수 부분만 가져와서 근호를 이용한 무리함수를 만들듯이, 역연산과 역함수 자체의 한계에 해당한다.

2.1. 관련 특징

2.2. 교육과정 외에서

교육과정 내에서는 실수나 복소수까지만을 다루는데, 단순히 수 체계를 바꾸면 0으로 나누기가 성립할 수도 있다. 가령 Riemann Sphere에서는 무한이 숫자로 간주되고 이를 이용하여 0의 역수, 혹은 모든 복소수를 0으로 나눈 값을 complex infinity[2]로 정의한다.

수 체계를 복소수 이상으로 확장하면 기본적인 사칙연산의 성질이 바뀌는 경우도 있다. 가령 사원수에서는 곱셈의 교환법칙이 성립하지 않는다. 환 구조를 유지하면서 0으로 나누기가 가능하려면 1=0인 0환이어야 하는데 전술한 Riemann Sphere는 [math(\infty=-\infty)]가 되어버리므로 [math(\infty-\infty=\infty+\infty)]나 [math(0\times-\infty=0\times\infty)]가 잘 정의되지 않아 환이 아닌 경우에 속한다. 때문에, '0으로 나누기가 불가능하다'라고 이야기할 때에는 보통 고등학교까지 배우는 복소수까지를 전제하고 이야기한다.

이원수 및 분할 복소수에서는 [math(\epsilon^2 = 0, \epsilon \neq 0)]으로 정의하는 멱영원, [math(j^2 = 1, j \neq \pm 1)]로 정의하는 멱일원의 성질로 [math(\epsilon^2 = (1 + j)(1 - j) = 0)]라는 성질을 이용해서 [math(\epsilon^2)] 또는 [math((1 + j)(1 - j))]로 나누는 것은 0으로 나누는 것과 같은 연산이 된다. 다만 멱영원 [math(\epsilon)]과 같은 영인자를 곱하는 것은 영인자만을 도출하기에, 영인자로 나누기 역시 0으로 나누기와 비슷하게 해가 존재하지 못하거나[3] 무수히 많은 해[4]가 존재하게 된다.

2.3. 바퀴 이론

파일:상세 내용 아이콘.svg   자세한 내용은 바퀴 이론 문서
번 문단을
부분을
참고하십시오.

실수나 복소수체를 확장하여 0으로 나누기를 정의하는 바퀴 이론이라는 것도 존재한다. 실질적인 사용처가 적지만 바퀴 대수학이라는 특이한 수학이 전개되기도 하는 만큼 수학적인 가치는 없지만 해당 수학의 복잡성으로 0으로 나누지 않는 이유를 설명하는 대안으로 사용할 수 있다. 해당 바퀴는 위의 리만 구를 포함하며 0/0에 해당하는 기저 원소를 추가하는 가환 모노이드이다.

3. 수학에서 엄밀한 정의

'0으로 나누기'를 정의하기에 앞서 '나눗셈'을, 그보다 앞서 '수'를 정의할 필요가 있다.

수학에서 '수'를 정의하는 것의 제일 처음은 ZFC 공리계를 통한 자연수의 정의이다. 자연수는 같은 자연수 간의 덧셈과 곱셈이 정의되는 수이다. 여기서 자연수를 정수로 확장하면 정수 간의 뺄셈도 정수가 되어 뺄셈의 연산이 추가로 닫히게 되고, 또다시 이를 확장하여 유리수를 정의하고 나면 정의에 따라 모든 나눗셈의 결과는 유리수가 되므로 나눗셈의 연산이 닫히게 되어 자유롭게 나눗셈을 수행할 수 있다. 자연수에서도 나눗셈을 정의할 수는 있지만, 이는 '7을 3으로 나누면 몫이 2이고 나머지가 1이다'와 같은 제한적이고 직관적인 수준을 벗어날 수 없으므로 여기에서는 부적절하다. 이런 것들은 의 조건을 만족시키지 않는 에 속한다. 고급 수학으로 가면 '유한 체'나 'p진 정수' 같은 괴이쩍은 것들이 존재하긴 한다.

이제 유리수나 실수에서 나눗셈은 '그 수의 역원을 곱하는 것'으로 정의된다. 예를 들어 [math( a\div b)]는 b의 곱셈에 대한 역원 [math( b^{-1})]를 구해서 이를 a에 곱하는 것과 같다. 즉 [math( a\div b \equiv a\cdot b^{-1})]이다. 그러므로, 0으로 나눈다는 것은 0에 대한 곱셈의 역원을 구해서 곱하는 것과 같다. 곱셈의 역원은 곱해서 곱셈의 항등원이 되는 수이다. 즉 [math( b\cdot b^{-1} = 1 )]이다. 이제 0의 역원을 구하기 위해 [math( b^{-1} )] 대신 [math( x )]로 치환하고, [math( b = 0 )]을 대입하자. 그러면 [math( 0\cdot x = 1 )]와 같은 방정식이 나온다. 환의 정의에 의해 [math(0=0+0)]과 분배 법칙을 이용하면 [math(0\cdot x = (0+0)\cdot x = 0\cdot x + 0\cdot x)]이 되고 양변에 [math(-(0\cdot x))]를 더하면 [math(0\cdot x =0)]이 되어 [math( 0 = 1 )]이 나온다.

그런데 [math( 0 = 1 )]이 가능한 건 수가 0밖에 없는 0환뿐이다. 왜냐하면 1은 곱셈의 항등원이므로 임의의 [math( x )]에 대해 [math( x = 1\cdot x = 0\cdot x = 0)]이 되어 수가 0밖에 없게 되기 때문이다.[5] 따라서 실수체, 복소수체를 비롯하여 0환이 아닌 모든 환에서는 0에 대한 곱셈의 역원이 존재하지 않으므로, 0으로 나눈다는 연산은 나눗셈의 정의에 의해 시행이 불가능하다. 이래서 0환을 자명환(trivial ring), 직역 시 하찮은 환이라 부른다.

수학에서 말하는 특이점이 대부분 이 경우이다. [math(1/x^a)]([math(a)]는 임의의 양수), [math(\mathrm{Si}(x))], [math(\mathrm{Ci}(x))](삼각 적분 함수), [math(\mathrm{Ei}(x))](지수 적분 함수, 이상 [math(x=0)]이 특이점), [math(\mathrm{li}(x))](로그 적분 함수, [math(x=1)]이 특이점) 등에서 0으로 나누게 되는 특이점을 찾을 수 있다.

4. 1÷0=∞?

하지만 어떻게 보면, 다음과 같은 이유로 어떤 0이 아닌 수를 0으로 나눈 몫이 무한대라고 주장하는 사람들도 있을 것이다.
[math(\displaystyle \lim_{x\to 0^+} \frac{1}{x}=∞)]
[math(x)] 대신 0을 대입하면
[math(\frac{1}{0}=∞)]
간단히 말해 0으로 수렴하면 극한은 무한대가 되므로 1/0은 무한대가 아닐까? 하는 주장이라 볼 수 있다.

하지만 이 무한대에 해당하는 값은 사실 잘 생각해보면 0의 성질 때문에 다음이 성립해야 한다.
[math(\frac{1}{0}=\frac{1}{-0}=∞=-∞)]
즉, 0의 무지향성 때문에 이의 역수로 정의되는 ∞의 무지향성이 성립해야 한다는 뜻이다.
우리가 알고 있는 양의 무한대를 의미하는 기호인 ∞는 이러한 성질이 성립하지 않는다.

특히, 복소수 범위에서 0의 역수를 정의한다면 편각에 따라 이는 무수히 많은 무한대를 내포하는데, 이러한 무한대를 정의할 때에 편각 [math(θ)]에 대해 다음과 같은 방식으로 정의할 수 있다.
[math(e^{iθ}∞=(\cos{θ}+i\sin{θ})∞)]
해당 방식으로 [math(θ)]가 구간 [math([0,2π))]의 모든 편각마다 각각 독립적인 무한대를 생성하므로, 이들 모두가 0의 역수가 되어야 하는데 해당 방식으로 생성되는 무한대를 하나로 모아서 기호로 나타낸 것이 바로 [math(\tilde {∞})] 기호로 나타내는 복소 무한(complex infinity)이다. 0의 역수가 되기 위한 필요충분조건으로 모든 방식의 무한대를 포함해야 하므로, 해당 기호는 한가지 수를 나타내지 않는 무한대에 한술 더 떠 부호까지 모든 방향을 일컫는다. 때문에 이 문서를 보고 0의 역수가 존재한다고 오해하지는 않기를 바란다. 실제로, 해당 기호의 연산들을 정의하는 바퀴 이론에서도 곱셈의 역연산이 존재하지 않으며, 당연하게도 [math(0 \times \infty )]의 값은 정의되지 않는다.

해당 기호는 하나의 숫자를 의미하는 것이 아닌, 복소수 범위에서 모든 방향으로 생성되는 모든 무한대의 집합을 하나의 기호로 나타낸 것에 가깝다. 다른 표현 방식으로는 무한 원점(point at infinity), 무지향성 무한대(unsigned infinity), [math(1/0)] 등이 있다. 만약 복소평면을 리만 구로 만든다면 0의 대척점에 서있는 것이 바로 이 무한 원점이다.

단순히 0의 우극한과 좌극한을 가지고 논한다면 [math(±∞)] 정도의 기호로 괜찮지만, 복소 유리함수 [math(w=1/z)]에서 [math(w)]의 [math(z=0)] 근처의 모든 값을 하나의 기호로 정의하기 위해선 위와 같은 특수한 기호를 활용해야 한다. 해당 기호는 부호(sgn 함숫값)와 실수부, 허수부가 정의되지 않는 특이한 상태함수 정도로 생각하면 되며, 이를 가지고 사칙연산을 정의한다면 바퀴 이론에서처럼 매우 복잡하게 정의해야 한다. 자세히 알고 싶다면 해당 항목을 참조해도 좋다.

5. 프로그램에서

파일:Screenshot_20230724-174351.jpg
파일:Screenshot_20201120-221732_Calculator.jpg
<rowcolor=#000,#fff> OnePlus 계산기에서의 결과 삼성 계산기에서의 결과[6]
계산기컴퓨터 등에 0으로 나누기를 시키면 "0으로는 나눌 수 없습니다"라는 메시지를 보낸다. 나눗셈은 정수(int 자료형)만을 다루는 고전적인 프로그래밍에서 '뺄셈의 반복'으로 구현할 수밖에 없기 때문. 예를 들면 8÷2를 하면 피제수에서 제수를 0보다 작거나 같게 될 때까지 계속 뺀다. 즉 8-2-2-2-2...를 하면 0이 되는데, 이때 -2를 4번 반복했으므로 몫은 4가 되는 식. 이래서 대부분의 경우 계산기나 컴퓨터에서 나눗셈은 몫과 나머지만 구한다.

근데 만약 0으로 나눈다면 -0을 해야 하는데, 어떤 숫자에서 0을 빼봤자 그 숫자는 아무 변화도 일어나지 않는다. 하지만 계산 원리상 피제수가 0이 될 때까지 제수를 빼야 하니까, 계속 -0을 하는 것으로 무한 루프가 되어 영원히 끝나지 않으며, 랙이 걸리면서 같은 작업만 무한 반복 하다가 과열로 물리적인 손상까지 일으킬 수 있다. 그래서 나눗셈을 하기 전에 제수가 0인지 확인하여, 만약 0이면 즉시 division by zero 또는 divided by zero 에러를 출력하게 된다. 엑셀에서는 숫자를 0으로 나눌 시 '#DIV/0!' 이라는 오류가 뜬다. 삼성 갤럭시 S2로 나누기 0을 하면 무한 루프 기호를 출력한다.[7] 아이폰은 오류라고 뜬다.[8]

Windows의 계산기는 Windows 98을 제외하고는 0으로 나눌 수 없다고 나오지만 Windows 98만 '오류: 양의 무한대'라고 뜬다.

다만 현재의 CPU는 뺄셈의 반복으로 나눗셈을 구현하지 않는다. 나눠야 할 수가 크면 더 많은 연산이 필요하기에 오버헤드가 상당해지기 때문이다. 따라서 나눗셈을 빠르게 처리하기 위해 여러 알고리즘이 적용되어 있다. 그리고 아예 0으로 나누기가 인터럽트로 구현되어 있어 0으로 나누기가 발생할 경우 인터럽트가 발생한다. OS는 인터럽트를 적절하게 처리하여 프로세스에 전달한다.

정수(int) 자료형이 아니라서 뺄셈의 반복이 아닌 곱셈의 역연산, 혹은 역수와의 곱셈으로 정의하는 경우, 0으로 나누면 에러를 출력하는 대신, 양 또는 음의 무한대(Infinity) 또는 NaN(Not a number)을 결괏값으로 리턴하기도 한다. C++에서는 부동 소수점(float)을 0으로 나눌 경우 inf가 출력되는데, 프로그램에서 명시된 0을 0에 근접하는 어떠한 수로 취급하기 때문이다. 극한의 개념으로 이해하면 쉽다. 이러한 수로 나누면 분모 분자가 한없이 작아지며 음이나 양의 무한대로 발산해서 inf를 리턴하게 되는것이다. 다만, 부동 소수점 특성상 정확한 표기가 불가능하여 근삿값으로 치환하기에 극한에 가까운 개념이지만, 엄밀히 말해서 수학적인 극한은 아니다. 프로그래밍에서 다룰 수 없는 작은 수는 0(무한소)으로 취급하며, 반대로 큰 수는 inf(무한대)로 취급하기 때문이다.

어떤 상황에서도 프로그램이 죽지 않는 환경을 만들기 위해서 필요하다. 어떻게 보면 0으로 나누는 문제는 단순히 정의하지 않으면 끝인 수학과는 달리, 0으로 나누어서도 나오는 결과를 특수한 숫자로 반환해야 하고, 또한 이렇게 생긴 특수한 숫자에서 생긴 대수까지 정의해야 하기 때문에 수학자들보다 프로그래머들이 이 문제에 대해 더 깊이 고민하는 경우가 많다.

수학 문제를 풀 때처럼 미리 0이 되는지 판별하고 공식을 적용하듯이, 프로그래밍에서도 똑같이 적용할 수 있느냐고 반론할 수 있지만,
임의의 프로그램이 0이라는 결과를 내는지 프로그램을 직접 돌리기 전에 판별하는 문제는 정지 문제로 환원될 수 있기 때문에(if 0일 때 무한 루프를 돌리는 알고리즘이 정지하는지 판별하는 문제로 변환할 수 있다.) 이런 문제를 프로그래밍으로 해결하는 것은 불가능하다.
20세기 중반에 사용하던 기계식 계산기에서 0으로 나눴을 때 발생하는 현상.
0으로 나누자 계산기가 멈추지 않고 계속 작동하는 것을 볼 수 있다. 이 계산기에서는 0으로 나누기 오류에서 빠져나가기 위해 〈DIV STOP(나눗셈 정지)〉 레버가 따로 달려 있다. 고의든 실수든 0으로 나누기를 해서 무한 루프에 빠지는 상황을 대비하기 위한 것.

과거 운영 체제들에서 프로그램이 0으로 나누기를 시전하면 커널 패닉에 빠졌다. 윈도우 9x 계열에서는 오류를 잡지 못하면 블루스크린이 뜬다.[9] 요즘 운영 체제들은 프로그램만 죽고 OS는 영향을 받지 않는다. 특이한 사례로 MS-DOS의 편집기에서 특정한 파일을 열려고 하면 '0으로 나누었습니다'라는 오류가 뜨기도 한다.

미 해군의 타이콘데로가급 순양함 CG-48 요크타운호도 1997년 엔진 제어 프로그램에서 0으로 나누기 버그가 일어나는 바람에 바다 위에 무려 3시간 동안 고철처럼 떠있기도 했다.

이런 연산이 발생할 수 있는 사례 중 하나를 들자면, ABS가 있다. 해당 항목을 보면 미끄러트림의 비율이라는 숫자가 있는데, 이걸 공식으로 생각해 보면 특정 바퀴의 속도 / 차량 속도가 되는데, 차량 속도가 0인 경우는 당연히 존재하므로, 프로그래밍을 할 때 충분히 고려가 필요하다.

0으로 나누기 때문에 회사 하나가 파산한 적이 있다. 한맥투자증권이 말 그대로 /0 한번 잘못 눌러서 파산했다.

6. 대중 매체



[1] 따라서 0으로 나누기를 정의하려면, 나머지가 나누는 수보다 크면 안된다는 공리를 깨야 한다. 0으로 나누기를 정의하기 위해 특수규칙을 만들어야 하는 셈. 이렇게 정의한다면, 0으로 나누면 항상 몫은 0(혹은 모든 수)이고, 나머지는 항상 나누어지는 수와 같아진다.[2] unsigned infinity라고 하기도 한다. 쉽게 말해 양이나 음의 무한대가 아닌, 모든 방향으로의 무한대이다.[3] 영인자가 아닌 수를 영인자로 나눌 경우[4] 영인자 혹은 0을 영인자로 나눈 경우[5] [math( 0\cdot x = 0 )]이 될 수밖에 없는 이유는 위에서 설명했다.[6] 아예 계산 버튼이 눌리지 않는다. 최신 버전에선 '0으로 나눌 수 없어요.'라는 토스트 메시지가 나오며, 0을 0으로 나누면 '완성되지 않은 수식입니다.'라는 토스트 메시지가 나온다.[7] [math(\displaystyle \lim_{x\rightarrow 0}(\frac{n}{x})=\infty)]으로, 제수의 절댓값이 작아질수록 몫이 커지는데, 이것 때문인 듯하다.[8] Siri를 통해서 계산하면 쿠키 몬스터의 비유를 들며 '부정'이라는 값을 내놓는다.[9] 정확히는 그 오류를 잡았건 못 잡았건 블루스크린이 뜨는 것에 가깝다. 당시의 블루스크린은 현재의 블루스크린과 달리(정확히는 2000부터의 블루스크린) 커널 패닉이 아닌 프로그램 오류로도 뜰 수 있었기 때문. 자세한 건 블루스크린 참조.[10] 간단한데, 계산 전에 수식을 검사해서 0으로 나누기가 발견되면 그냥 계산하지 않고 넘겨 버리면 된다.

분류