計算結果に思う
ネタ元
ここ
ここ
すっかり存在を忘れてました。BBSの会話の中で 53bit演算、64bit演算の話が出てきます。
これって確か、コプロの制約じゃなかったかな、と資料を漁ったのですが、見あたらず。
80x87の記事も殆どなく、うろ覚えの投稿になりますが....orz;
x86系CPUは浮動小数点演算が出来ませんでした外付けの数値演算プロセッサとしてx87系列としてoption扱いで存在してました。
x87を積んでないコンピュータはソフトでカバーしてました。それがいつのころか、CPUと一体になってからは、コプロの話が殆どされなくなりました。
呼び出しシーケンスすら忘れましたが、呼び方で24bit/53bit/64bitの指定ができたような気がします。
なぜ、windows系か53bitにしたのかは知りません。調べも付きませんでした。wwww. 不思議です。
当のbbsの中で >V6.0ではCPU内部で80bit浮動小数点 とあるのですが 80bit モードって VBはコプロを使わない独自演算だったのかなぁ。
コプロの話題自体が昔話になった現在では、過去の柵の一言で片付けられてしまいそうです。
Windows場合、コプロを使うのか、ライブラリを使うのか、不明でした ここ
誤差の原因は皆様の探求心の凄さで判明したようです。お疲れ様でした。
しかし。問題は、原因の解明以外にもありそうです。
IT開発者や理系の人には、有効数字という概念が身についています。二進数で表現できない数値は桁落ちが生じるのは基礎知識ですよね。(って断言しましたがごめんなさい。)
しかし、それはこちら側の見方であって、非理系で一般的な業務利用者は知らない事かも知れません。
その人たちに、仕組み上の問題で、誤差が出るのは不可避です。といっても、理解を得にくいです。
そのために、コボルなどの言語ではBCD(二進化十進表現)という形式が存在します。
.netの世界では桁落ちしない数字として Decicmalがありますか、28桁保証とはいえ、内部表現は二進な気がします。違うかな?
ORACLEのNumericは38桁まで指定が可能です。しかし、.net側には対応する変数がない。限界値以上では桁落ちやabortは避けられません。
数値の扱いや計算誤差、有効数字など、フレームワーク間の互換性がないから、ずっとついて回る問題ですね。
丸めも、世間一般では四捨五入なのに、IT屋で丸めと言えば、偶数丸めがデフォルトだったりします。
業務面からみたら、事務処理に適応した結果が出れば良いので、問題視する視点が違ってくると思います。
100兆の単位の計算で銭単位まで誤差なく処理可能...というのがシステム条件のところがありました。これはdecimal型でもOKですね。
BCD計算が可能だからCOBOLが存在出来ているのかも知れません。
全くのエンドユーザーが誤差問題を持ち出したとき、納得させることができるのでしょうか。「こんなもんですは」と誤魔化すことになるかも。wwwww....orz;
それにしても vb6.0が80bit演算んって..どこから来てるんだろう?