浮動小数点数とは 計算方法 有効桁数



デジタル信号処理

公開日:2018/10/25 , 最終更新日:2018/11/17       

In English
前提知識
2進数


■浮動小数点数とは

浮動小数点数とは数値表記方法の一つで、指数を用いることで非常に大きな数値から小さな数値まで幅広い範囲の値を扱うことができる表記方法です。 表記方法が簡便であることから、コンピュータに実装する際に少ない容量で実装することができる反面、非常に小さい桁数が桁落ちするというデメリットがあります。 浮動小数点数とは異なる数値表記方法に固定小数点数があります。

例えば0.00000000123や、12300000000のような桁数の大きな値を表現する場合、以下の様に表記し、 小数点の位置が動く事から浮動小数点数(Floating point number:単にFloat)と呼ばれます。



■浮動小数点数の構造

浮動小数点の構造は符号と指数部と仮数部で構成されます。単精度浮動小数点(Single precision floating point number:Single型)と倍精度浮動小数点(Double precision floating point number:Double型)があります。 倍精度浮動小数点の方が多くの桁数まで表現できますが容量が大きい(64bit)ので、プログラミングの際は気を付ける必要があります。なおプロブラム言語によってはsingle型をfloat型と呼ぶこともあります。



■浮動小数点演算の考え方

浮動小数点は2進数で表現するのが前提ですが、理解するためにまずは10進数で考えます。-252.025という数字を浮動小数点をイメージした表現にします。



上記の様に、正負を示す符号と指数を用いて数値を表現します。これを2進数で表現すると以下になります。この時点ではまだ浮動小数点の表記になっていません。



最終的な浮動小数点の表記は以下のとおり(単精度となります)。



詳細を説明します。まず符号ですが、負の場合は1正の場合は0となります。 次に仮数部は先頭の1を省いて記載します。これは、2進数の場合先頭は必ず1なので、少しでも表現できる情報を増やすための工夫となります。 最後に指数部ですが、指数に127のオフセットを加えて表現します。これは、指数を-126から127まで表現出来るようにするためです。 指数の幅は以下のとおり。なお11111111は特殊な場合に用いるために残してあります。



■浮動小数点の扱える範囲 , 有効桁数

<単精度 浮動小数点数>

①正の最小値
以下となります。仮数部は先頭に1があるので注意が必要です。



なお負の最小値は、下記に示す最大値に-1を掛けたのと等しいので省略します。

②最大値
仮数部は2進数の小数点の計算になりますので、20+2-1+2-2と加えていきます。



③有効桁数
有効桁数は仮数部で決まります。仮数部は224=16777216となり、一応8桁まで表現できるのですが全ての8桁の数は表現できないので、 有効桁数は7桁となります。小数点を含む数値を2進数で表現する場合は循環小数になりやすく(詳細はこちらで説明)、例え浮動小数点でも有効桁数以上の循環小数部は削除されます。 これが、プログラミングの世界では浮動小数点の値同士を一致比較してはいけないと言われる理由です。



なお有効桁数は、以下の様に対数をとって調べる方法もあります。これは対数は桁数を表すという概念からきています。



<倍精度 浮動小数点数>

上記と同様の計算をすると、
 ① 正の最小値は、2.225074×10-308
 ② 最大値は、1.797693×10308
 ③ 有効桁数は15桁 (log102^53=15.95)
となります。









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



デジタル信号処理