- 분리된 구간들의 합집합을 입력으로 받아 사칙연산, 함수 호출, 거듭제곱까지 수행하며, 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]
- 구간 외피 계산 지원
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연산자 우선순위의 직관성 개선 예정- 빈 합집합 입력 지원 예정