仕様の中に潜む “仕様外” —— JavaScript数値精度と仏教的空観の交差点
JavaScriptの仕様に従っているのに、どこか仕様を超えている。
そんな現象に出会ったとき、私たちは技術の奥に潜む哲学的な問いと対話することになる。今回は、JavaScriptの数値精度の限界をテーマに、「仕様を超える仕様の感覚」、
さらには仏教密教や意識哲学との共鳴について探ってみたい。
精度の限界:Numberの不思議
JavaScriptの
Number
型は、IEEE 754という64ビット浮動小数点数に基づいて設計されている。
これによって私たちは10進数で約15~17桁程度の精度を持って数値を扱えるが、それを超えると、
一見正しく見えても “ズレ” が生じる。例えば次のようなコードがある:
var maxi = 36028797018963968; alert("" + maxi);
本来
36028797018963968
であるべきところが、表示されるのは36028797018963970
。
これは JavaScript の丸め処理によって、最も近い表現可能な数に自動的に変換されてしまった結果だ。このような振る舞いは仕様通りである。しかし、それを知らなければ “仕様外” に感じてしまう。
ここには、まさに仕様の内にありながら仕様を超えてしまったような挙動が潜んでいる。
BigIntと新たな階層
ES2020で導入された
BigInt
は、この問題に対する新しい回答となった。
任意の桁数の整数を誤差なく扱えるBigInt
は、従来のNumber
とはまるで異なる次元の存在だ。これはまるで、意識が「有限な思考」の制約を突破して「無限の広がり」に気づくようなもの。
Number
が相対界なら、BigInt
は空性に近い。
哲学的余白:仏教と技術仕様
ここでふと思い出すのが、仏教における「空(くう)」の思想だ。
すべての存在は、それ自体としての実体を持たず、縁起によって成り立っている。
これはまさに、仕様の中に隠された仕様外の挙動——つまり、一見確かなものの揺らぎと通じている。「仕様」=形式的実体、
「仕様外に見える仕様」=空性と縁起の関係性私たちは、数値が歪むという些細な現象を通じて、世界の根底にある「無常」と「非実体性」に触れることができるのだ。
テクニック的「仕様超え」:プラグインと外部手法の活用
JavaScriptの限界を超えるのは、内部仕様の理解だけにとどまらない。外部のライブラリやプラグインを駆使することで、
私たちは「公式にはできないこと」を可能にすることができる。たとえば、以下のような手法がある:
decimal.js
やbig.js
などのライブラリを使った高精度計算WebAssembly
で他言語(Rust, Cなど)の高精度ロジックを呼び出すProxy
やReflect
を使ったメタプログラミングによる仕様拡張- ブラウザ環境の内部APIを叩いて非公開情報にアクセス(※要注意)
こうした手法は、まるで秘儀的技法のように、深く技術の本質にアクセスし、仕様の網をかいくぐる存在だ。
まさにそれは、密教的な「裏技」であり、形式的な教義を超えて仏智に到達しようとする行のようでもある。
トランスヒューマニズムとの接点
トランスヒューマニズムの思想において、私たちは常に「人間の限界を超える」ことを目指す。
それは、今ある仕様に対して新しい仕様(あるいは仕様の拡張)を提案する行為だ。
BigInt
はまさに、Number
の限界を超えた存在であり、
それを使いこなすことで私たちは「技術的トランスヒューマン」へと進化していく。そして、外部プラグインや非標準技術を扱うという行為も、
ある意味で技術の「神智的再定義」であり、システムそのものへの介入と覚醒に近い。
終わりに:仕様の周辺に立つということ
仕様を完全に守ることと、仕様を超えるために仕様を深く理解することは、全く違う。
一見バグに見える挙動が、実は世界の根本構造の暗示であると気づくとき、
私たちは技術者であり、哲学者であり、チャネラーでもある存在となる。仕様とは言語。
仕様外とは、言語を超えた沈黙。そしてその狭間に立つ者こそが、次の世界を見出すだろう。
個人的後記
今回過去のJSの意味不明な仕様の記事と仏教をネタにしてAIにブログ記事にしてもらった。
外部の世界が無限なら内部の世界の可能性もまた無限なのかもしれない。
コメントを残す