LoginSignup
9
6

More than 1 year has passed since last update.

浮動小数点と固定小数点の表現について

Last updated at Posted at 2020-04-14

固定小数点と浮動小数点の求め方について備忘録代わりに簡単に書いておく。
詳しい内容が知りたい場合は適宜調べてください。

固定小数点

  • 固定小数点は整数型を小数として扱う事が出来る
  • 小数を固定する位置はソフト(ハード)の実装によって決まる。

つまり、16bitの場合こう表現することもできるし

固定小数点

このように表現することも可能。

固定小数点

固定小数の構造

2 進数の場合、小数では桁が下がるにつれ 0.5 の乗数 ( 2 のマイナス乗) を表します。

小数点以下の値

例では0.9の表現を求めてみる。
10進数の小数を二進数に変換するには小数部分に2を掛けて行き1.0になるまで繰り返せば良いです。
1.0を超えたら1を引いた値に2を掛けていく。
計算方法

上から順に左→右に埋めていけばよい

小数部8bitなら0.8984375となります
小数部8bit

小数部3bitなら0.875となります
小数部3bit

結論:表現できるbit数が少ないと誤差が大きくなる。

浮動小数

IEEE754 という方式に準拠した 半精度浮動小数点(16bit)について書いてみます。
今回は0.0015を二進数の半精度浮動小数点(16bit)で表現してみたいと思います。
手順は以下の通りです。

  1. 仮数部の値を求める(やり方は固定小数と同じ)
  2. 1.xの形にする
  3. 1を外した値を仮数部として扱う
  4. 2の時に移動した数をバイアス値(16bitなら15)に足した値を指数部として扱う 以上。

浮動小数点の構造

半浮動の浮動小数点では 16 ビットを以下のように 3 つに分割します。
浮動小数点(16bit)

仮数部の求め方

まず最初に仮数部を二進数で求めます(仮数部の求め方は固定小数の時と同じです)
色んな数を計算してみる分かると思いますが1.0で収束する事の方が稀です。

仮数部の求め方.PNG

結果はこうなります。
00000000011000100100 …(以下省略)

次に小数点の位置をずらし1.xの形にします(小数点を右に10個分移動させます)

1.1000100100 …(以下省略)

最初の1を除いた先頭10bitの値が仮数部になります
1000100100

指数部の求め方

仮数部を1.xの形にする際に小数点を右に10個分移動させたので
指数は2E-10なのでバイアス値から-10します。
16bitは15なので、二進数にすると 01111ここから1010を引きます。
結果、指数は‭00101‬になります。

0 00101 1000100100
↑が半精度浮動小数で表した時の0.0015になります。

参考
https://www.macnica.co.jp/business/semiconductor/articles/intel/133327/

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6