2007.08.11
  • twitter
  • facebook
  • はてなブックマーク
  • 印刷

誤差とどう向き合うか

株式会社オーグメント 代表取締役 渡辺 俊雄

前回はちょっと話題を変えましたが、ここまで、少しくどいくらいに「コンピュータには“誤差”がある」ということを言ってきました。これは、コンピュータを利用する上で欠かせない知識のひとつなのですが、意外と知られていない事実だと思えたからです。

コンピュータの計算において誤差が発生することは、その仕組み上、避けることができません。ただし、計算上の誤差は常に発生するわけではありません。

大切なのは、どのようなケースで誤差が発生するのか、その影響は深刻か否かを客観的に見ることができるようになることです。

たとえば、はっきりと誤差が発生するケースとして、小数点演算を行うときが挙げられます。では、小数点演算を使うときにはどのような場合があるのでしょうか。小数点演算を直接使うという当たり前のケースを除いて、普通に考えると、割り算とか、歩合とか利率計算のために掛け算をするときなどが該当しそうですよね。

そういったことをその場その場で考えられることが、コンピュータリテラシの基本なのだと思います。

ここで、再び簡単な計算をしてみましょう。111,111,115 から 111,111,111 を引いてみてください。

答えは 4 ですよね。

では、この数字を有効桁数8桁のコンピュータで計算させたとします。現在の平均的なコンピュータの内部では、この数字を「浮動小数点」という形式で扱うことになりますが、この際に次のような変換が行われます。

 111,111,115 → 1.1111112 × 10の8乗
 111,111,111 → 1.1111111 × 10の8乗

111,111,115 が 1.1111112 になるのは、有効桁数の9桁目が四捨五入されたためです。では、計算させてみてください。

ここでの答えは、0.0000001 × 10の8乗 になりますね。

あれっ? 最初に計算したときには 4 だった答えが、有効桁数8桁のコンピュータで計算させたら 10 になっちゃいました……。(汗;)

では、今度は 111,111,114 から 111,111,111 を引いてみてください。

答えは 3 ですよね。

次に、先ほどと同じようにこの数字を有効桁数8桁のコンピュータで計算させます。今度は有効桁数の9桁目が四捨五入された結果、111,111,114 は“1.1111111 × 10の8乗” になります。

あれっ? コンピュータによる変換の結果、111,111,114 と 111,111,111 が同じ数値になってしまいました。これ、あらためて計算するまでもなく、この引き算の結果はゼロになります。

いかがでしょう。誤差に関する知識がないと、期待する答えが得られないということがある、ということがお分かりいただけると思います。

それで、インターネットを検索していたら、次のようなページを見つけました。面白いのでご紹介しておきます(もっと早く見つけておけばよかった、、、(苦笑))。

▼“達人”芳坂和行氏に学ぶ、エクセル(Excel)「演算誤差」対策講座
 http://pc.nikkeibp.co.jp/pc21/special/gosa/index.shtml

渡辺 俊雄(わたなべ としお)

株式会社オーグメント 代表取締役
1958年、東京生まれ。メーカー系システムエンジニア、大手コンピュータ出版社の書籍編集者、インターネット関連組織の広報などを経て2006年に独立。大学生と高校生の二人の子どもを持つ。

ご意見・ご要望、お待ちしています!

この記事に対する皆様のご意見、ご要望をお寄せください。今後の記事制作の参考にさせていただきます。(なお個別・個人的なご質問・ご相談等に関してはお受けいたしかねます。)

pagetop