숫자 대신 구간을 넣으면 어떻게 될까
Victor Poughon이라는 개발자가 공개한 'Interval Calculator'가 재미있는 시도를 보여주고 있어요. 일반 계산기는 2 + 3 = 5처럼 하나의 숫자를 다루잖아요. 그런데 이 계산기는 [2, 5] + [1, 3] = [3, 8] 처럼 숫자 하나가 아닌 '구간(interval)'을 입력으로 받아요. 게다가 그냥 연속된 구간 하나만 다루는 게 아니라 서로 떨어진 여러 구간의 모음, 즉 서로소 구간 집합(disjoint sets of intervals)을 대상으로 계산을 해 준다는 게 핵심이에요.
이게 왜 필요한 걸까
'그냥 숫자 계산하면 되지 왜 구간까지?'라고 생각할 수 있는데요, 실제 세상의 많은 값은 정확한 한 점이 아니라 범위로 주어져요. 센서가 측정한 온도에 ±0.5도 오차가 있다거나, 제품의 치수에 허용 공차가 있다거나, 실험 결과의 신뢰구간 같은 것들이 전부 구간이죠. 이걸 일반 산술로 계산하면 오차가 사라지거나 잘못 전파되는데요, 구간 산술(interval arithmetic) 을 쓰면 계산 과정 내내 '이 값은 어디부터 어디 사이일 수 있다'를 정확히 보존할 수 있어요.
더 흥미로운 건 이 프로젝트가 서로소 집합까지 지원한다는 점이에요. 예를 들어 어떤 함수의 정의역이 [-∞, -1] ∪ [1, ∞]처럼 가운데가 뚫려 있는 경우를 생각해 보세요. 보통의 구간 계산기는 이걸 [-∞, ∞]로 뭉뚱그려 버려서 가운데 구멍이 사라지는데, 이 도구는 그 구멍을 유지한 채 덧셈, 곱셈, 나눗셈 같은 연산 결과에도 반영해 줘요. 말하자면 '값이 있을 수 있는 영역을 최대한 꼼꼼하게 추적'하는 셈이에요.
내부는 어떻게 동작할까
구간 사이의 연산은 생각보다 까다로워요. 덧셈은 쉬워요. [a, b] + [c, d] = [a+c, b+d]죠. 그런데 곱셈부터 부호가 섞이면 경계가 뒤집히기 시작해요. 두 구간에 음수, 양수, 0이 섞여 있으면 결과 구간의 양 끝은 네 가지 곱(ac, ad, bc, bd) 중 최솟값과 최댓값이 되거든요. 나눗셈은 더 골치 아파요. 분모 구간이 0을 포함하면 결과가 두 조각으로 쪼개질 수 있는데, 이때 서로소 집합이 꼭 필요해져요. 이 계산기가 그 쪼개짐을 자동으로 처리해 주는 게 진짜 강점이에요.
여기에 합집합, 교집합, 차집합 같은 집합 연산까지 지원해서, 두 조건이 동시에 성립하는 범위나 하나라도 성립하는 범위를 구할 수 있어요. 내부적으로는 구간들을 정렬해 유지하면서 겹치는 구간을 병합하는 자료구조를 쓰는데, 이건 수학 라이브러리뿐 아니라 스케줄러의 시간대 관리, 네트워크 대역 할당, 문자열 파서의 문자 클래스 처리 같은 데서 두루 쓰이는 기법이에요.
업계에는 어떤 도구들이 있나
구간 산술 자체는 1960년대부터 연구된 꽤 오래된 분야예요. Boost의 Interval 라이브러리, Python의 mpmath, Julia의 IntervalArithmetic.jl 같은 게 있고, MATLAB에도 Intlab이라는 확장이 있어요. 그런데 이들은 대체로 연속된 구간 하나에 초점을 맞춘 경우가 많아요. 서로소 집합까지 본격적으로 다루는 인터랙티브 툴은 상대적으로 드문데, 이번에 공개된 계산기는 브라우저에서 바로 실행되고 시각적으로 결과를 보여준다는 점에서 교육용이나 빠른 실험용으로 포지션이 좋아요.
SMT 솔버 쪽으로 가면 Z3나 CVC5가 비슷한 구간 추론을 내부적으로 쓰는데, 이건 워낙 무겁고 학습 곡선이 가파르거든요. 가볍게 구간 개념을 손으로 만져 보고 싶은 개발자에게는 이 계산기가 훨씬 부담 없어요.
한국 개발자에게 주는 시사점
금융 쪽에서 리스크 값의 범위를 다루거나, 하드웨어 쪽에서 허용 공차를 계산하거나, 게임에서 충돌 영역을 계산하거나, 프론트엔드에서 날짜 범위 필터를 만드는 일까지, 구간 연산이 등장하는 도메인은 생각보다 많아요. 평소 이런 로직을 즉흥적으로 if문으로 처리해 왔다면, 서로소 구간 집합이라는 자료구조를 한 번 정리해 두면 훨씬 깔끔한 코드가 나올 수 있어요. 또 구간 산술은 부동소수점 오차 디버깅에도 유용해서, 수치 연산 많은 백엔드 시스템을 다루는 분들은 공부해 두면 분명 써먹을 일이 생겨요.
마무리
숫자 하나가 아니라 '가능성의 범위'를 다루는 사고방식은 불확실성을 솔직하게 드러내는 방법이에요. 여러분의 코드에는 점 하나로 표현됐지만 사실은 구간이어야 했던 값이 숨어 있지 않나요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공