浮動小数点数の形式でよく使われているものを具体的にみていきます。
32ビット
32ビットの形式例はごくごくシンプルらしいです。
よくわからんので図にしてみます。
0 0000000 . 000000000000000000000000
S E M
1ビット 7ビット 24ビット
S:仮数部の符号(0:正、1:負)
E:指数部(2を基数として、負の数は2の補数で表現)
M:仮数部(2進数 絶対値表示)
上記の形式を用いて、10進数の0.375という数字を表すとどうなるか見てみます。
0.375を2進数に直します。
0.5|0.25|0.125|
各桁の重み|1| |1/2| 1/4| 1/8|
--------------------------------
2進数 |0| .| 0 | 1 | 1| = 0.011
算出した2進数0.011を0.Mの形式に正規化
0.011 → 0.11 * 2⁻¹
正規化した数から符号(S)と仮数(M)、指数(E)の値を抜き出す
0.11 * 2⁻¹
符号は0
指数は7ビットの2進数で表しているため
10進数「-1」は
1 ⇨ 00000001となり、2の補数11111111となる。
仮数は11
0 1111111 11 0000000000000000000000
符号 指数 仮数部
上記となります。
IEEE754の形式例とバイアス値
IEEE(米国電子電気技術者協会)により規格化された、IEEE754という
浮動小数点数の形式です。
32ビットや、64ビット、128ビットの形式があるようですが32ビットを例として
みてみます。
32ビットで構成するのは同じのようですが、ビット数の内訳と指数部のあらわし方
正規化の方法が違うようです。
1ビット 8ビット 23ビット
S E M
S:仮数部の符号(0:正、1:負)
E:指数部(2を基数として+127する バイアス127)
M:仮数部(仮数-1の2進小数で表す 1.xxxの小数部)
指数部の使えるビットが1つ増えています。
なんか全くよくわからないので一つ一つ分解していきます。
IEEE754って何よ
浮動小数点って言っても色々あるから、規格揃えて使いましょう
となったらしく、IEEE754を抑えておけば大体大丈夫らしいです。
IEEE754の特徴は「1.xx」の形で正規化することです。上記の仮数部の説明ですね。
2進数「0.011」を正規化すると「0.11 * 2⁻¹」になりますが
IEEE754の場合は「1.1 * 2⁻²」となり1ビット多く保持できるようです。
「バイアス」には「ゲタをはかせる」という意味があります。
実際の指数 バイアス 指数 2進数
-127 + 127 0 00000000
|
0 + 127 127 01111111
|
128 + 127 255 11111111
バイアスにはマイナスの数値を符号なしの2進数で表すために、所定の数(バイアス値)を加えて
表す方法となります。
ではIEEE754の形式を用いて、10進数の0.375という数字をあらわすと
どうなるかみてみます。
0.375を2進数にすると0.011。これを1.Mの形に正規化します。
0.011 → 1.1 * 2⁻²
符号は正の数なので「0」
仮数は1.MのMに当たる部分。そのため「1」
指数は指数の値をバイアス表現したもの。
そのため「-2+127」の結果を2進数にした
「125」⇨「01111101」となる。
Sは0
Eは01111101
Mは1
0011111011000000000000000000000
これで出来上がり!
まとめ
ここら辺は全て慣れですね。
すぐに忘れてしまいそうなので何回か復習しようと思います。