

Windowsの電卓ですが、Double型とDecimal型のいいとこ取りといいますか、両方の特徴を有しています。  
具体的には、  
Ａ．
0.1+0.1+0.1・・・と加算をしていくと、Double型では誤差が出て0.3じゃなくなり、Decimalはちゃんと0.3、というようなことになります。  
しかし電卓ではちゃんと0.3なり0.9となります。

Ｂ． 1 / 3 * 3 を順に計算すると、Double型では1.0となり、Decimalだと0.9999999999999となってしまいます。  
しかし電卓ではちゃんと 1 になります。途中、1/3の時点で0.33333333333となってしまうにも関わらず、です。

このように、電卓はいたって普通の計算結果ではあるのですが、言語の型ではいいとこ取りに見えます。  
どのような処理をしているのでしょうか？


CC BY-SA 3.0
2015-12-25T08:25:48.433
20365
2016-02-01T10:56:16.923
2015-12-25T10:27:45.120
4236
13808
question
windows
Windowsの電卓の内部変数の型について


Microsoft Excelも1/3*3が1となります。Excelでの挙動については「[Excel
で浮動小数点演算の結果が正しくない場合がある](https://support.microsoft.com/ja-
jp/kb/78113)」に記載があります。おそらくは同じような実装になっているのでしょう。


CC BY-SA 3.0
2016-01-02T08:37:50.553
20533
2016-01-02T08:37:50.553
12774
20365
answer


[When you change the insides, nobody notices | The Old New
Thing](https://blogs.msdn.microsoft.com/oldnewthing/20040525-00/?p=39193/)
によると、元々IEEE標準の浮動小数点数演算に準拠していたのが、四則演算に限り任意精度演算が行えるように書き直されたようです。具体的な時期は書かれていませんが、手元の98SEでもそれらしい挙動が確認できました。

当時は本当に値域に制限がなかったらしく、どこまで `n!` を計算できるか、なんてスレッドまで。

[What's the highest number you can put in the Windows calculator - AnandTech
Forums](http://forums.anandtech.com/showthread.php?s=64c38dcc774dd858651f4beb8b98fbbf&t=137344)

ただ、上記スレの最後のページにもあるように、Win7からは 10^9999
あたりを超えたところで「オーバーフローしました」と表示されるようになっていますね。

[What is the largest number that can be use use in window 7 calculator -
Microsoft Community](http://answers.microsoft.com/en-
us/windows/forum/windows_7-windows_programs/what-is-the-largest-number-that-
can-be-use-use-in/dc54ec50-22b9-44db-a284-38cc8f6da1b2?auth=1)


CC BY-SA 3.0
2016-02-01T10:56:16.923
21576
2016-02-01T10:56:16.923
8000
20365
answer