・ 小数計算に弱い計算ソフト           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月
号を購入して、勉強することにしよう!



                                             投稿一覧に戻る