2010-04-23
浮動小数点を10進数行う基盤があればすべて終わりなんじゃないの?
そしたら全部ピュアな数学の世界になって, 計算機の誤差とかの人は全員失職するけど, 明らかにそうなったらいいよね. どうすればいいんだろう.
BigDecimalとか, 浮動小数点の誤差を中で整数で数値を保持することで吸入するソフトウェアのレイヤーでのクラスはあるし, これはわりと思いつく. たぶん研究レベルではこの方針でより高速なものとかも開発されてると思う.
だけど, そもそもは, ハードウェアのアーキテクチャが2進数ベースで演算を行ってるからいけないんじゃないか. たぶんだけど, 半導体(トランジスタ)がONかOFFの二値しかとれないという事実に依存していてそれを上位で吸収する気がないからどんどん伝搬しているということで, 本当ならば人間が蓄えてきた数学という基盤に合うようなものを考案すべきなんだ.
というわけで, 半導体が10進数を表現出来ればいい. そのためには何が必要かというと, きっと量子レベルでの磁気による分岐とかかな. なんかあったよね. そういうレベルでの特性を使って, 10進数を表現出来るトランジスタを作って, それをベースに計算機アーキテクチャを作り直せば, スーパー上位でのプログラミングのレイヤーで10進数演算における誤差とかを一切気にせず良くなる. もちろん無限桁にはならないだろうからそういう点での誤差は出るでしょうけど, 2進数は大雑把すぎる気がしてならない.
テスト書いてると, 誤差を考慮したテストを書く必要がある. 例えば, ある時は0が-0になってエクザクトな等値判定だと失敗するので, deltaを考慮したりということになるんだけど, めっさめんどくさい. これを全部なくせたら世の中もっとハッピーになるよね. 既存のCPUとか全部作り直しで半端じゃないコストかかるけど, 2進数のソフトウェアを10進数のハードウェアで動かすようなラッパーを作ればいいんだし, そしたらピュアに二進数なソフトウェアは低速で動作するハメになる(例えばシフトとかめっさ遅くなると思う)けど, そういうのはほっといて, なんか人類は計算機アーキテクチャを変えるべきなんじゃないかと思ってきた. 並列処理とか, そういうのにもデフォで対応した, 新しいアーキテクチャが必要な感じがする.
と, ソフトウェアのレイヤーの人は思うんだ. もっと楽させてくれよ. ハードウェアやさんがんばれ!!まぁ現状としては, ソフトウェアのレイヤーで吸収するのがいいのかなとは思う・・・. けどパフォーマンスの劣化がひどすぎる. さすがに許容出来ない. Rubyとかはデフォルトでそうなってたっけ?そんなわけはないか. でもあの言語はそういう用途で使うものだし(誰もあれで計算をしたくない), いいと思う.
- 11 http://d.hatena.ne.jp/kami_object/
- 11 http://www.kt.rim.or.jp/~kbk/zakkicho/index.html
- 7 http://www.google.com/search?lr=lang_ja&hl=ja&q=hatena+akiradeveloper
- 6 http://a.hatena.ne.jp/AlexAndRite/
- 3 http://a.hatena.ne.jp/Ddtana/
- 3 http://d.hatena.ne.jp/
- 3 http://reader.livedoor.com/reader/
- 3 http://search.minakoe.jp/rsss/rsss.asp?qry=java&multi=1
- 2 http://d.hatena.ne.jp/keyword/動的言語
- 2 http://d.hatena.ne.jp/keyword/Java3D
- 2010-04-18 山本大@クロノスの日記 5/38 13%
- 2010-04-20 おもしろWEBサービス開発日記 4/30 13%