らんだむな記憶

blogというものを体験してみようか!的なー

F2DOT14フォーマット

とは何のことかと...

Decimal Value Hex Value Integer Fraction
1.999939 0x7fff 1 16383/16384
1.75 0x7000 1 12288/16384
0.000061 0x0001 0 1/16384
0.0 0x0000 0 0/16384
-0.000061 0xffff -1 16383/16384
-2.0 0x8000 -2

0/16384

ということらしいが。

"consists of a signed, 2's complement integer and an unsigned fraction. To compute the actual value, take the integer and add the fraction." だと。

上位2bitと下位14bitを分けて考えたら良いようだ。

上位2bitが符号あり整数(2の補数)で、00(2)=0(10), 01(2)=1(10), 10(2)=-2(10), 11(2)=-1(10)と対応づいているようだ。

16進で0x7fffのF2DOT14値は上位2bitが01(2)なので、整数部は1。下位14bitは0x3fffで16383となる。下位14bitが全部1なので、限りなく1に近い小数を表現している的な感じか。

これに対して、この下位14bitを分子とする形で、分母を固定値16384(=0b11111111111111 + 1)とするような分数を考えると、16383/16384=0.999938964...であると。

2つの情報をガッチャンコして、1.999938964...が表現されていると。

固定小数点と併せてggると、中国っぽいpdfの中で「2.14 型有符号定点小数」という用語として登場するようだ。どっちにせよ分かりにくい。

0xffffのF2DOT14値は整数部が-1で小数部が0.999938964...であるので、和をとると-0.000061035...となるがなんだか絶望的な気持ちになるorz