수식 평가기
일상
종이에 적는 식의 안전한 계산기: `(1 + 2) * 3.14`·`sqrt(2)`·`sin(pi / 4)`·`log10(1000)`·`2^10`. 연산자 `+ - * / % ^` 작동; 함수·상수는 `Math.*`에 매핑된 고정 허용 목록 — `sin/cos/tan/asin/acos/atan/atan2`·`sinh/cosh/tanh`·`sqrt/cbrt/abs/sign/floor/ceil/round/trunc`·`log/log2/log10/ln/exp/pow`·`min/max/hypot`·`pi/e/tau`. 목록 밖 식별자 거부 — 입력이 페이지나 JavaScript 런타임에 접근 불가.
—
예시:
결과
8
구조적으로 안전: 식별자는 허용 목록(sin·cos·tan·sqrt·log·ln·exp·pi·e·tau·min·max·hypot·…)에서 와야 함. 변수·문자열 리터럴·세미콜론 없음.
사용법
- 식 입력 — 연산자·괄호·소수·허용된 이름.
- 결과 실시간 업데이트; 필요 시 복사해 다른 곳에 붙여넣기.
- `^`은 지수(수학처럼·비트 XOR 아님). 변수 거듭제곱은 `pow(x, y)` 또는 `x^y`.
자주 묻는 질문
- 내부적으로 `eval` 사용?
- `new Function(...)` 호출 사용 — 단 입력이 식별자 파싱 후 허용 목록(`sin`·`sqrt`·`pi`·…)과 매치된 후에만. `document`·`window`·`fetch`·문자열 리터럴·세미콜론 등은 실행 전 거부 — 식이 `Math.*` 밖에 도달할 방법 없음.
- `sin` 등의 각도 단위?
- 라디안 — JavaScript `Math.sin`과 일치. 일반 각도는 `pi`로 — `sin(pi / 2)`는 1·`cos(pi)`는 -1. 도(degree) 변환은 전달 전 `pi / 180` 곱셈.
- 큰 계산이 정밀도를 잃는 이유?
- JavaScript 숫자는 IEEE 754 double — 약 15 유효 소수 자리. `0.1 + 0.2`는 `0.30000000000000004`. 더 높은 정밀도(금융 소수·20! 이상 팩토리얼 등) 필요 시 임의 정밀도 전용 도구·라이브러리 사용.
- 변수·다행 스크립트는?
- 의도적으로 미지원 — 표면적 작게 유지가 안전한 평가의 비결. 프로그래밍 가능한 수학은 Jupyter 노트북 또는 데스크톱 계산기 사용.