数式評価器
暮らし
紙に書く式の安全な計算機: `(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。度の変換は渡す前に `pi / 180` を掛ける。
- 大きな計算で精度が失われる理由?
- JavaScript の数値は IEEE 754 double — 約 15 有効小数桁。`0.1 + 0.2` は `0.30000000000000004`。より高い精度(金融小数・20! 以上の階乗など)が必要なら、任意精度専用ツール・ライブラリを使う。
- 変数・複数行スクリプトは?
- 意図的に非対応 — 表面積を小さく保つことが安全な評価の秘訣。プログラム可能な数学には Jupyter ノートブックやデスクトップ電卓を使う。