浮動小数点の取り扱い ぽんた 2002/08/17 22:35:16 ├(仮称)十進BASICを十進モードで使う限り,有... 白石和夫 2002/08/20 08:39:14 └お金を扱うのが目的であるのならば,固定小... 白石和夫 2002/08/23 21:08:09
浮動小数点の取り扱い ぽんた 2002/08/17 22:35:16 ツリーへ
浮動小数点の取り扱い |
返事を書く |
ぽんた 2002/08/17 22:35:16 | |
はじめまして、システム会社でプログラムを書いてます。 Cでプログラム開発をしているのですが、浮動小数点の取り扱いでよく分からないことがあります。 たとえばCでdouble で定義された変数は有効桁で15桁の精度を持ち、有効桁で16桁目から誤差が発生するということですが、 このため例えば 90000.7 と言う数字が内部では90000.69999999998 と表現さたりします(これはあくまで例です)。 このとき端数処理の扱いが小数点第3位切り捨ての場合90000.69になってしまいますよね?本当は90000.70なのにです。 このような問題を解決するために、端数処理の前に有効桁数15桁目に1を足すという方法を考えてます(桁上げするためです)。 ただこの手法を用いた場合本当の計算結果が9000000000.99999だった場合に上記の対応により9000000001.00となってしまいます。本当は9000000000.99となって欲しい。 この辺がdouble型で端数処理を扱う限界なのでしょうか? BCD演算を用いればいいというような話を聞いたことがありますが、BCD演算というのは数字を文字型で扱って、小学校のときに習った筆算ロジックで計算するということでしょうか? また白石さんの書きこみの中で浮動小数でも十進計算できるというものがありましたがそれはどのようなものなのでしょうか? お忙しいとは思いますがご教授お願い致します。 |
├(仮称)十進BASICを十進モードで使う限り,有... 白石和夫 2002/08/20 08:39:14 ツリーへ
Re: 浮動小数点の取り扱い |
返事を書く |
白石和夫 2002/08/20 08:39:14 | |
(仮称)十進BASICを十進モードで使う限り,有効数数字が15桁以内の十進小数は正確に表現されます。たとえば,90000.7は,内部で正確な数値として保持されます。 なお,(仮称)十進BASICの十進数はBCDではありません。10億を基数とする表現を採用しています。数値の内部表現は10進ではなく,10億進です。計算結果を変数に代入するときに十進数としての有効数字部の桁数が15桁になるように丸めています。 |
└お金を扱うのが目的であるのならば,固定小... 白石和夫 2002/08/23 21:08:09 ツリーへ
Re: 浮動小数点の取り扱い |
返事を書く |
白石和夫 2002/08/23 21:08:09 | |
お金を扱うのが目的であるのならば,固定小数点数を利用する手もあります。つまり,銭や厘を単位として,それ以下の端数は丸めるというやり方です。doubleだと,15桁の精度があるので,厘を単位にすれば12桁までは表現できることになります。足し算,引き算,割り算は簡単にできます(割り算の答えはお金ではない)。 |