質問: Windowsの電卓ですが、Double型とDecimal型のいいとこ取りといいますか、両方の特徴を有しています。 具体的には、 A. 0.1+0.1+0.1・・・と加算をしていくと、Double型では誤差が出て0.3じゃなくなり、Decimalはちゃんと0.3、というようなことになります。 しかし電卓ではちゃんと0.3なり0.9となります。 B. 1 / 3 * 3 を順に計算すると、Double型では1.0となり、Decimalだと0.9999999999999となってしまいます。 しかし電卓ではちゃんと 1 になります。途中、1/3の時点で0.33333333333となってしまうにも関わらず、です。 このように、電卓はいたって普通の計算結果ではあるのですが、言語の型ではいいとこ取りに見えます。 どのような処理をしているのでしょうか?
回答: When you change the insides, nobody notices | The Old New Thing によると、元々IEEE標準の浮動小数点数演算に準拠していたのが、四則演算に限り任意精度演算が行えるように書き直されたようです。具体的な時期は書かれていませんが、手元の98SEでもそれらしい挙動が確認できました。 当時は本当に値域に制限がなかったらしく、どこまで `n!` を計算できるか、なんてスレッドまで。 What's the highest number you can put in the Windows calculator - AnandTech Forums ただ、上記スレの最後のページにもあるように、Win7からは 10^9999 あたりを超えたところで「オーバーフローしました」と表示されるようになっていますね。 What is the largest number that can be use use in window 7 calculator - Microsoft Community