1日5分で学ぶ情報処理の基礎知識 バックナンバー
##――――――――――――――――――――――――――――――――
1日5分で学ぶ情報処理の基礎知識 第52号 2005/03/29
「浮動小数点の情報落ち」
――――――――――――――――――――――――――――――――##
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■浮動小数点数の情報落ち
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
☆浮動小数点数の誤差
さて、以前も書きましたが、浮動小数点を扱う上では、誤差の発生は避
けようがありませんので、うまく、おつきあいする必要があります。
あるいは、浮動小数点を使わない、という選択をしなければならないか
もしれません。
いずれにしても、浮動小数点数では、どのような誤差が生じる可能性が
あるのかを、認識しておくことは重要なので、今週は、
・誤差が生じるパターン
・誤差が生じる対策
について書いていきたいと思います。
浮動小数点で誤差が発生するパターンには下のようにいくつかあります。
・丸め誤差(第47号でご紹介しました)
・情報落ち
・桁落ち
今回は、このうち、「情報落ち」について説明していきたいと思います。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
☆浮動小数点の情報落ちとは
情報落ちとは、極端に大きい数と極端に小さい数を足した時に生じる
現象で、その極端に小さな値が無視されてしまう現象をいいます。
ここで、例として、仮数部が2進数で8桁しか表現できない浮動小数点
数を考えてみましょう。
その前提で、 1.1110000×2^10 + 1.1110000×2^(-10)を計算すると、
^^^^^^^^^ ^^^^^^^^^
(ちょっとややこしいですが、^が付してある11.11の部分だけ2進数で、
他は10進数で表現されていると思ってください)
1.1110000×2^10 → 11110000000 (2進数)
+ ~~~~~~~~
1.1110000×2^(-10) → 0.00000000011110000(2進数)
|| ~~~~~~~~
? ← 11110000000.00000000011110000(2進数)
(最初に出てきた仮数部の8桁に、~マークを付しています。)
さて、仮数部は2進数で8桁までしか持つことができないとすると、
計算結果の数 11110000000.0000000001111 の最初の8桁までしか
情報として持っておくことができません。
11110000 000.0000000001111
^^^^^^^^
↑この部分しか情報として持てない
そのため、この数を浮動小数点で表すと、
^マークより右の部分は無視されてしまって
「1.1110000×2^10」になってしまう。
つまり、計算結果だけをみると、
1.1110000×2^10 + 1.1110000×2^(-10) = 1.1110000×2^10
となってしまいます。
これが、情報落ちの正体です。
ところで、情報落ち自体は浮動小数点以外でも生じるのですが、浮動
小数点で情報落ちが強調される理由は、私の想像ですが、
1.1110000×2^50 + 1.1110000×2^30 = 1.1110000×2^50
(情報落ちが生じる)
というふうに、小数がからむときだけでなく、正の数どおしの演算で
も生じるときがある、という意外性があるからなのではないかと思います。
なお、Excelで情報落ちを生じさせた例を作ってみましたので、興味の
ある方はダウンロードをしてみてください。
※ウイルスチェック等を行った上で自己責任で使用してください。
ちなみに、マクロは入れていません。
http://mh1.hp.infoseek.co.jp/cgi-bin/dl.cgi?km00052.xls
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□今日の用語
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
☆情報落ち
情報落ちとは、極端に大きい数と極端に小さい数を足した時に、その
極端に小さな値が無視されてしまうことをいいます。
なお、「極端に大きい」、「極端に小さい」というのは、
その2つの数を比較して相対的に大きいか、小さいかということを言って
います。
上で書いた、最後の例のように両方の数が大きい数字でも、その2つの
数の大きさに差があれば(2^50と2^30だと随分違いますよね)、情報落ち
が生じます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□編集後記
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
最近、トヨタのポルテという車のCMがまた流れ出してますね。
その裏側で「イェーーーーーーーー!!」という叫び声が入っている
んですが、聞いたことはあるでしょうか?
それ、トム・ジョーンズという胸毛がぐちゃぐちゃな、おっちゃんが歌
っている「恋はメキメキ」(邦題)という曲のイントロです。
ちょっと前にもCMが大量に流れていた時期があって、そのときにすっか
りはまってしまい、ついCDを買ってしまいました。
ちなみに、原題は「If I Only Knew」といいます。
では、なぜ、「恋はメキメキ」という邦題なのか?
それは、CDを聞いてみればわかりますので、ぜひ、聞いてみてください。
いろんな意味で、クラクラしますよ(^^)。
はげまし・意見・批判等は大歓迎ですので、ぜひ、ご感想をお寄せくだ
さい。
また、試験対策用ネタで、「過去問のこの問題がわからないので教えて!」
等のリクエストがあれば、お寄せください。
私の手に負える範囲ならば、扱っていきます。
試験対策に関係なく、単に興味のある話とかでも構いません。
リクエストは、がんがん送ってきてください。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□今回から購読された方へ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメールマガジンでは、情報処理の本質を簡潔明瞭に、しかも、できる
だけ短い文章で説明をしていくつもりです
対象読者は、
・ 情報処理技術者試験受験者
・ 中小企業診断士受験者
・ 既に情報処理技術者試験に合格しているものの、もっと深く理解をし
たい方
・ 試験を受験する気はないが、コンピュータの動作原理を知りたい方
(コンピュータにできることと、できないことを知りたい方)
・ システム部門(又はベンダー)にプログラム開発を依頼しようとし
ているユーザの方
(経験上、ユーザ自身がある程度、情報処理の知識がないと開発はうま
くいかないことが多いです)
等を想定しています。
これからも、よろしくお願いいたします。
なお、バックナンバーはこちらで公開しています。
http://mh1.hp.infoseek.co.jp/mm/km/km_index.shtml?no=k52
そういえば、バックナンバーの公開は不定期なので、直近のものは、掲
載されていないかもしれません。ごめんなさい。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
執筆:mh1
メールアドレス:mh1@spica.freemail.ne.jp
このメールマガジンは『まぐまぐ!』
http://www.mag2.com/ を利用して発行しています。
配信中止はこちら http://www.mag2.com/m/0000146674.htm
───────────────────────────────────
※掲載された内容に関するトラブルについては、当方は一切関与いたしませ
んので、ご了承ください。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|