KDOC 229: 浮動小数点を手計算する
この文書のステータス
- 作成
- 2024-08-27 貴島
- レビュー
- 2024-09-03 貴島
概要
浮動小数点がどのように表現されるのが、わかっていなかった。手で計算して、確かめる。
0d0.5
10進数の0.5を浮動小数点で表示する。
- 0d0.5
- 小数部分
- 0b0.101
- 0b1.01 (小数点を右へ1つ動かす -1)
- 数値 = - 1.{仮数部} x 2^{指数部+バイアス}
- - 1.{0} × 2^{-1+127}
- 仮数部は常に1.から始まるため、その1は明示的に表示されない
- 小数点を動かした数は-0b1。オフセットバイナリで、0b0が0d-127を示すようになっている。正の数を示すには、127を足す必要がある。バイアス0d127(0b0111 1111)を足す。指数部は0b0111 1110となる
- つまり符号は正、指数部は0b0111 1110、仮数部は0となる。
- 0 0111 1110 000 0000 0000 0000 0000 0000
- 0011 1111 0000 0000 0000 0000 0000 0000
- 3 f 0 0 0 0 0 0
0d1
10進数の1を浮動小数点で表示する。
- 0d1
- 0b1
- 0 x 1.{0} x 2^{0+127}
- 符号は正で0
- 指数部は0 + 0b0111 1111
- 仮数部は0
- 0 0111 1111 000 0000 0000 0000 0000 0000
- 0011 1111 1000 0000 0000 0000 0000 0000
- 3 f 8 0 0 0 0 0
0d2
10進数の2を浮動小数点で表示する。
- 0d2
- 0b10
- 0b1.0 (小数点を左に1つ動かす +1)
- 0 x 1.{0} x 2^{1+127}
- 符号は正で0
- 指数部は1 + 0b0111 1111 = 0b1000 0000
- 仮数部は0
- 0 1000 0000 000 0000 0000 0000 0000 0000
- 0100 0000 0000 0000 0000 0000 0000 0000
- 4 0 0 0 0 0 0 0
0d3
10進数の3を浮動小数点で表示する。
- 0d3
- 0b11
- 0b1.1 (小数点を左に1つ動かす +1)
- 0 x 1.{1} x 2^{1+127}
- 符号は正で0
- 指数部は1 + 0b0111 1111 = 0b1000 0000
- 仮数部は1
- 0 1000 0000 100 0000 0000 0000 0000 0000
- 0100 0000 0100 0000 0000 0000 0000 0000
- 4 0 4 0 0 0 0 0
0d4
10進数の4を浮動小数点で表示する。
- 0d4
- 0b100
- 0b1.00 (小数点を左に2つ動かす +2)
- 0 x 1.{0} x 2^{2+127}
- 符号は正で0
- 指数部は2 + 0b0111 1111 = 0b1000 0001
- 仮数部は0
- 0 1000 0001 000 0000 0000 0000 0000 0000
- 0100 0000 1000 0000 0000 0000 0000 0000
- 4 0 8 0 0 0 0 0
0d5
10進数の5を浮動小数点で表示する。
- 0d5
- 0b101
- 0b1.01 (小数点を左に2つ動かす +2)
- 0 x 1.{1} x 2^{2+127}
- 符号は正で0
- 指数部は2 + 0b0111 1111 = 0b1000 0001
- 仮数部は2
- 0 1000 0001 010 0000 0000 0000 0000 0000
- 0100 0000 1010 0000 0000 0000 0000 0000
- 4 0 a 0 0 0 0 0
0d0.25
10進数の0.25を浮動小数点で表示する。
- 0d0.25
- 小数部分
- 0b0.11001
- 0b1.1001 (小数点を右に1つ動かす -1)
- 0 x 1.{0} x 2^{-1+127}
- 符号は正で0
- 指数部は-1 + 0b0111 1111 = 0b0111 1101
- 仮数部は0
- 0 0111 1101 000 0000 0000 0000 0000 0000
- 0011 1110 1000 0000 0000 0000 0000 0000
- 3 e 8 0 0 0 0 0
0d1.5
10進数の1.5を浮動小数点で表示する。
- 0d1.5
- 整数部分
- 0b1
- 小数部分
- 0b0.101
- 合計
- 0b1.101 (小数点を動かさない 0)
- 0 x 1.{4} x 2^{0+127}
- 符号は正で0
- 指数部は 0 + 0b0111 1111 = 0b0111 1111
- 仮数部は0d4(0b100)
- 0 0111 1111 100 0000 0000 0000 0000 0000
- 0011 1111 1100 0000 0000 0000 0000 0000
- 3 f c 0 0 0 0 0
参考
- 浮動小数点数内部表現シミュレーター - instant tools
- ビットずつに答え合わせできる。いくつか試してみるとわかりやすい
- ビットで表す数字の世界~符号編~ - 半導体事業 - マクニカ
- オフセットバイナリの解説
- ビットで表す数字の世界~浮動小数点編~
- 手続きのわかりやすい解説
関連
なし。