固定小数点演算とビットシフトをチェックするために、次のテストコードを作成しました。
void main(){
float x = 2;
float y = 3;
float z = 1;
unsigned int * px = (unsigned int *) (& x);
unsigned int * py = (unsigned int *) (& y);
unsigned int * pz = (unsigned int *) (& z);
*px <<= 1;
*py <<= 1;
*pz <<= 1;
*pz =*px + *py;
*px >>= 1;
*py >>= 1;
*pz >>= 1;
printf("%f %f %f\n",x,y,z);
}
結果は2.0000003.0000000.000000です。
最後の数字が0なのはなぜですか?5.000000が表示されることを期待していました。ある種の固定小数点演算を使用して、画像処理アプリケーションでの浮動小数点数の使用をバイパスしたいと考えています。浮動小数点配列を整数に変換するための最良/最も簡単/最も効率的な方法はどれですか?上記の「コンパイラをだます」は強力な回避策ですか?助言がありますか?