読者になるhnwの日記この広告は、90日以上更新していないブログに表示しています。2014-01-04Mono環境のC#はdecimal型を正しく丸められないTweetMono環境のC#において、decimal型リテラルもしくはdecimal型の演算中にdecimal型の精度を超えた場合に、最近接の数に丸められないバグと偶数丸めのはずが四捨五入になるバグを見つけました。}}上の例で言うとdecimalは10進28桁までしか表現できないので、小数点第2位以下の「5」や「5999」が丸められます。dcm1はプログラム中のdecimal型のリテラルを解釈する例です。この例について言うと、表現できるうちで最近接の2数の「ど真ん中」になるので、偶数丸めが起きて「...543.2」と切り捨てられています。これは期待通りの挙動です。dcm2の方はど真ん中より大きい数ですので、「...543.3」になるべきです。ならずに切り捨てられています。次に、演算途中に似たような状況になる例としてdcm3とdcm4の和を取ってみました。こちらはdcm1と全く同じ数を表すはずなので偶数丸めで切り捨てが起こるはずですが、なぜか切り上げられています。最後に念のためdcm3とdcm5の和を取ってみました。これはdcm2と同じ数になりますが、dcm2のときと異なり、期待通り切り上げが起こっています。ちなみに、.NET環境では上記すべてが期待通りに動きます。今回指摘した内容はどちらもバグだろうと思いますが、ここから先どこをどう追えばいいのか(もしくはどこに投げればいいのか)イマイチわからないので、どなたか教えて頂けると幸いです。20:40追記)「(追記)なぜMySQLのdecimal型を例に使った...2011-10-29浮動小数点数の丸め処理を見比べてみる各種プログラミング言語には、切り上げ・切り捨て・四捨五入な...2007-11-13近況報告つい先ごろroundの話題を読み直してみました。12はてなブログをはじめよう!hnwさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。