ピタゴラスの定理によれば、角Cが直角になっているような直角三角形の3辺の長さa,b,cには、「aの2乗+bの2乗=cの2乗」の関係があります。「a=3, b=4, c=5」や「a=5, b=12, c=13」のような、この関係を満たす正の整数の組み合わせは無数に存在することが知られています。
では、2乗ではなく3乗になったらどうでしょう。つまり、「aの3乗+bの3乗=cの3乗」を満たすような正の整数の組み合わせは存在するでしょうか。実は、「~乗」の「~」の部分が3以上になると、そのような正の整数の組み合わせは存在しないことが証明されており、フェルマーの最終定理と呼ばれています(フェルマーが予想し、ワイルズが証明した定理なので、フェルマー予想、ワイルズの定理と呼んだほうがいいのかもしれません)。
この定理に反しているように見える例を先日紹介しました(C言語の場合、bashやzshの場合、Perlやawk, JavaScript, PHPの場合)。プログラミング言語の中には、数学的には正しくないような数値の扱い方をするものがあり、それに該当するような状況で「aの3乗+bの3乗=cの3乗」を計算すると、等号が成立するように見えるのです。よほどの初心者でない限り、自分が利用するプログラミング言語のそのような性質についてはよく知っているので、計算が正しくない場合があるからといって、それが大きな問題になるということはありません。
表計算ソフトの場合には、そういうわけにはいきません。表計算ソフトの利用者の大部分は、まさかコンピュータが初頭的な計算において間違いを犯すとは思っていないからです。
次のような例を試してみましょう。これは、「Perlやawk, JavaScript, PHPの場合」で紹介したのと同じ例です。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 5999856 | 99992800 | 100000000 | =A1^3+B1^3=C1^3 |
D1の値はTRUE、つまりa=5999856, b=99992800, c=100000000のとき、「aの3乗+bの3乗=cの3乗」ということになります(Excel 2007, 2008だけでなく、OpenOffice Calc 3.0RC1, gnumeric 1.8.2, KPsread 1.6.3, Google Docs BETA等でもこうなります)。フェルマーの最終定理が間違っているわけではありません。表計算ソフトの計算が間違っているのです(正しく計算すれば、aの3乗+bの3乗=999999999999999997014016、cの3乗=1000000000000000000000000になります)。先にも述べたように、プログラマにとっては、こういうことはよくあることで、特に問題ではありません。しかし、プログラマ以外の人にとっては、このような単純な計算が、表計算ソフトでは正しく行われないというのはとても困ったことです。
かつて使っていた電卓では、整数の計算結果が正しく扱える範囲を越えると、単に「E」と表示されていました。表計算ソフトもそれを見習って、計算が正確でない可能性がある場合には、そのことをユーザに通知すべきでしょう。
コメントする