・ 小数計算に弱い計算ソフト           S.H氏

 これは、困ったタイトルである。本来計算が得意なはずの表計算ソフトが、実は、小数
計算が苦手だという。

 私自身も、あるパズルの実証計算で似たようなことを最近経験した。
                                    (→ 参考:擬似小町算(2)
 Excel のVBAのプログラムで、ある場合が条件に適するかどうかを、IF文を用いて、
N−INT(N)=0 で判断させたのだが、本来検出される場合が検出されず、場合の数の
数え漏れとなってしまった。

 当HPがいつもお世話になっている未菜実さんから、「ABS(N-INT(N))<δ で判定する方
が良いかもしれませんね!」とアドバイスを頂き、パズルの文章表現を訂正することがで
きた。その未菜実さんから、「日経PC21の4月号で、エクセルの演算誤差について特集
が組まれている」ということを、お教えいただいた。また、日経PC21のHPでも演算誤差
対策が載っているということで、早速アクセスしてみた。

 その内容に愕然ときた。

例 8.2−7.2 の計算をさせる。通常の既定値だと、「1」と表示されて、何も問題がな
  いかに見える。計算結果を、次の表示桁で表示させてみる。
  
  小数点以下14位までは、 1.00・・・0 で特別なことは起こらない。
  小数点以下15位までだと、 0.99・・・9 と表示される。(「あれっ?」)
  小数点以下16位以上だと、 0.99・・・900・・・00 と表示される。(「え〜っ!」)

 計算の正確さよりも、計算の速度を優先させた結果とのことであるが、それにしても非
常に驚くべき事実である。

 同僚が試しに 8.2−7.2−1 を計算させたら、

   −0.000000000000000888178419700125・・・

 これを見て、同僚も「これはまずい!」と嘆いていた。また、128.2−127.2 でも同
じ現象が起こるが、なぜか、98.2−97.2 などでは起こらない。とても不思議な現象
である。他にも、64.1−63.1、・・・・・・・・・などたくさん!!。

 これらの問題を解消する方法が日経PC21のHPにいろいろ述べられている。小数計
算は苦手だが、整数計算はめっぽう強いので、できるだけ小数のままで判断処理しない
で、10のべき乗を乗じてround関数を活用するといいらしい。早速、日経PC21の4月
号を購入して、勉強することにしよう!

                                             投稿一覧に戻る