浮動小数点数

現在位置のナビ

トップコンピュータの国雑記帳 → 浮動小数点数

説明

浮動小数点数についての説明をQuoraに書いたので、こちらにも転記しておきます。

有効数字について復習

『有効数字』という考え方をwebmasterは中学校の技術科で習いました。 あなたは習ったことがありますか? 浮動小数点数は、有効数字の考え方を2進数で表現したものです。

ちょっと有効数字を復習しましょう。 有効数字とは、誤差の大きさを意識した数字の扱い方です。

日本の人口をちょろっとネットで調べたら1.257億人とありました。 これは、125,700,000人ジャストを意味しません。 最後の数字7の下の位を四捨五入しているので、最大で±5万人の誤差を含みます。 125,650,000~125,749,999人のどこかです。 「一人単位で求めなきゃダメだろ」と思うのは文系の発想で、「どうせ毎日変動しているし、数えた日から日数が経つほど誤差が大きくなるからこの程度のアバウトな数字でいいや」と考えるのが有効数字です。

ちなみに有効数字の正式な書き方で人口を書くと、1.257× 108となります。

2進数表現

1.257× 108を2進整数で表現すると、0b11101111110000001111010000 です。 コレを2進数の有効数字表現します。 0b1.110111111000000111101× 20b11010になります。 0b1.110111111000000111101 の所を『仮数部』と呼んで 0b11010 の部分を『指数部』と呼びます。 仮数部と指数部を適切にパッキングして一つの変数で表せば浮動小数点数です。

浮動小数点数の実装

ついでに浮動小数点数の実装の話を書きます。 今実用で使われている浮動小数点数はほとんどがIEEE 754という規格です。 単精度と倍精度がありますが、32bitの単精度の話を書きます。

32bitに仮数部と指数部をパッキングします。 単精度浮動小数点数はプラスマイナスの符号が1bitで仮数部が23bitで指数部が8bitです。 先の例だと仮数部が23bit未満なので下位に0をつけます。0b1.1101111110000001111010× 20b00011010

ここで少し工夫があります。 10進数の有効数字では1桁目が1〜9のどれかでしたが、2進数だと必ず1になります。 必ず1になるなら省略できます。 23bit分を小数点以下の表現に使えます。

よく考えると有効数字の1桁目が1にならない例外があります。 数字のゼロです。 これは例外なので、指数部に特別な数字を入れた時に仮数部を無視してゼロ扱いします。

あと、浮動小数点数同士の割り算で間違えてゼロで割ってしまった時、例外割り込みを上げればよいのですが、「演算結果が数字じゃないよ」という意味をもたせられると便利です。 これも指数部に特別な数字を入れて∞(無限大)として扱います。 負の数の2乗根を計算しようとした時にはNaN(Not a Number)という表現も使います。

Wikipediaの説明

久しぶりにWikipediaで浮動小数点数の説明を読んだらわかりやすく書いてありました。 わざわざ説明する必要は無かったかな?

更新日付

2023年10月22日 初出


back button 雑記帳へ