본문으로 건너뛰기
피드

0으로 나눠도 안 터지는 계산기 — 구간 합집합 산술 웹 계산기

open-source 약 7분
vote
0
댓글
북마크

Victor Poughon이 만든 interval union arithmetic 웹 계산기가 Show HN에 올라왔다. 실수 대신 '구간의 합집합'을 기본 단위로 삼아 0을 포함한 구간으로도 나누기가 가능하다. IEEE 754 double에 outward rounding을 적용해 0.1+0.2 같은 부동소수점 오차까지 구간으로 보장한다.

  • 1

    일반 interval arithmetic의 한계(0 나누기 폭발)를 합집합 기반으로 해결. `2 / [-2, 1]`이 `[-∞, -1] U [2, +∞]`로 나옴

  • 2

    Inclusion property: 입력 구간에서 아무 실수나 뽑아 실수 연산을 해도 결과는 출력 구간 안에 반드시 포함된다

  • 3

    0.1 + 0.2가 [0.29999999999999993, 0.3000000000000001]로 나와 부동소수점 오차를 정직하게 드러낸다

  • 4

    30개 넘는 수학 함수 지원 + 구간 중첩 문법 (`[0, cos(2*pi)]` 같은 표현 가능)

  • 5

    엔진 not-so-float도 오픈소스. IEEE 754 double에 직접 outward rounding 구현

  • Show HN에 올라온 "구간 합집합 산술(Interval Union Arithmetic) 계산기"
    • 실수가 아니라 구간(interval)의 합집합 단위로 계산함. 예를 들어 [a,b] ∪ [c,d] 같은 disjoint 구간들
    • 만든 사람은 Victor Poughon. 엔진은 not-so-float라는 별도 오픈소스 라이브러리
  • 일반 구간 산술(interval arithmetic) 대비 왜 "vastly superior"냐면
    • 0을 포함한 구간으로 나누기가 가능하고 그래도 결과가 닫혀있음(closed)
    • 예: 2 / [-2, 1][-∞, -1] ∪ [2, +∞]. 0을 건너뛰는 게 자연스럽게 표현됨
    • 일반 interval arithmetic에서는 이 연산이 정의 불능이거나 무한대로 폭발함

핵심 속성 — Inclusion Property

  • 각 입력 구간에서 아무 실수나 뽑아 같은 식을 실수 연산으로 돌리면, 그 결과는 반드시 출력 구간 안에 들어온다
    • 불확실성 표현에 쓸 수 있다는 뜻. 50 * (10 + [-1, 1])[450, 550]
    • 측정 오차나 파라미터 범위를 그대로 식에 녹여서 결과 범위를 얻을 수 있음
  • 복잡한 식도 구간 합집합 연산자 U로 조합 가능
    • ([5, 10] U [15, 16]) / [10, 100][0.05, 1.6]
    • tan([pi/3, 2*pi/3])[-∞, -1.732] U [1.732, +∞] (탄젠트 발산 구간을 두 조각으로 깔끔하게)

부동소수점 오차까지 보장해준다

  • Full precision 모드에서 0.1 + 0.2 돌려보면
    • 결과가 [0.29999999999999993, 0.3000000000000001]
    • 0.3이 double로 정확히 표현되지 않는다는 사실이 그대로 드러남. 그런데도 참값 0.3이 반드시 이 구간 안에 있음이 수학적으로 보장됨
  • IEEE 754 double에 대해 outward rounding을 구현해서 이걸 달성
    • 입력 숫자는 "IEEE 754 가장 가까운 값"을 포함하는 최소 구간으로 해석됨
    • 바깥쪽으로 둥글리기(outward rounding)라 실제 값이 구간 밖으로 나갈 일이 없음

문법과 기능

  • 지원 연산: + - * / ^, 비교, 그리고 30개 넘는 수학 함수
    • sqrt, log, log2, log10, exp, cos/sin/tan, acos/asin/atan, abs
    • hull([1,2] U [99,100])[1, 100] (합집합의 convex hull)
    • sqinv([4, 64])[-8, -2] U [2, 8] (제곱의 역 — 두 개의 disjoint 구간)
  • 재밌는 문법 특성으로 구간 중첩이 가능
    • [0, [0, 100]][0, 100]
    • 내부 구간은 상한값으로 해석됨. [0, cos(2*pi)]처럼 bound 자체에 계산식 가능

💡

> 실무에서 측정 오차나 센서 허용 범위를 계산식에 녹일 때 유용. "14±2를 8±2로 나누면?" 같은 문제를 한 줄로 풀 수 있다.


기술 맥락

일반 interval arithmetic(IA)는 1960년대 Ramon Moore가 정리한 분야인데, 오래 전부터 한계가 하나 있었어요. 0을 포함한 구간으로 나누면 결과가 "모든 실수"가 돼버려서 정보량이 0이 되거든요. 1 / [-1, 1](-∞, +∞)가 되면 이걸로 뭘 할 수가 없잖아요.

Interval Union Arithmetic은 이 문제를 "여러 구간의 합집합"을 기본 단위로 삼아서 해결해요. 1 / [-1, 1](-∞, -1] U [1, +∞)로 깔끔하게 나와서 정보가 보존돼요. 0 주변의 불가능 영역을 그대로 표현할 수 있는 거죠.

왜 이게 실용적이냐면, 부동소수점 연산의 오차를 "나도 모르게" 누적시키지 않고 명시적으로 추적할 수 있기 때문이에요. 예를 들어 과학 계산, 로봇 경로 계획, 최적화 알고리즘에서 "이 값이 어느 범위에 있는지 확실히 알아야" 하는 상황에서 쓰여요. MATLAB의 INTLAB, Python의 mpmath 같은 기존 라이브러리도 비슷한 목적이지만, 브라우저에서 즉시 쓸 수 있는 계산기 UI로 만든 건 교육적으로 꽤 가치가 있어요.

구현 관점에서 흥미로운 대목은 JavaScript의 number 타입(IEEE 754 double) 하나로 outward rounding을 직접 처리한다는 점이에요. 보통은 MPFR 같은 임의 정밀도 라이브러리를 붙이는데, 이 프로젝트는 not-so-float라는 경량 엔진을 따로 만들어서 네이티브 double 위에서 돌려요. 그래서 브라우저에서도 성능이 잘 나오는 거죠.

수치 불확실성을 식 수준에서 다루는 도구가 브라우저에서 즉시 쓰일 수 있게 된 사례. 교육과 프로토타이핑 양쪽에서 쓸모 있다.

댓글

댓글

댓글을 불러오는 중...

open-source

NIPA, 260명 규모 오픈소스 컨트리뷰션 아카데미 시작

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 13주간의 프로젝트 활동을 시작했음. 국내 개발자들이 GitHub 기반 글로벌 협업 환경에서 코드, 문서, 버그 수정, 풀 리퀘스트를 직접 경험하게 하는 프로그램임.

open-source

그누보드7, 디딤과 손잡고 멀티클라우드 도입 문턱 낮춘다

에스아이알소프트가 클라우드 전문기업 디딤과 협력해 그누보드7 기반 웹서비스 구축·운영 환경을 넓히기로 했다. 커뮤니티, 쇼핑몰, 예약, 구독형 서비스 같은 실무 프로젝트에서 서버 구성과 운영 부담을 줄이는 게 핵심이다.

open-source

오픈소스 컨트리뷰션 아카데미 출범, 국내 개발자 260여 명 참여

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 13주간의 활동을 시작했다. 11개 프로젝트팀의 멘토와 멘티 260여 명이 글로벌 오픈소스 프로젝트 기여를 목표로 코드 개발, 문서화, 오류 수정 등을 진행한다.

open-source

NIPA, 국내 개발자 260명 규모 오픈소스 컨트리뷰션 아카데미 시작

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 국내 개발자의 글로벌 오픈소스 프로젝트 참여를 지원한다. 11개 프로젝트팀, 멘토·멘티 260여 명이 13주 동안 깃허브 기반 협업, 코드 리뷰, 문서화, 오류 수정 등을 실제로 경험한다.

open-source

Ghostty 엔진을 Emacs 안으로 끌고 온 터미널, Ghostel.el

Ghostel.el은 Ghostty의 libghostty-vt를 기반으로 Emacs 안에서 동작하는 터미널 에뮬레이터다. eat 스타일의 여러 입력 모드, 안정적인 복사 모드, line mode, 자동 password prompt 처리, compile-mode 유사 실행 버퍼, Kitty graphics 지원, 높은 throughput을 앞세워 eat/vterm과 차별화함.