ツール
ガイド

式計算機

生活

+ − × ÷ % ^ と括弧の算術式を安全に評価。eval 不使用、コード実行なし。

100% クライアントサイド バックエンドなし
+ − * / % ^ と () に対応。Enter で計算。
結果 —
このページの内容

この計算機について#

これは、テキストで入力した数式 — (12 * 1.08) + 7 や 2^10 % 256 — を評価して数字を返す、平易な算術計算機です。つつく関数ボタンはなく、式全体を書いて 1 つのキーを押すだけです。

重要なのは構築方法です。Web の大半の簡易計算機は、文字列を JavaScript の eval() に渡すというズルをします。eval は 任意の コードを実行します — おもちゃならともかく、誰かが賢いものを貼り付けた瞬間に厄介です。本ツールは違います — 数字、括弧、演算子 + - * / % ^ のみを受け付ける手書きの再帰下降パーサーが走ります。この文法外のものはその場で拒否されます。コードを絶対に実行できない計算機であり、だからこそ安全に貼り付けられるのです。

使い方#

  1. 入力 ボックスに式を入力します。空白は無視されるため、1+2 と 1 + 2 は同じです。
  2. 演算子: 四則演算に + - * /、剰余に %、べき乗に ^。括弧 ( ) でグループ化。単項マイナスも効くため、-5 + 3 は -2 です。
  3. 小数と科学表記も OK です: 0.5、1e3(= 1000)、2.5e-2。
  4. 計算 をクリックします(または Enter を押します)。結果 行に数字が表示されるか、問題を名指するインラインメッセージ — ゼロ除算です、予期しない文字です、括弧が不一致です など — が表示され、何が起きたか推測するのではなく式を修正できます。
  5. 2 進浮動小数点の誤差は自動的に拭われるため、0.1 + 0.2 は 0.30000000000000004 ではなく 0.3 と表示されます。

主な機能#

  • eval も new Function も識別子もなし。 数字と 7 つの演算子文字だけを受け付ける — 完全に境界の文法であり、任意のコード実行ではありません。
  • 正しい演算子優先順位(PEMDAS): 括弧、^、* / %、+ - の順。
  • 右結合のべき乗。 2^3^2 は数学者が書く通りに評価されます(実例を参照)。
  • 科学表記(6.022e23)と剰余(17 % 5)で、現実の裏計算に対応。
  • 親切で具体的なエラー が、サイレントな NaN の代わりに、問題の箇所を伴って失敗名(ゼロ除算、式の途切れ、不正な数値)を示します。

実例#

それぞれ異なる振る舞いを示す 3 つの式です。1 つずつ貼ってみてください。

演算子の優先順位とグループ化。

(1 + 2) * 3 ^ 2

結果: 27。括弧が最初に 1 + 2 = 3 を強制し、次に 3 ^ 2 が乗算より先に評価されて(べき乗は * より強く結合する)9 を与え、最後に 3 * 9 = 27。括弧がなければ、1 + 2 * 3 ^ 2 は 1 + 18 = 19 です。

右結合のべき乗。

2 ^ 3 ^ 2

結果: 64 ではなく 512。べき乗は右へ結合するため、これは 2 ^ (3 ^ 2) = 2 ^ 9 = 512。本当に (2 ^ 3) ^ 2 = 64 を欲しいなら、括弧を書いてください。

2 進の誤差を除去。

0.1 + 0.2

結果: 0.3。生の 2 進浮動小数点和は 0.30000000000000004 ですが、フォーマッターが妥当な有効桁数に丸め直すため、答えが人間の期待通りに読めます。

よくある質問#

なぜ sin、log、sqrt、pi が使えないのですか?#

それらは識別子であり、識別子は意図的に文法の一部ではないからです。すべての名前は 予期しない文字です として拒否されます — これが、計算機がコードを一切実行しないことを保証する線です。sqrt(16) が必要なら 16 ^ 0.5 と書き直してください。log と sin には関数電卓を使ってください。

2^3^2 は 512 ですか、64 ですか?#

512。^ 演算子は右結合で、数学や大半のプログラミング言語のべき演算子の慣習に一致します。2^3^2 は 2^(3^2) と解析されます。64 を得るには (2^3)^2 と書いてください。

% 演算子は何をしていますか?#

剰余 — 整数除算の余り — であり、「パーセント」ではありません。17 % 5 は 2 です。17 を 5 で割ると余り 2 になるためです。「この数は偶数か?」(n % 2)、値を範囲に収める、時計の計算などに便利です。* や / と同じ優先順位を持ちます。

式はサーバーに送信されますか?#

いいえ。解析と評価はすべて手書きのパーサーでブラウザ内で行われます — バックエンドはなく、入力がページの外に出ることはありません。