0으로 나누기

최근 편집일시 :



1. 개요
2. 기본적인 수 체계에서
2.1. 관련 특징
3. 수학에서 엄밀한 정의
4. 1÷0=∞?
5. 프로그램에서
6. 창작물에서


1. 개요[편집]


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


2. 기본적인 수 체계에서[편집]


사람들이 흔히 쓰는 실수나 복소수 정도에서는, 0이라는 수의 특성상 이는 수학적으로 성립되지 않는 개념이다. 0으로 나누기를 허용하게 되면 무연근을 진짜 근으로 오해하거나, 1=2가 참이 되는 등[1], 수학의 기초 그 자체가 무너진다. 참조.

쉽게 설명하면 이렇게 된다.
  1. 나눗셈은 나누어지는 수([math(a)])에 나누는 수([math(b)])를 몇 번([math(q)]) 뺄 수 있는지 계산하면 된다.
  2. (무한은 숫자가 아니지만) 그 어떤 수도 0으로는 계속, 그러니까 무한 번 뺄 수 있다.
  3. 나눈 결과([math(q)])를 나누는 수([math(b)])와 곱하고 나머지([math(r)])를 더하면 나누어지는 수([math(a)])가 되어야 한다.
  4. 하지만 [math(0)]으로 곱하면 무조건 결과는 [math(0)]이 되고 나머지는 없다.
  5. 따라서 이는 성립하지 않는다.

나눗셈이라는 연산은 '뺄셈의 반복'이다. 수식 [math(a÷b=c)]는 [math(a)]를 [math(0)]으로 만들기 위해 [math(a)]에서 [math(b)]를 빼는 것을 반복한 횟수가 [math(c)]이라는 뜻이다.[예] 즉, 임의의 수를 [math(0)]으로 나눈다는 것은 해당 수에서 [math(0)]을 뺀 횟수를 세는 것과 동일하다. 그런데 [math(0)]은 덧셈에 대한 항등원이므로, 아무리 [math(0)]으로 뺄셈을 해도 값이 변하지 않아 연산의 의미가 없어진다. 예를 들어 [math(1÷0)]을 뺄셈으로 풀어 생각하면, [math(1-0=1)], [math(1-0=1...)]만 무한 반복하게 되며 이런 식으로는 영원히 답이 나올 수 없다.

2.1. 관련 특징[편집]


  • 0으로 나누기를 정의하지 않기 때문에, 유리수, 실수, 복소수집합사칙연산에 대해서 닫혀 있다고 본다. 임의의 유리수, 실수, 복소수를 0으로 나누었을 때의 결과가 각각 유리수, 실수, 복소수가 아닌 수가 나온다는 약속이 되어 있다면 닫혀 있다고 할 수 없겠으나, 아예 값이 '정의되어 있지 않다'는 것이다.

  • 0을 0으로 나누는 것[math((0÷0))]은 수학의 대표적인 부정형이다. 즉 [math(1+1)]이나 [math(4÷2)]같은 일반적인 사칙연산과는 달리, 그 값이 하나로 정해지지 않는다는 것이다.[2] 무한 곱하기 0, 무한을 무한으로 나누는 것, 무한에서 무한을 빼기도 같은 원리다.[3] 그 이유는 부정형 참고. 극한이 아닌 일반적인 이유로는, 나눗셈은 [math(\Large \frac{a}{b} \normalsize =c)]의 꼴인데, 양변에 b를 곱하면 [math(c \times b=a)]로 표현할 수 있다. 그런데 여기서 나누는 수와 나눠지는 수가 모두 0이 되면, 즉 [math(a=0, b=0)] 이 되면, [math(0\cdot c = 0)]이 되어 나눈 결과, 다시 말해 [math(c)]에는 모든 수가 들어가도 성립하게 된다. 이런 이유로 0을 0으로 나누는 것은 값을 하나로 정할 수 없다.
    • 반대로 0을 0이 아닌 수로 나누는 건 가능하다. 결과는 무조건 0. 그 까닭은 [math(a)]가 0이 아닌 복소수범위 안의 일 때, [math(\displaystyle \frac{0}{a} = b \rightarrow 0 = a \times b)]가 되어 [math(b)]는 반드시 0밖에 될 수 없기 때문이다.

  • 0에 무한대를 곱하는 것[math(\displaystyle \left(0 \times \infty\right))]도 일반적으로 정의되지 않는다. 자세한 내용은 부정형 참고. 예외적으로 극한에서 정의되는 경우가 있긴 하다. 극한에서[math(\displaystyle \frac{0}{0})] 꼴이나 [math(\displaystyle \frac{\infty}{\infty})] 꼴로 나오는 경우가 있는데, 이때는 진리의 로피탈의 정리로 해결되는 경우가 대부분이고 아니면 테일러 급수도 널리 쓰인다.


  • 열역학 법칙에서 절대영도가 불가능한 이유가 다름아닌 0으로 나누기이다. 역온도 [math(1/k_{\rm B}T)]에 대해서 절대영도가 저기서 [math(T=0)]인 상황이기 때문. 그래서 보통 절대영도에 도달하려면 무한대의 역온도가 필요하다고도 한다. 0으로 나누기와 자주 엮이는 1=2 역시 과학에서는 질량 보존 법칙과 대응된다.

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밖에 없게 되기 때문이다.[4] 따라서 실수체, 복소수체를 비롯하여 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으로 나누게 되는 특이점을 찾을 수 있다.


  • 이원수 및 분할복소수에서는 [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))]로 나눌 수 있다. 물론 이렇게 나누고 나면 더 이상 이원수나 분할복소수로 나타낼수 없는 수이므로 별 의미는 없다.[5]

  • 수 체계를 바꾸면 0으로 나누기가 성립할 수도 있다. 가령 Riemann Sphere에서는 무한이 숫자로 간주되고 이를 이용하여 0으로 나누기를 정의한다.[6]


3.1. 바퀴 이론[편집]


파일:나무위키상세내용.png   자세한 내용은 바퀴 이론 문서를 참고하십시오.


4. 1÷0=∞?[편집]


하지만 어떻게 보면, 다음과 같은 이유로 어떤 0이 아닌 수를 0으로 나눈 몫이 무한대라고 주장하는 사람들도 있을 것이다.
[math(\frac{1}{0.1}=10)]
[math(\frac{1}{0.01}=100)]
[math(\frac{1}{0.001}=1000)]
[math(\frac{1}{0.0001}=10000)]
[math(\therefore \frac{1}{0}=\infty)]
간단히 말해, 나누는 수가 0으로 수렴할수록, 몫은 점점 무한대로 발산하므로, 1÷0또한 무한대가 아닐까? 하는 주장이라 볼 수 있다.
하지만 이 주장은 오류가 있다. 우선 기본적으로 '무한대'는 한없이 큰 것이라는 '개념'으로서의 기호이지, '수' 로서의 의미를 가지지 않는다. 그러므로 수와 수를 연산한 결과가 수가 아닌 개념으로 나온다는 것은 잘못되었다고 할 수 있다.[7] 그리고 백 번 양보해서 설령 무한대를 수로 간주한다 해도 문제가 발생하는데...
[math(\frac{1}{-0.1}=-10)]
[math(\frac{1}{-0.01}=-100)]
[math(\frac{1}{-0.001}=-1000)]
[math(\frac{1}{-0.0001}=-10000)]
[math(\frac{1}{0}=-\infty)]
[math(\therefore \infty=-\infty)]
즉 1/0을 무한대로 간주하면, 양의 무한대와 음의 무한대가 같은 값이 되어버리는데 우리가 알고 있는 무한대의 성질에서 벗어나는 결과가 얻어진다는 것이다. 이것을 가지고 우리는 '1/0은 무한대가 아니다'라고 할 수 있을 것이다.

5. 프로그램에서[편집]


파일:Screenshot_20230724-174351.jpg
파일:Screenshot_20201120-221732_Calculator.jpg
OnePlus 계산기에서의 결과
삼성 계산기에서의 결과[8]
계산기컴퓨터 등에 0으로 나누기를 시키면 "0으로는 나눌 수 없습니다"라는 메시지를 보낸다. 계산기에서 나눗셈은 일반적으로 '뺄셈의 반복'으로 구현했기 때문. 예를 들면 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을 하면 무한루프 기호를 출력한다.[9] 아이폰은 오류라고 뜬다.[10]

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

일부 언어에서는 0으로 나누면 에러를 출력하는 대신, 양 또는 음의 무한대(Infinity) 또는 NaN(Not a number)을 결과값으로 리턴하기도 한다.[11] 어떤 상황에서도 프로그램이 죽지 않는 환경을 만들기 위해서 필요하다. 어떻게 보면 0으로 나누는 문제는 단순히 정의하지 않으면 끝인 수학과는 달리, 0으로 나누어서도 나오는 결과를 특수한 숫자로 반환해야 하고, 또한 이렇게 생긴 특수한 숫자에서 생긴 대수까지 정의해야 하기 때문에 수학자들보다 프로그래머들이 이 문제에 대해 더 깊이 고민하는 경우가 많다.

수학 문제를 풀 때처럼 미리 0이 되는지 판별하고 공식을 적용하듯이, 프로그래밍에서도 똑같이 적용할 수 있느냐고 반론할 수 있지만,
임의의 프로그램이 0이라는 결과를 내는지 프로그램을 직접 돌리기 전에 판별하는 문제는 정지 문제로 환원될 수 있기 때문에 (If 0일때 무한 루프를 돌리는 알고리즘이 정지하는지 판별하는 문제로 변환할 수 있다) 이런 문제를 프로그래밍으로 해결하는 것은 불가능하다.


20세기 중반에 사용하던 기계식 계산기에서 0으로 나눴을 때 발생하는 현상.
0으로 나누자 계산기가 멈추지 않고 계속 작동하는 것을 볼 수 있다. 이 계산기에서는 0으로 나누기 오류에서 빠져나가기 위해 〈DIV STOP(나눗셈 정지)〉 레버가 따로 달려 있다. 고의든 실수든 0으로 나누기를 해서 무한 루프에 빠지는 상황을 대비하기 위한 것.

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

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

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

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

6. 창작물에서[편집]


  • 창작물에서 이 계산이 개그로 쓰이며, 이 식이 적힌 부분에서 검은 구멍이 생기더니 그대로 블랙홀이 생성되어 온 세상이 그대로 어둠에 휩싸이는 개그가 존재한다.

  • 검볼에서 다윈이 토비아스가 핸드폰에 온 메일을 보지 못하게 하려고 "퀴리야 0으로 나누기해"라고 하자 핸드폰에서 블랙홀이 생성되어 토비아스를 빨아들였다... 그리고 리처드가 계산기를 게임으로 착각하고 0으로 나눴더니 컴퓨터가 터지는 장면도 있다.


  • 수학 귀신에선 주인공 로베르트가 '왜 0으로 나누면 안돼?'라고 굳이 질문하자, 수학귀신인 테플로탁슬은 '그러면 수학이란 세계 자체가 무너져 버린다'라며 0으로 나누기가 왜 안 되는지를 설명한다.

  • 0으로 나누기가 컴퓨터를 바보로 만들어 버린다는 것이 널리 알려지기 시작한 1990년대부터 이는 각종 창작물에서 전자기기나 그에 기반한 로봇, 안드로이드 캐릭터들을 무력화하는 수단으로 취급되었다. 최근에 와서는 현실에서 프로그래머들이 이를 쉽게 해결해 버리자 잘 다뤄지지 않게 되었다. 이 뒤에 등장한 방법은 옛날부터 쓰던 악성코드, 역설, 프로그램 수백개 실행, EMP 등이 쓰인다.

  • 수학자가 만든 카드게임인 매직 더 개더링에선 영으로 나누기란 이름으로 등장. 비용이 0만 아니라면 전장이건 스택이건 카드 하나를 손으로 돌려보내고 학습하는 효과를 가지고 있다.

[1] 단순히 [math(1)]과 [math(2)]의 값이 같아진다는 게 아니라 무려 모든 수가 같은 값이 된다. 심지어 양의 무한대와 음의 무한대마저도 상대적 무한이라면 같은 값이 되어버린다. [math(0×m=0×n)]에서 양변을 [math(0)]으로 나누면 [math(m=n)]이 성립하므로. 원래 아주 미세하게라도 차이가 있는 서로 다른 수가 서로 같은 값이 되는 그 사실만으로도 수학에서는 1=2성립되어버린다.[예] [math(12÷4=3)]은 [math(12)]에서 [math(4)]를 빼는 것을 세 번 반복하면 [math(0)]이 된다는 뜻이다. [math(45÷5=9)]의 경우, [math(45-5=40)], [math(40-5=35)], ..., 이런 식으로 [math(45)]에서 [math(5)]를 아홉 번 빼주면 [math(0)]이 된다는 뜻이다.[2] 아이러니하게도 분모와 분자가 각각 0인 분수는 나누기 기호처럼 생겼다.[3] 그런데 그들은 적어도 결과값이 실수만 해당되지만 0끼리 나누는 경우 결과값이 허수를 포함한 모든 수가 된다.[4] [math( 0\cdot x = 0 )]이 될 수밖에 없는 이유는 위에서 설명했다.[5] 엄밀히 말해서 이원수와 분할복소수의 덧셈, 뺄셈, 곱셈구조(환)을 망가뜨리지 않고 추가할 방법이 없다. 0으로 나누기가 가능한 환은 0환뿐이기 때문[6] 연산도 흔히 보던 것과 다르게 변한다. 0으로 나누기가 가능하려면 환구조를 포기하거나 1=0인 0환이어야 하는데, Riemann Sphere는 [math(\infty=-1\times\infty)]가 되어버리므로 [math(\infty-\infty=\infty+\infty)]나 [math(0\times-\infty=0\times\infty)]가 잘 정의되지 않아 환이 아닌 경우에 속한다.[7] [math(\frac{1}{\infty}=0)]이라는 식도 무한대는 수가 아니므로 수학적으로 별 의미가 없다.[8] 아예 계산 버튼이 눌리지 않는다. 최신 버전에선 '0으로 나눌 수 없어요.'라는 토스트 메시지가 나오며, 0을 0으로 나누면 '완성되지 않은 수식입니다.'라는 토스트 메시지가 나온다.[9] [math(\displaystyle \lim_{x\rightarrow 0}(\frac{n}{x})=\infty)]으로, 제수의 절대값이 작아질 수록 몫이 커지는 데, 이것 때문인 듯하다.[10] Siri를 통해서 계산하면 쿠키 몬스터의 비유를 들며 '부정'이라는 값을 내놓는다.[11] c++에서는 부동소수점을 0으로 나눌 경우, inf가 출력되는데 프로그램에서 명시된 0을 0에 근접하는 어떠한 수로 취급하기 때문이다. 극한의 개념으로 이해하면 쉽다. 이러한 수로 나누면 분모 분자가 한없이 작아지며 음이나 양의 무한대로 발산해서 inf를 리턴하게 되는것이다. 다만, 부동소수점 특성상 정확한 표기가 불가능하여 근삿값으로 치환하기에 극한에 가까운 개념이지만, 극한은 아니다. 왜 극한이 아닌지는 극한문서 참조.[12] 정확히는 그 오류를 잡았건 못 잡았건 블루스크린이 뜨는 것에 가깝다. 당시의 블루스크린은 현재의 블루스크린과 달리(정확히는 2000 부터의 블루스크린) 커널 패닉이 아닌 프로그램 오류로도 뜰 수 있었기 때문. 자세한 건 블루스크린 참조.


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-14 07:01:14에 나무위키 0으로 나누기 문서에서 가져왔습니다.