公開終了
クイズ
Gマスター
「クイズ」のコメント
>> むぃ さん
この件に関してですが、銀行丸めなんて銀行にやらせとけばエエことやと思います。銀行に関しては、銀行丸めは有効です。でも、他の用途に関しては、銀行丸めって邪魔でしかない場合が多いです。C#で銀行丸めをデフォルトにしたって、MSのプログラマーは絶望的にセンスが無いと思います。
【合計した時の誤差が減るって言ってるけど】
「2.5, 4.5, 2.5, 0.5」だと、合計は10なのに丸めてから合計すると四捨五入でも銀行丸めでも8なので、改善されない。
4個でなく大量の要素の場合には、確率的に誤差が減るので、銀行の場合には有効。
そもそも、丸めてから合計するって考え方が間違えてる。合計する必要性があるなら、合計してから丸めるべき。
銀行の場合には、口座毎に丸めてから合計するので、有効。
【小数点1桁までしか意味を為さない】
0.5を判定する場合ですが、2進数で
xxxx.011111111111後ろどこまでも1
xxxx.100000000000後ろどこまでも0
xxxx.1後ろのどこかで最低1個の1がある
と、上は小数点以下は0.5以下、真ん中が0.5丁度、下は0.5より上って保証があります。四捨五入も銀行丸めも話は簡単です。
小数点2桁目で、数学的(と言うよりも数値演算的)に破綻します。
「0.05」は2進数で無限少数になります。1/3は10進数で0.3333と無限少数で3進数なら0.1と有限になりますが、同様に0.05は2進数では無限小数です。0.05であるかどうかを厳密に判定するなら、メモリを埋め尽くすまで精度を上げても無理です。
銀行の場合、小数点1桁目の話なので、有効です。
元々、銀行用に設計されたSQLなら銀行丸めを採用する意義はあると思います。汎用言語に銀行丸めなんて百害あって一利なしです。
このぐらい軽く考えただけでわかる話なのに、曲がりなりにも超大手ITが仕出かすのは、、、、、