我有一种情况,使用 Eigen3 库 norm() 没有提供正确的答案。norm() 应该只是向量的平方系数的平方根:
NORM= sqrt( v[1]*v[1] + v[2]*v[2] + .... + v[N]*v[N])
然而,以下函数以两种方式计算 norm():使用 Eigen3 的 norm() 方法和手动计算。结果略有不同:
void mytest()
{
double mvec[3];
mvec[0] = -3226.9276456286984;
mvec[1] = 6153.3425006471571;
mvec[2] = 2548.5894934614853;
Vector3d v;
v(0) = mvec[0];
v(1) = mvec[1];
v(2) = mvec[2];
double normEigen = v.norm();
double normByHand = sqrt( v(0)*v(0) + v(1)*v(1) + v(2)*v(2));
double mdiff = abs((normEigen - normByHand));
std::cout.precision(17);
std::cout << "normEigen= " << normEigen << std::endl;
std::cout << "normByHand= " << normByHand << std::endl;
std::cout << "mdiff= " << mdiff << std::endl;
}
这个函数的输出是:
normEigen= 7400.8103858007089
normByHand= 7400.8103858007107
mdiff= 1.8189894035e-12
从数字 15 开始,它们是不同的,为什么?四舍五入的数字在哪里?
在此先感谢 PedroC。