В моем коде есть короткий метод для нормализации вектора (фактически точки 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
после оценки второй строки. Когда я делаю те же вычисления в Mathematica, nf=0.617708029
. Это ошибка более 5%! Координаты p никогда не превышают 2 или меньше -2. Эта неточность типична для этих операций или что-то не так?