Hatena::ブログ(Diary)

NyaRuRuの日記 RSSフィード

archive

2009-10-04

電卓の話

また、電卓など標準アプリケーションに入っているのも昔のまま。AppleのCMでクールなアプリケーション(笑)として挙げられているのをご存知の方も多いと思う。過去との互換性もあるので(別のアプリケーションから起動している可能性がある)変更が難しいのかも知れないが、どうせ変えるならとことんWindows Vista風にして欲しかった。


電卓
これも3.x以前から存在する標準アプリケーション。何1つ仕様は変わっていない

「Windows Vistaを好きになれない理由」- 西川和久の不定期コラム

Windows史上初? 大きく変わった「電卓」

誰もが一度は使ったことがあるWindows付属アプリケーションの筆頭と言えば、やはり電卓だろう。ごく単純なメモリー機能付きの四則計算に使うのが一般的だろうが、2/8/10/16進数を扱う関数電卓にもなる。Windowsの電卓は「あって当たり前」の空気のような存在で、Windowsが手を変え品を変えて進化してきても、電卓だけはほとんど、機能も見た目も変わることなく、そのまま続いてきた。その電卓がなぜか、Windows 7では大幅にパワーアップしている。

実は大きく進化していたWindows 7の「電卓」

Windows 95以来、スタートメニューのアクセサリには、電卓が含まれていた。その機能はVistaまでほとんど変わることなく続いてきた

Windows 7ソフトウェアレビュー − 大きく進化した電卓編


When you change the insides, nobody notices - The Old New Thing』より.

14.20 中身を変えても誰も気付かない

電卓とメモ帳が変化していないことに人々が不満を漏らしたときはわけがわからなかった。実際には、どちらのプログラムも長年にわたって変化してきた(メモ帳にはメニューやステータスバーオプションが追加されたし、電卓には大掛かりな改修作業が行われた)。

これらの人々が、「なぜ Microsoft は Windows をかっこよく見せることに全力を注いでいるのか。技術の改善に全力を注ぐべきであり、外観をよくするための改良はやめるべきだ」と訴える人々と同じであったとしても、驚くにはあたらない。

そして電卓には、まさにそれが起きていた。大がかりな技術的改善である。外観は改善されていない。そして、そのことに誰も気付かなかった。それどころか、不満は続出した。「電卓を見てごらん、これまでとずっと同じじゃないか。」

電卓の内部(算術エンジン)は完全に最初から書き換えられていた。IEEE 準拠の浮動小数点ライブラリが任意の精度の算術ライブラリに置き換えられた。これは、電卓が小数の計算を正しく行えないことを小ばかにする記事が書き立てられたからだ(たとえば、「10.21 - 10.2」は 0.0100000000000016 になった)。

(中略)

好きか嫌いかはともかく、UI を変更しなければ誰も気付かない。新しい UI にあれほど労力を注いでいるのはこのためだ。

Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング! - 14.20 中身を変えても誰も気付かない


Windows 95 付属の電卓にすでに拡張精度機能が実装されていたとすれば,「Windows 95 以来ほとんど変わることなく」ってのはまあそこまで外れてはいないかもしれませんが,さすがに Windows 3.x 以前から何 1 つ仕様は変わっていないって言われるのはかわいそう.

nn 2009/10/05 02:12 可哀想でもないような。
小数を正しく計算するのは当たり前の事なので、それは仕様変更では無く修正でしょう。
マイクロソフトはネットブックで台頭してきたLinuxを意識して電卓を高機能化したのではないでしょうか。Gnomeの電卓は昔から高機能ですし。

kounoikekounoike 2009/10/05 08:46 いつだったか忘れましたが95より後で階乗の計算時間がかなり変わっています。
今や10000!でちょっと待たされる程度なので、アルゴリズムが違うのでしょう。

通りすがり通りすがり 2009/10/05 14:47 >n さん
小数の話 (10.21-10.2) が「正しく計算できていない」ように見える話は、
電卓が間違っているわけではありませんよ。
0.0100(省略)016 となる計算結果は、「規格上正しい」ものです。
最後が 016 になるものは、Excel でも同じように結果を出力しますよ。
お使いでしたら、他の表計算アプリケーションでも同じように出力されますよ。(小数点を16桁以上表示するようにしてください)

上記の話は「規格に準拠し誤差がある」ものを、「任意の仕組みを用意し誤差がない」ように変更した。
という話です。

「どちらが正しい」というのは間違いで、「どちらも正しい」のです。

だから可哀想なのです。

nn 2009/10/05 16:25 >通りすがりさん
電卓に浮動小数点を使うという規格があるとは知りませんでした。
…釣りですよね?

通りすがり通りすがり 2009/10/05 16:59 では何故昔のWindowsの電卓と(表記上見えないだけで)今のスプレッドシートが同じ結果になるのでしょうね?

名無し名無し 2009/10/05 17:33 >小数を正しく計算するのは当たり前の事
これはひどい

Anonymous CowardAnonymous Coward 2009/10/05 18:02 >小数を正しく計算するのは当たり前の事
無限精度小数が必要ですね!
分数計算の機能が導入されても、有理数を正しく計算するのは当たり前ですから、それは仕様変更では無く修正ですよね。

nn 2009/10/05 19:16 標準で入っている電卓は一般的な(関数)電卓の電子化を意図したものでしょうから、挙動が異なる(=少数計算が正しくない)ものは明らかにバグでしょう。
個人的に強くそう思いますが、そうでない人も居るのですね。不思議です。

NyaRuRuNyaRuRu 2009/10/05 20:14 >>n さん
あー,原文から (中略) で略した部分がまずかったですかね.
Windows の電卓に拡張精度機能が入る以前と以後の違いには,IEEE 754 な浮動小数点演算を行うかどうかという違いだけでなく,有理数演算の有無もあります.決して,10.21 - 10.2 が 0.01 になった違いのみを指して「かわいそう」と言っているわけではないので念のため.
有理数演算の有無ぐらい違いがあれば,さすがに「Windows 3.x 以前から何 1 つ仕様は変わっていない」には当たらないと思ったわけですが,いかがでしょうか?
1/3*3 が正確に 1 にならない電卓も未だに市販されているかと思いますが.

>>kounoike さん
情報ありがとうございます.
確かに階乗計算はアルゴリズム次第でだいぶ速度が違いますね.
以前 Mathematica と Octave を比べて,Mathematica がやたら速いことにびっくりしたことがあります.
余談ですが,Mathematica の実装に関する話はこの辺に.
http://documents.wolfram.com/v5/TheMathematicaBook/MathematicaReferenceGuide/SomeNotesOnInternalImplementation/A.9.4.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証