固定小数点変換ルーチンを作成しようとしています。2 つの値といくつかのフラグを 8 バイトのパケットに収める必要があるため、値ごとに 3 バイトしかありません。
私のコードは次のようになります。
typedef struct
{
signed short m;
unsigned char f;
} Q16_8;
Q16_8 toQ(double d)
{
Q16_8 q;
q.m = (signed short)d;
q.f = (unsigned char)(d * 256.0);
return q;
}
double toDouble(const Q16_8 q)
{
return q.m + q.f / 256.0;
}
私のテストの結果は次のようになります。列 1 は浮動小数点、2 は固定小数点、3 は差です。
-2.000000 -2.000000 0.000000
-1.750000 -0.750000 -1.000000
-1.500000 -0.500000 -1.000000
-1.250000 -0.250000 -1.000000
-1.000000 -1.000000 0.000000
-0.750000 0.250000 -1.000000
-0.500000 0.500000 -1.000000
-0.250000 0.750000 -1.000000
0.000000 0.000000 0.000000
0.250000 0.250000 0.000000
0.500000 0.500000 0.000000
0.750000 0.750000 0.000000
1.000000 1.000000 0.000000
1.250000 1.250000 0.000000
1.500000 1.500000 0.000000
1.750000 1.750000 0.000000
私は何を間違っていますか?