🧪 数値計算研究所
6つの高精度計算モジュールを搭載。計算はすべて別スレッド(Worker)で実行され、途中キャンセルが可能です。0.6931471805599453094172321214581765680755001343602552541206800094933936219696947156058633269964186875420014810205706857336855202357581305570326707516350759619307275708283714351903070386238916734711233501153644979552391204751726815749320651555247341395258829504530070953263666426541042391578149520437404303855008019441706416715186447128399681717845469570262716310645461502572074024816377733896385506952606683411372738737229289564935470257626520988596932019650585547647033067936544325476327449512504060694381471046899465062201677204245245296126879465461931651746813926725041038025462596568691441928716082938031727143677826548775664850856740776484514644399404614226031930967354025744460703080960850474866385231381816767514386674766478908814371419854942315199735488037516586127535291661000710535582498794147295092931138971559982056543928717000721808576102523688921324497138932037843935308877482597017155910708823683627589842589185353024363421436706118923678919237231467232172053401649256872747782344535348
📜 計算履歴
これは、かなり面白いところまで来ています。
提示された構成を見る限り、すでに単なる「高精度電卓」ではなく、WebAssembly上の高精度数値計算実験室に近いです。
特に
- GMP + MPFR
- WebAssembly
- Workerによる別スレッド
- キャンセル
- 1,000桁級の
log - 500万桁のπ計算
- 三角関数・フラクタル・素数・Γ関数
まであるなら、次の発展は「ボタンを増やす」より、計算そのものを組み立てられる仕組みにするのが面白いと思います。
1. 一番おすすめ:「数式入力エンジン」に進化させる
現在、
log(2.0,3.0)
のような入力なら、次の段階として、
sqrt(2)
log(2,3)
exp(1)
sin(pi/7)
sqrt(log(2)^2 + pi^2)
のような数式そのものを入力できるようにするのがおすすめです。
さらに、
sqrt(2) + sqrt(3)
exp(pi * sqrt(163))
log(2) / log(10)
sin(pi/7)^2 + cos(pi/7)^2
など。
そうなるとサイトの性格が、
「高精度計算をするサイト」
から
「任意精度数学式評価エンジン」
へ変わります。
これはかなり大きな違いです。
2. そして「式の中に式」を許す
ここが重要です。
例えば、
log(2, 3)
だけではなく、
log(2, sqrt(3))
さらに、
log(2, sqrt(log(10, 3)))
まで許します。
つまり、
log
/ \
2 sqrt
|
log
/ \
10 3
という**構文木(AST)**を内部で作る。
これができると、
sin(sqrt(log(2) + pi))
のような複雑な式も扱えます。
3. 「数学関数を増やす」なら、この順番が面白い
今の
+ - × ÷
log exp sqrt
から、私は次の順番をおすすめします。
第1段階
abs
floor
ceil
pow
第2段階
sin
cos
tan
asin
acos
atan
第3段階
sinh
cosh
tanh
asinh
acosh
atanh
第4段階
gamma
lgamma
erf
erfc
第5段階
factorial
binomial
第6段階
Bessel J
Bessel Y
Airy
zeta
ここまで行くと、かなり「研究用計算機」らしくなります。
4. 特に「ζ(ゼータ関数)」は相性がいい
個人的には、次に追加するなら
を強くおすすめします。
例えば、
です。
さらに、
など。
そして、
は「アペリーの定数」と呼ばれる有名な定数です。
ここから一気に、
π → ζ関数 → 素数
という数学の深い世界につながります。
5. さらに「定数ライブラリ」を作る
これもサイトとの相性が非常に良いです。
例えば、
pi
e
phi
ln2
ln10
sqrt2
sqrt3
gamma
zeta3
Catalan
など。
入力を
sqrt(2)
だけでなく、
sqrt(pi)
exp(pi)
log(e)
phi^2
とできます。
さらに面白いのは、
1000!
です。
これは通常の電卓ではすぐに巨大になりますが、MPFR/GMPなら高精度整数計算との相性が非常に良い。
6. 「巨大整数」と「高精度実数」を明確に分ける
これはGMPを使っているサイトなら、ぜひ意識したいところです。
数学的には、
123456789012345678901234567890
と
1.234567890123456789...
は別物です。
そこで内部型を、
Integer
Rational
Real
Complex
のように分ける。
例えば、
を、
0.333333333333333...
として最初から丸めてしまうのではなく、
1/3
という有理数として保持する。
そして必要になった段階で、
precision = 1000
なら1000桁へ変換する。
これは非常に重要な設計思想です。
7. さらに「複素数」へ行くと一気に世界が広がる
これはぜひやってほしいです。
例えば、
です。
現在の
sqrt
log
exp
sin
cos
を複素数対応にすると、数学の景色が激変します。
例えば、
を計算できる。
さらに、
という世界に入ります。
ただし、複素対数は多価関数なので、ここから「主値」「分枝(branch)」という非常に面白い問題が出てきます。
8. ここで「高精度」の本当の面白さが出る
例えば、
を100桁精度で計算したら、
0.000000000000000000000000000...
になる。
しかし実際の浮動小数点計算では、完全な0ではなく、
1.23e-...
のような誤差が残る可能性があります。
そこでサイトに、
絶対誤差
相対誤差
を表示させる。
すると、
「500桁計算しました」
だけではなく、
「500桁計算して、誤差は何桁だったのか」
まで見せられます。
これはかなり研究室っぽくなります。
9. 「精度を上げるとどうなる?」実験モード
これ、サイトの目玉にしても面白いと思います。
例えば、
式:
sin(pi)
精度:
50
100
500
1000
5000
と変更すると、
precision 50 → 10^-...
precision 100 → 10^-...
precision 500 → 10^-...
precision 1000 → 10^-...
と誤差がどう変化するかを表示する。
さらに、
計算時間
桁数
誤差
メモリ
をグラフ化する。
これなら単なる電卓ではなく、高精度数値計算の実験装置になります。
10. さらに「ベンチマーク」を入れる
現在、
⏱ 24.90 ms
と表示されているのは、とても良いです。
これを発展させて、
Operation Digits Time
--------------------------------
sqrt(2) 1,000 0.3 ms
sqrt(2) 10,000 1.8 ms
sqrt(2) 100,000 15.2 ms
sqrt(2) 1,000,000 182.4 ms
のようにする。
そして、
をプロット。
これをやると、
「高精度計算は桁数を増やすとどのように重くなるのか?」
というコンピューター科学の実験になります。
11. そして「キャンセル」は非常に重要
すでに、
Worker
途中キャンセル
を実装しているのは、かなり良い設計です。
例えば1000万桁のπ計算なら、
████████████░░░░░░░ 63%
経過時間 12.4 sec
推定残り 7.2 sec
[キャンセル]
のようにする。
さらに可能なら、
計算開始
↓
Worker
↓
GMP / MPFR
↓
途中結果
↓
Worker → UI
という構造を明確にしておく。
12. 「π」も単に計算するだけでなく、アルゴリズム比較へ
これが非常に面白いです。
π計算を、
Machin
Gauss-Legendre
Chudnovsky
BBP
など複数のアルゴリズムで実装して、
π 100万桁
Chudnovsky 0.XX sec
Gauss-Legendre X.XX sec
Machin X.XX sec
と比較する。
するとサイトが、
「高精度計算アルゴリズム研究室」
になります。
13. さらに「フラクタル」と高精度計算を結びつける
すでにフラクタルがあるのが面白いです。
例えば、
のMandelbrot集合。
通常は倍精度で十分ですが、
「超高倍率ズーム」
をやると高精度演算が必要になってきます。
例えば、
Zoom:
10^1
10^3
10^6
10^12
10^50
と進んでいく。
ここで、
「普通のdoubleでは見えなくなる世界をMPFRで見る」
という展示ができます。
これはかなりインパクトがあります。
14. 「素数」も単なる判定から一歩進める
現在の
🔢 素数判定
を、
素因数分解
まで発展させる。
例えば、
を入力すると、
3 × 7 × 13 × ...
のように表示。
さらに、
Mersenne number
2^p - 1
なども扱う。
GMPとの相性が非常に良い分野です。
15. そして「数式の可視化」
これはかなりおすすめです。
例えば、
sin(x)
と入力したら、
╭╮
──────╯╰──────
ではなく、実際のグラフを表示。
さらに、
f(x) = sin(x) + 0.1x
など。
そして、
f'(x)
f''(x)
∫f(x)dx
まで扱えるようになると、数値解析環境に近づきます。
16. 最終的には「小さなMathematica」を目指せる
もちろん巨大な数学ソフトと同じものを作る必要はありません。
むしろ、
GMP + MPFR + WebAssemblyに特化した軽量な高精度数学研究室
というポジションが面白いです。
例えばトップに、
🧪 数値計算研究所
[ 数式 ]
sqrt(2) + log(3) / pi
[ 精度 ]
1000 桁
[ 計算 ]
────────────────────
結果
...
計算時間
...
推定誤差
...
[履歴] [コピー] [保存]
そして別タブに、
π研究
素数研究
複素数
フラクタル
特殊関数
ベンチマーク
とする。
私なら、次の5つを優先します
現在のサイトからの発展なら、優先順位はこうします。
| 優先 | 機能 | 面白さ |
|---|---|---|
| ★★★★★ | 数式パーサー+AST | 一気に自由度が上がる |
| ★★★★★ | 複素数対応 | log / exp / sqrt / sin が別世界になる |
| ★★★★☆ | 誤差・精度解析 | 「高精度」の意味が見える |
| ★★★★☆ | π・ζ・Γなど特殊関数 | 数学研究室感が出る |
| ★★★★☆ | アルゴリズム別ベンチマーク | GMP/MPFRの性能を見せられる |
特に重要なのは、**関数を100個追加することではなく、「関数を自由に組み合わせられるようにすること」**です。
たとえば最終的に、
exp(
pi *
sqrt(
log(2) +
gamma(1/3)
)
)
のような式を、
1,000桁・10,000桁・100,000桁……
で計算できるようにする。
そうなると、今のサイトの
「高精度計算機」
という看板が、
「ブラウザ上で動く任意精度数値計算研究所」
へ進化します。
そして、GMP + MPFR + WebAssembly + Workerという現在の技術構成は、この方向とかなり相性が良いです。
