コードに短いメソッドがあり、ベクトル(実際にはPCLポイント)を正規化して、精度の低い結果を生成します。コード:
void normalize(pcl::PointXYZ::PointXYZ * p){
float nf = 1/sqrt(p->x*p->x+p->y*p->y+p->z*p->z);
//nf is a normalization factor precalculated to eliminate two FP divisions.
p->x*=nf; p->y*=nf; p->z*=nf;
}
この関数には、座標を持つポイントが渡されます(-0.850650787, 1.37638187, -0.525731087)。デバッグはnf=0.587785244、2行目の評価後にそれを示しています。Mathematicaで同じ計算をすると、nf=0.617708029。これは5%以上のエラーです!pの座標が2より大きくなったり-2より小さくなったりすることはありません。この不正確さはこれらの操作に典型的なものですか、それとも何か問題がありますか?