浮動小数点数デコーダへの道
浮動小数点数の16進数表記を見てどれくらいの値かを知りたくなることがありますよね.
そのために知っておくと便利なことなどをまとめておこうかと思います.
浮動小数点数の基礎
学校で計算機関係の講義を取ったりIPAの試験を受けようとすると必ず出てくる話です.
小数は広く使われている計算機の中では浮動小数点数という形で扱われています.
浮動小数点数を構成する部分は3つあって,「符号部」「指数部」「仮数部」と日本語では呼ばれています.
例えばIEEE 754 binary64,いわゆる倍精度浮動小数点数では最上位ビットから1bit,11bit,52bitの計64bitとなっています.
これでどうやってある数Aを表すかというと,0以外であれば
となります.
符号は符号部が1なら負です.
biasがあることで絶対値が1未満の数も表せるようになっています.
biasは定数です.
仮数部はケチ表現ですね.
0以外の数の2進数の最上位ビットは必ず1になるため省略するやつです.
覚えておくといいこと
1
1は覚えておきましょう.
1を覚えておくと指数部のbiasが分かります.
16進数 | bias | |
---|---|---|
binary64 |
0x3ff0000000000000 | 0x3fff = 1023 |
binary32 | 0x3f800000 | 0x3f8 >> 3 = 0x7f = 127 |
binary16 | 0x3c00 |
0x3c >> 2 = 0xf = 15 |
biasを求めるには0でない部分を切り出して最下位ビットが1になるまでシフトすればいいです.
符号部
符号部に1が立つということは最上位4bitの最上位ビットに1が立つということです. 例えばFP64では が となります.常識的な最上位4bit
(少なくとも私の)常識の範囲内の数は絶対値がいたずらに大きかったり小さかったりしないため,binary64では0x3,0x4,0xb,0xcから始まる数の羅列を見たらいい感じの浮動小数点数列だーなんて思うわけです.扱っいる数の大体の範囲の端
扱っている数の絶対値が1/32 ~ 32 に多いのであれば,例えばbinary64では を覚えておくと読みたい数の大きさをやんわりと捉えられるかもしれないです.おわりに
現在目で16進数表記の浮動小数点数を読む修行中なのでこれくらいしかかけませんが,他に有用な情報があれば是非教えていただけたらと思います.
なんか,逆に16進表記もできるようになってきた気がします... .