読者です 読者をやめる 読者になる 読者になる

Joy to the world

とある中小企業のしがない技術者でクリスチャンな人が書く日記。実はメビウス症候群当事者だったり、統合失調症のパートナーがいたりする。

IEEE 754について

IEEE 754とは何か

端的に言うと、コンピュータ内で浮動小数点を扱う際の、一つの規格である。

IEEE 754の仕様

ここでは、単精度浮動小数点 (32bit) を考える。

IEEE 754の構造は、以下の通り。

f:id:kamotti92:20160521195822p:plain

ごらんの通り、先頭に符号ビットがあり、その後に指数部、最後に仮数部がある。
それぞれの意味は、以下の通り。

符号ビット

0が+, 1が-である。

指数部

浮動小数点の指数を格納する部分。IEEE 754では、バイアスとして127を足した場合の表現にしている。

仮数

指数を考慮しない場合での、実際の値が格納されている。

正直、仕様を明確に説明するのは難しい。

実際に変換してみる

つべこべ言わずに、とりあえず変換してみる。

例 10.5をIEEE 754形式に変換する

符号ビット

符号は+なので、符号ビットは0

2進数に変換

まずは、与えられた数字を2進数に変換する。整数部は10なので

10/2=5・・・0
5/2=2・・・1
2/2=1・・・0

つまり、{(1010)_2}となる。

次に、小数点以下は
0.5*2=1.0

従って、{(10.5)_10}{(1010.1)_2}となる。

正規化する

IEEE 754では、必ず1.xxxというように、整数部が1となるように正規化する必要がある。従って、先ほど変換した二進数は

{(1.0101)_2 \times 2^{3}}となる。ただし、実際に仮数部に格納する値は、小数点以下(1は暗黙の了解)のため

{(0101)_2}となる。

これらの結果から

  • 符号ビット:0
  • 指数部;3+127={(130)_10)}={10000010)_2}(127はバイアス)*1
  • 仮数部:01010000000000000000000(23bitまで0で埋める)

従って、10.5は
{(01000001001010000000000000000000)_2}

感想

情報工学の初歩のはずだが、意外と「分かったようで分かってない」事が多かった。
あと、学生時代よりだいぶ計算能力が落ちてる。疲れた。

今後も、適当に技術について書いていきたい。

*1:ちなみに、指数部がマイナスの場合は2の補数で表す)