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

参考

関連

なし。

Backlinks