事務処理に最適化されたCOBOL 丸め誤差
殆どの言語の数値計算は浮動小数点が一般的です。二進化十進数(BCD)を標準に使うのはCOBOLぐらいのものです。
四捨五入はCOBOLではROUNDでカンタンに処理できますが他の言語では一工夫必要です。
VB.NET(2002)からDecimal型が使えるようになりました。JAVAにはBigDecimal型がありますがこれはCPU負荷が大きく大量データの計算には不向きです。C++ではかなりの工夫が必要です。
浮動小数点での現象
http://go2vb.cocolog-nifty.com/blog/2007/04/post_3828.html
0.1を1000回加算しても100にならない。
1.1 - 0.1 - 1が0にならない。
浮動小数点の0.1は内部では2進数で現すと循環小数となるためこのような現象が起こります。循環小数の場合、表示される値と内部の値が違うことが有るため、四捨五入した結果が違うということも度々起こります。
BCD演算であればこのような誤差は発生しません。事務計算では金額計算で1円の誤差がでたらユーザから信用を失ってしまいます。
--- つづく ---
お役に立てましたか?
IT、プログラミングのランキングサイトはこちらです。
最新記事の自動受信登録はこちらです。 |
![]() |
![]() |
![]() |
![]() |
| 固定リンク







コメント