Other Maths

1. "틀왜맞?" : Math.max() == -Infinity

nflight11 2022. 11. 14. 20:16

첫 번째 수학 포스트로는 인터넷 짤이 걸맞을 것 같다.

 

Javascript 안티들이 만든 한 장의 사진이 있다.

젤나가 맙소사.

이 사진 속의 모든 식은 실제로 Javascript에서 작동시킨 결과인데, 상식적으로 말이 안 되(어 보이)는 것들이 널려 있다.

아니, 왜 0.1+0.2가 0.3이 아닌 거지? 0.5+0.1은 0.6이라면서! 왜 NaN(Not A Number)라면서 자료형은 숫자냐?

태클 걸 것이 한 바가지이지만, 프로그래밍을 잘 모르는 수학적 공대생의 눈에 보이는 억까가 두 개 있다.

그렇다. 이놈들이다.

억울한 두 녀석들

억까처럼 안 보인다고? 최댓값을 뽑았는데 왜 음의 무한대가 나오는지 이해가 안 된다고?

하지만 수학적으로 옳은 사실이다. 이 글에서는 그 이유를 알아보고자 한다.

 

우선 자바스크립트의 Math.max(a, b, ...) 함수는 입력값으로 받은 숫자 a, b, ... 들 중에서 가장 큰 값을 반환한다.

이를 수학적으로 고친다면, \(\max\{a, b, \cdots\}\)와 같은 말이다.

실수집합은 아무 숫자 두 개나 뽑아도 두 개의 순서를 비교할 수 있는 전순서집합이기 때문에, 그 유한부분집합 M에 대해서는 \(\max M = \sup M\)이다.

일단은 \(\max M\)은, 모든 원소들의 크기를 하나하나 비교하면 존재함을 당연히 알 수 있고, \(\sup M\)이 무엇이냐. M의 최소상계(혹은 상한)이라고 부른다.

최소상계란 무엇이냐면 상계 중 가장 작은 값이란 것이고, x가 어떤 집합 M의 상계라는 것은 \(p\in M \Rightarrow p\le x\)라는 것을 의미한다.

당연히 상계는 여러 개다. 집합 I를, \(I=(0, 1)=\{x\mid 0<x<1\}\)로 둔다면, 1 이상의 모든 실수는 I의 상계이다. 이제 M의 상계들의 모임에서 가장 작은 수를 M의 최소상계(혹은 상한)이라고 하고, \(\sup M\)으로 표기하는 것이다.

아, 당연히 최소상계는 최댓값이랑 같지 않을 뿐더러, 최댓값을 갖지 않는 집합이 있다. 예를 들면 방금 말한 집합 I가 그러하다.

 

자, 그렇다면 지금까지 말한 것으로 이 식이 성립함을 보인 것이다.

\[\text{Math.max}(a, b, \cdots) = \sup\{a, b, \cdots\}\]

그러면 Math.max()에 아무 것도 안 집어넣었을 때는 어떻게 될까? 그 때는 이걸 구하는 문제가 된다.

\[\text{Math.max}() = \sup\emptyset\]

공집합의 상한을 구하기 위해서는 상계들부터 먼저 구해야 하겠다.

 

만약 어떤 실수 x가 \(\emptyset\)의 상계라면 다음 식이 성립할 것이다.

\[p\in\emptyset \Rightarrow p\le x\]

어떤 명제는 그 대우와 논리적으로 동치이니, 이 식도 당연히 성립을 해야 하겠고.

\[x<p\Rightarrow p\notin\emptyset\]

그런데 전제와 상관없이, p가 공집합의 원소가 아니라는 결론은 항상 참이 되고, \(\emptyset\)의 상계 집합은 실수 전체 집합이 된다.

정의에 따라 \(\emptyset\)의 최소상계는 실수 전체 집합의 최솟값이 되어야 한다. 과연 이 값은 얼마가 되어야 하겠는가?

그 어떤 실수보다 작은 수. 그렇다. \(-\infty\)가 되어야만 한다.

그게 바로 Math.max()이 -Infinity인 이유이다.

같은 방법으로, Math.min()이 Infinity임을 보일 수 있다. 이 때는 최댓값을 최솟값으로, 최소상계를 최대하계로, 최대하계를 하계 중 가장 큰 값으로 고치고 이 논리를 정말 그대로 따라가면 된다.

 

이제 억까당한 저 두 줄의 코드는 한을 풀고 성불할 수 있을까?

그건 모르는 일이지만, 저 두 줄이 수학적으로 올바른 코드임을 아는 사람이 하나 늘어났음은 확실하다.

Rest In Peace.

728x90