- 분리된 구간들의 합집합을 입력으로 받아 사칙연산, 함수 호출, 거듭제곱까지 수행하며, interval union arithmetic를 브라우저에서 직접 계산 가능
- 결과 구간은 입력 합집합에서 고른 값들로 같은 식을 실수 위에서 계산했을 때의 값을 반드시 포함하며, 0을 포함하는 구간으로의 나눗셈도 분리된 합집합 형태로 처리 가능
- 1 / [-2, 1]에서 [-∞, -0.5] U [1, +∞]가 나오고 tan([pi/3, 2*pi/3])에서 [-∞, -1.732] U [1.732, +∞]가 나오는 식으로, 불연속 구간 결과와 무한대 경계 표현 지원
- [a, b], [a, b] U [c, d], 중첩 구간 문법, lo, hi, hull, log10, cos, min, max 같은 다양한 표기와 함수 지원
- 전체 정밀도 모드에서는 IEEE 754 배정밀도 기반 바깥쪽 반올림으로 실제 값을 감싸는 구간을 반환하며, 0.1 + 0.2를 [0.29999999999999993, 0.3000000000000001]로 보여주는 점이 특징
개요
- 분리된 구간들의 합집합을 대상으로 계산하는 계산기이며, 일반 실수뿐 아니라 interval union arithmetic 구현 지원
- 구간 [a, b]는 a부터 b까지의 수 전체를 뜻하고, [a, b] U [c, d]는 서로 떨어진 구간들의 합집합 의미
- 일반 구간 산술의 확장 형태이며, 0을 포함하는 구간으로의 나눗셈도 닫힘 성질을 유지한 채 계산 가능
- 포함 성질 보장
- 입력 합집합들에서 각각 임의의 실수를 하나씩 선택해 같은 식을 실수 위에서 계산하면, 그 결과가 출력 합집합 안에 반드시 포함되는 구조
- 불확실성 표현 가능
- 50 * (10 + [-1, 1]) 계산 결과 [450, 550] 예시 제공
- 복잡한 구간 식 계산 지원
- U 연산자를 사용해 ( [5, 10] U [15, 16] ) / [10, 100] 같은 식 입력 가능
- 결과 [0.05, 1.6] 예시 제공
- 연산 결과가 분리된 합집합이 될 수 있음
- 1 / [-2, 1] 결과 [-∞, -0.5] U [1, +∞]
- tan([pi/3, 2*pi/3]) 결과 [-∞, -1.732] U [1.732, +∞]
- 전체 정밀도 모드에서는 일반 계산기처럼 사용할 수 있으면서도 부동소수점 정밀도 문제를 포함한 실제 값을 감싸는 구간 결과 제공
- 0.1 + 0.2 결과 [0.29999999999999993, 0.3000000000000001] 예시 제시
문법
- 기본 표기 지원
- 구간 표기 [a, b] 지원
- 예시 [0.5, 0.6]
- 합집합 표기 지원
- [a, b] U [c, d] 형태 지원
- 예시 [0, 1] U [5, 6]
- 사칙연산 및 거듭제곱 지원
- 덧셈 A + B 예시 ➤ [90, 100] + [-2, 2] 결과 [88, 102]
- 뺄셈 A - B 예시 ➤ [14, 16] - [8, 12] 결과 [2, 8]
- 곱셈 A * B 예시 ➤ [-5, 10] * [2, 4] 결과 [-20, 40]
- 나눗셈 A / B 예시 ➤ [2, 4] / [-1, 2] 결과 [-∞, -2] U [1, +∞]
- 거듭제곱 A ^ B 예시 ➤ [2, 3] ^ [-2, 3] 결과 [0.1111, 27]
- 함수와 상수 지원
- 함수 호출 function(...) 형태 지원
- log10([1, 10000]) 결과 [0, 4]
- 상수 이름 입력 지원
- pi 결과 [3.1415926535897927, 3.1415926535897936]
- 숫자와 구간 혼합 입력 가능
- [1, 2]처럼 대괄호 구문으로 구간 입력 가능
- 3.14 같은 숫자는 폭이 0인 좁은 구간 [3.14, 3.14]로 해석됨
- 전체 정밀도 모드에서는 이에 관련된 세부 차이 존재
- 1.55 + [-0.002, 0.002] 결과 [1.548, 1.552]
- 중첩 구간 문법 지원
- [0, [0, 100]] 입력 가능하며 결과 [0, 100]
- 구간 경계를 정의하는 내부 숫자들까지 모두 구간으로 해석되는 구조
- 중첩된 구간에서 경계 자리에 들어간 구간은 그 구간의 상한을 취하는 방식
- 이 설계로 경계 자체에 산술 적용 가능
- [0, cos(2*pi)] 결과 [0, 1]
지원 함수
- 상수 지원
- inf, ∞, pi, e 지원
- [-inf, 0] * [-inf, 0] 결과 [0, +∞]
- 경계 추출 함수 지원
- lo(A)는 하한 반환
- lo([1, 2]) 결과 [1, 1]
- hi(A)는 상한 반환
- hi([1, 2]) 결과 [2, 2]
- lo(A)는 하한 반환
- 구간 외피 계산 지원
- hull(A)는 합집합을 하나의 구간으로 감싸는 형태
- hull([1, 2] U [99, 100]) 결과 [1, 100]
- 기본 수학 함수 지원
- abs(A) 예시 abs([-10, 5]) 결과 [0, 10]
- sqrt(A) 예시 sqrt([9, 49]) 결과 [3, 7]
- sqinv(A) 예시 sqinv([4, 64]) 결과 [-8, -2] U [2, 8]
- 로그 및 지수 함수 지원
- log(A) 예시 log([0, 1]) 결과 [-∞, 0]
- log2(A) 예시 log2([64, 1024]) 결과 [6, 10]
- log10(A) 예시 log10([0.0001, 1]) 결과 [-4, 0]
- exp(A) 예시 exp([-∞, 0] U [1, 2]) 결과 [0, 1] U [2.718, 7.389]
- 삼각함수 및 역삼각함수 지원
- cos(A) 예시 cos([pi/3, pi]) 결과 [-1, 0.5]
- sin(A) 예시 sin([pi/6, 5*pi/6]) 결과 [0.5, 1]
- tan(A) 예시 tan([pi/3, 2*pi/3]) 결과 [-∞, -1.732] U [1.732, +∞]
- acos(A) 예시 acos([-1/2, 1/2]) 결과 [1.047, 2.094]
- asin(A) 예시 asin([0, 1]) 결과 [0, 1.571]
- atan(A) 예시 atan([-10, 2]) 결과 [-1.471, 1.107]
- 최소값·최대값 함수 지원
- min(A, B) 예시 min([1, 2], [0, 6]) 결과 [0, 2]
- max(A, B) 예시 max([0, 10], [5, 6]) 결과 [5, 10]
전체 정밀도 모드
- IEEE 754 배정밀도 부동소수점 위에서 바깥쪽 반올림 구현
- JavaScript의 number 타입 사용
- 같은 식을 실수와 무한 정밀도로 계산했을 때의 실제 값을 결과 구간이 반드시 포함하는 보장
- 0.1 + 0.2 사례 포함
- 0.3은 배정밀도 부동소수점으로 정확히 표현되지 않음
- interval arithmetic는 0.3을 포함하는 구간 계산 수행
- 전체 정밀도 모드 활성화 시 동작
- 사용자가 입력한 숫자는 입력한 10진 표현에 가장 가까운 IEEE 754 값을 포함하되, 양쪽 경계가 그 값과 같지 않은 가장 작은 구간으로 해석
- 출력 숫자는 사용 가능한 모든 10진 자릿수로 표시
- Number.toString() 사용
- 전체 정밀도 모드 비활성화 시 동작
- 사용자가 입력한 숫자는 입력한 10진 표현에 가장 가까운 IEEE 754 값과 양 경계가 같은 퇴화 구간으로 해석
- 출력 숫자는 최대 소수점 4자리로 표시
- Number.toPrecision() 사용
버그
- 계산기에 아직 버그가 남아 있을 가능성 언급
- 문제 보고 경로로 GitHub 이슈 링크 제공
오픈소스
- Interval Calculator와 계산기 엔진 not-so-float 모두 오픈소스로 공개
- GitHub Sponsors 후원 링크 포함
향후 작업
- 전체 정밀도 모드를 두 개의 제어 항목으로 분리 예정
- 입력 해석
- 표시 정밀도
- ans 변수 추가 예정
- 이전 입력 결과 저장 변수
- 교집합 연산자 또는 함수 추가 예정
- U 연산자 우선순위의 직관성 개선 예정
- 빈 합집합 입력 지원 예정

4 hours ago
3







English (US) ·