ブラウザで動く計算ツール群。関数電卓・データ量計算・金融計算。 計算は端末内で完結し、サーバへ送信しない。
インストールは不要。ホーム画面に追加すればアプリとして起動し、オフラインでも動く。
1.2.6(正式版) — 変更点は CHANGELOG.md に、 リリースごとの記録は Releases にある。
正式版として約束すること:
- 画面の URL は変わらない。 ブックマークした URL は、以後の版でも同じ画面を開く
- 計算は端末内で完結し、サーバへ送信しない
- 画面が低くても崩れない。 画面が低いと(ブラウザのタブで開いたときなど) ページがスクロールすることがあるが、そのときも、すべての表示とキーは スクロールすれば見えて押せる
約束しないこと:
- 計算結果の正しさ。 計算結果は無保証で、重要な判断の根拠にしないでほしい
- 保存した設定と履歴は、版が変わると失われうる
- 画面の見た目やキーの並び
- 為替レートの値(取得元の値をそのまま使う)
- 確かめている画面の幅: Android の Chrome などは幅 360px 以上、 iPhone の Safari は幅 375px 以上で確かめている。それより狭い画面(320px など)でも 表示はされるが、崩れないことは確かめていない
- 1 画面に収まること。 収まるように確かめているのは、ホーム画面から開いたときの 高さである
気づいたことは Issue で教えてもらえると助かる。
| Scientific | Data Scale | Finance |
|---|---|---|
![]() |
![]() |
![]() |
四則演算・括弧・符号反転に加えて、
- 複素数と極座標変換。
3 + j4を打って5 ∠ 53.13010235に変換できる sqrtx²xʸ1/xeˣlnlogと三角関数・逆三角関数。 関数は実数に閉じている(実数の答が一意に決まらない入力はエラーを返す)n!nPrnCr(非負整数の上でのみ定義)- 60 進の入出力(
°'")。経過時間と角度の両方に使える。度分秒で入れた角度を そのままsinに渡せる - ENG(工学表記)、3 桁カンマ、Degree / Radian
要素数 × 次元 × データ型から、必要なメモリ量を 10 進(KB / MB / GB / TB)と 2 進(KiB / MiB / GiB / TiB)の両方で出す。ベクトル検索や機械学習の規模感を 掴むためのもの。
- ローン(元利均等)— 月額、借入可能額、返済期間の逆算。残価とボーナス併用にも 対応する(残価は月額モードでだけ使える。ボーナスは期間モードでは使えない。 月額モードでは、残価とボーナスのどちらか一方だけ)
- 複利 — 一括預入と毎月積立。税(源泉分離課税)の有無を選べる
- 複利の逆算 — 目標額から必要な積立額、または必要な年数
実額の機関一致は目標にしていない。 返す値は決定的な概算である(画面にも 免責を常設している)。
- 端末内で完結する。 入力した数値を計算目的で外部へ送らない
- 計算履歴は端末に残る。 Scientific で
=を押した式・答・角度モードを、localStorageに 50 件まで保存する。記録を止めるのは履歴の画面から (Shift→hist。既定は記録する。止めても既に貯まった分は残る)。 消すのも同じ画面から——1 件ずつ、またはまとめて - PWA。 ホーム画面に追加でき、オフラインで動く
- 計算コアは Rust、ブラウザでは WebAssembly として動く
- Python の独立実装で検証している。 Rust のテストだけに頼らず、SymPy /
mpmath /
decimal.Decimalによる別実装が生成した期待値と突き合わせる。 同じアルゴリズムを両方に書くと同じバグが両方に入るので、実装方法を変えている
計算結果は無保証です。重要な判断の根拠にしないでください。
このツールは Apache License 2.0 で提供され、同ライセンスの定めるとおり、 明示・黙示を問わずいかなる保証も伴わない。
Issue へどうぞ。 日本語でも英語でも構わない。
不具合の報告では、押したキーの順を書いてもらえると助かる(例: 3 + 4 =)。
このプロジェクトはキー列と表示の対応表をテストとして持っているので、
その形で届くとそのまま 1 件のテストになる。テンプレートが聞くようになっている。
数値の扱いは docs/numerical-policy.md に定める。要点は次のとおり。
- モジュールごとに数値の扱いが違う。 Scientific は浮動小数点、Data Scale は 厳密整数、Finance は決定的概算である
- Scientific はすべての値を複素数として保持する。実数は虚部 0 の複素数である。
表示は有効数字 10 桁、丸めは round-half-to-even。打った数と π は、本当の値
(有理数 × π^k)も添えて持つ(1.2.2 から)。四則の答えは打った十進に対する答えを
正しく丸めた値になり(分子・分母が
i128に収まるあいだ)、三角関数は π キーから 作った π/6・π/4 の倍数と、30°・45° の倍数を表から厳密に返す - Data Scale は内部を厳密整数(
u128)で持つ。 丸めるのは表示のときだけである - Finance は決定的な概算を返す。 実額の機関一致は目標にしていない——返済額の 端数処理は金融機関ごとに違う。月額の決定だけが浮動小数点で、償還表は厳密整数 である。詳細は docs/numerical-policy.md が定める
- Finance の入力欄に打った式は、途中で丸めない。 有理数で評価して 着地で 1 回だけ丸めるので、同じ答えを別の打ち方で入れても結果が変わらない
- 表示のための丸めを、保持している値に書き戻さない。 極形式への切り替えは 表示の変更であって計算ではないので、丸めた値が次の計算に入り込まない
- 計算コアは panic しない。 すべてのエラーは
Resultを通り、UI には 戻り値として届く
必要なもの: Rust (stable)、wasm-pack、Node.js + pnpm、uv。
# 計算コアのテスト
cargo test --workspace
# WASM 境界のテスト
wasm-pack test --headless --chrome crates/calcarc-wasm
# Web(新しいクローンでは先に pnpm wasm が要る)
cd web && pnpm install && pnpm wasm && pnpm dev
# 参照実装と期待値の再生成
cd reference && uv sync && uv run pytest
cd reference && uv run python scripts/generate.pycrates/calcarc-core の数値を変更したときは期待値の再生成が必要になる。
再生成せずに testdata/ を手で書き換えないこと。
版数を上げるときは 6 箇所を同じ値にする。Cargo.toml、Cargo.lock
(calcarc-core と calcarc-wasm の 2 つ)、web/package.json、
README.md の「現在の版」、README.en.md の「Current version」、
CHANGELOG.md の見出し。pnpm check:version が 6 箇所すべてを検査する。
タグを打つときはさらに、版数がタグ名と一致し、CHANGELOG の見出しに
日付が入っていることを CI が確かめる。
詳しくは CONTRIBUTING.md と docs/base-spec.md(全体仕様)を参照。
Apache License 2.0。LICENSE を参照。


