수와
연산 Numbers and Operations |
|||
{{{#!wiki style="margin:0 -10px -5px;min-height:2em" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin:-6px -1px -11px" |
<colbgcolor=#765432> 수 체계 | 자연수 ( 홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 ( 정수가 아닌 유리수) · 실수 ( 무리수 · 초월수) · 복소수 ( 허수) · 사원수 | |
표현 | 숫자 ( 아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 수식 · 기수법 · 진법 ( 십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 ( 분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 { 유한소수 · 무한소수 ( 순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수 | ||
연산 | 사칙연산 ( 덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 ( 이중근호) · 거듭제곱 · 로그 ( 상용로그 · 자연로그) · 검산 · 연산자 · 교환자 | ||
방식 | 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자 | ||
용어 | 이항연산 · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙 | ||
기타 | 수에 관련된 사항 ( 0과 1 사이의 수 · 음수) · 혼합 계산 ( 48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기 · 0의 0제곱 · 바퀴 이론 | }}}}}}}}} |
1. 개요
0을 제수( 除 數)로 하여 어떤 수를 나눗셈하는 행위. 0이라는 수의 특성상 이는 수학적으로 성립되지 않는 개념이다. 0으로 나누기를 허용하게 되면 무연근을 진짜 근으로 오해하거나, 1=2가 참이 되는 등,[1] 수학의 기초 그 자체가 무너진다.쉽게 설명하면 이렇게 된다.
- 나눗셈은 나눌 수에 나누는 수를 몇 번 뺄 수 있는지 계산하면 된다.
- ( 무한은 숫자가 아니지만) 그 어떤 수도 0으로는 계속, 그러니까 무한 번 뺄 수 있다.
- 나눈 결과를 나누는 수와 곱하고 나머지를 더하면 나누었던 수가 되어야 한다.
- 하지만 0으로 곱하면 무조건 결과는 0이 되고 나머지는 없다.
- 따라서 이는 성립하지 않는다.
1.1. 더 자세한 설명
나눗셈이라는 연산은 '뺄셈의 반복'이다. a÷b=c는 a를 0으로 만들기 위해 a에서 b를 빼는 것을 반복한 횟수가 c인 것이다. 예를 들면, 12÷4=3은 12에서 4를 빼는 것을 3회 반복하면 0이 된다는 뜻이다. 45÷5=9의 경우, 45-5=40, 40-5=35, ..., 이런 식으로 45에서 5를 9번 빼주면 0이 된다는 뜻이다. 즉, 임의의 수를 0으로 나눈다는 것은 해당 수에서 0을 뺀 횟수를 세는 것과 동일하다. 그런데 0은 덧셈에 대한 항등원이므로, 아무리 0으로 뺄셈을 해도 값이 변하지 않아 연산의 의미가 없어진다. 예를 들어 1÷0=을 뺄셈으로 풀어 생각하면, 1-0=1, 1-0=1...만 무한 반복하게 되며 이런 식으로는 영원히 답이 나올 수 없다.수 체계를 바꾸면 0으로 나누기가 성립할 수도 있다. 가령 Riemann Sphere에서는 무한이 숫자로 간주되고 이를 이용하여 0으로 나누기를 정의한다.[2] '0으로 나누기가 불가능하다'라고 이야기할 때에는 보통 고등학교까지 배우는 복소수까지를 전제하고 이야기한다. 정말 수학과 전공 영역으로 넘어가서 나눗셈을 다루면 애초에 수의 개념과 연산의 개념부터 시작해서 교과과정에서 배운 것을 거진 다 갈아엎어야 한다. 본 문서에서는 정규 교과과정과 부합하는 내용을 다루며, 이를 넘어가는 부분은 항목 말미에 따로 추가한다.
2. 수학에서 엄밀한 정의
'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밖에 없게 되기 때문이다.[3] 따라서 실수체, 복소수체를 비롯하여 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으로 나누게 되는 특이점을 찾을 수 있다.
2.1. 바퀴 이론
3. 프로그램에서 0으로 나누기
|
|
구글 계산기에서의 결과 | 삼성 계산기에서의 결과[4] |
일부 언어에서는 0으로 나누면 에러를 출력하는 대신, 양 또는 음의 무한대(Infinity) 또는 NaN(Not a number)을 결과값으로 리턴하기도 한다. 어떤 상황에서도 프로그램이 죽지 않는 환경을 만들기 위해서 필요하다. 어떻게 보면 0으로 나누는 문제는 단순히 정의하지 않으면 끝인 수학과는 달리, 0으로 나누어서도 나오는 결과를 특수한 숫자로 반환해야 하고, 또한 이렇게 생긴 특수한 숫자에서 생긴 대수까지 정의해야 하기 때문에 수학자들보다 프로그래머들이 이 문제에 대해 더 깊이 고민하는 경우가 많다.
수학 문제를 풀 때처럼 미리 0이 되는지 판별하고 공식을 적용하듯이, 프로그래밍에서도 똑같이 적용할 수 있느냐고 반론할 수 있지만,
임의의 프로그램이 0이라는 결과를 내는지 프로그램을 직접 돌리기 전에 판별하는 문제는 정지 문제로 환원될 수 있기 때문에 (If 0일때 무한 루프를 돌리는 알고리즘이 정지하는지 판별하는 문제로 변환할 수 있다) 이런 문제를 프로그래밍으로 해결하는 것은 불가능하다.
20세기 중반에 사용하던 기계식 계산기에서 0으로 나눴을 때 발생하는 현상. |
과거 운영체제들에서 프로그램이 0으로 나누기를 시전하면 커널 패닉에 빠졌다. 윈도우 9x 계열에서는 오류를 잡지 못하면 블루스크린이 뜬다.[7] 요즘 운영체제들은 프로그램만 죽고 OS는 영향을 받지 않는다.
미 해군의 타이콘데로가급 순양함 CG-48 요크타운 호도 1997년 엔진 제어 프로그램에서 0으로 나누기 버그가 일어나는 바람에 바다 위에 무려 3시간 동안 고철처럼 떠있기도 했다.
4. 기타
- 0을 0으로 나누는 것[math(\displaystyle \left ( \frac{0}{0} \right ))]도 똑같이 정의되지 않는다. 무한 곱하기 0, 무한을 무한으로 나누는 것, 무한에서 무한을 빼기도 같은 원리다. 다만, 이를 변형하여 [math(0\cdot x = 0)]이라는 방정식의 해를 구하는 것이라면, 이는 모든 실수 [math(x)] 에 대해서 성립하므로 ' 부정'이라고 표현한다. [math(0\cdot x = 1)]이라는 방정식에는 해가 하나도 없어서 ' 불능'이라고 표현하는 것과 조금 차이가 있다.
- 반대로 0이 다른 수에 의해 나뉘는 건 가능하다. 결과는 무조건 0. 그 까닭은 [math(a)]가 0이 아닌 복소수범위 안의 수일 때, [math(\displaystyle \frac{0}{a} = b \rightarrow 0 = a \times b)]가 되어 [math(b)]는 반드시 0밖에 될 수 없기 때문이다.
- 0에 무한대를 곱하는 것은, '무한대는 수가 아니므로' 애초에 정의되지 않는다. 다만, 비슷한 것이 극한에서 정의되는 경우가 있긴 하다. 극한에서[math(\displaystyle \frac{0}{0})] 꼴이나 [math(\displaystyle \frac{\infty}{\infty})] 꼴로 나오는 경우가 있는데, 이때는 진리의 로피탈의 정리로 해결되는 경우가 대부분이고 아니면 테일러 급수도 널리 쓰인다.
- 비슷한 것으로 0의 0제곱이 있다.
- 이원수 및 분할복소수에서는 [math(\epsilon^2 = 0, \epsilon \neq 0)]으로 정의하는 멱영원, [math(j^2 = 1, j \neq 1)]로 정의하는 멱일원의 성질로 [math(\epsilon^2 = (1 + j)(1 - j) = 0)]라는 성질을 이용해서 [math(\epsilon^2)] 또는 [math((1 + j)(1 - j))]로 나눌 수 있다. 물론 이렇게 나누고 나면 더 이상 이원수나 분할복소수로 나타낼수 없는 수이므로 별 의미는 없다.[8]
- 0으로 나누기는 아예 정의하지 않기 때문에, 유리수, 실수, 복소수의 집합은 사칙연산에 대해서 닫혀 있다고 본다. 임의의 유리수, 실수, 복소수를 0으로 나누었을 때의 결과가 각각 유리수, 실수, 복소수가 아닌 수가 나온다는 약속이 되어 있다면 닫혀 있다고 할 수 없겠으나, 아예 값이 '정의되어 있지 않다'는 것이다.
4.1. 창작물에서
- 창작물에서 이 계산이 개그로 쓰이며, 이 식이 적힌 부분에서 검은 구멍이 생기더니 그대로 블랙홀이 생성되어 온 세상이 그대로 어둠에 휩싸이는 개그가 존재한다.
- 검볼에서 핸드폰을 보지 못하게 하려고 다윈이 " 시리야 0으로 나누기해"라고 하자[9] 핸드폰에서 블랙홀이 생성되었다. 그리고 리차드 워터손이 계산기를 게임으로 착각하고 0으로 나눴더니 컴퓨터가 터지는 장면이 있다.
- MS-DOS의 편집기에서 특정한 파일을 열려고 하면 '0으로 나누었습니다'라는 오류가 뜨기도 한다.
- 수학 귀신에선 주인공 로베르트가 '왜 0으로 나누면 안돼?'라고 굳이 질문하자, 수학귀신인 테플로탁슬은 '그러면 수학이란 세계 자체가 무너져 버린다'라며 0으로 나누기가 왜 안 되는지를 설명한다.
- 0으로 나누기가 컴퓨터를 바보로 만들어 버린다는 것이 널리 알려지기 시작한 1990년대부터 이는 각종 창작물에서 전자기기나 그에 기반한 로봇, 안드로이드 캐릭터들을 무력화하는 수단으로 취급되었다. 최근에 와서는 현실에서 프로그래머들이 이를 쉽게 해결해 버리자 잘 다뤄지지 않게 되었다. 이 뒤에 등장한 방법은 옛날부터 쓰던 바이러스, 프로그램 수백개 실행, EMP 등이 쓰인다.
[1]
정확히는 모든 수가 같아진다. 0×m=0×n에서 양변을 0으로 나누면 m=n이 성립하므로.
[2]
수 체계를 바꾸면 익숙한 연산도 이상하게 변한다. 가령
사원수에서는 곱셈의 교환법칙이 성립하지 않는다. 0으로 나누기가 가능하려면 환구조를 포기하거나 1=0인 0환이어야하는데 전술한 Riemann Sphere는 [math(\infty=-1\times\infty)]가 되어버리므로 [math(\infty-\infty=\infty+\infty)]나 [math(0\times-\infty=0\times\infty)]가 잘 정의되지 않아 환이 아닌 경우에 속한다.
[3]
[math( 0\cdot x = 0 )]이 될 수밖에 없는 이유는 위에서 설명했다.
[4]
아예 계산 버튼이 눌리지 않는다. 최신 버전에선 '0으로 나눌 수 없어요.'라는 토스트 메시지가 나오며, 0을 0으로 나누면 '완성되지 않은 수식입니다.'라는 토스트 메시지가 나온다.
[5]
[math(\displaystyle \lim_{x\rightarrow 0}(\frac{n}{x})=\infty)]으로, 제수의 절대값이 작아질 수록 몫이 커지는 데, 이것 때문인 듯하다.
[6]
시리를 통해서 계산하면 ‘부정’이라고 나온다.
[7]
정확히는 그 오류를 잡았건 못 잡았건 블루스크린이 뜨는 것에 가깝다. 당시의 블루스크린은 현재의 블루스크린과 달리(정확히는 2000 부터의 블루스크린)
커널 패닉이 아닌 프로그램 오류로도 뜰 수 있었기 때문. 자세한 건
블루스크린 참조.
[8]
엄밀히 말해서 이원수와 분할복소수의 덧셈, 뺄셈, 곱셈구조(환)을 망가뜨리지 않고 추가할 방법이 없다. 0으로 나누기가 가능한 환은 0환뿐이기 때문
[9]
폰의 주인은 바나나조. 실제로는 계산을 수행하지 않고 대신
쿠키 몬스터 이야기를 한다.