C++ 特征::向量::规格化精度

C++ 特征::向量::规格化精度,c++,eigen,point-cloud-library,C++,Eigen,Point Cloud Library,我正在使用Eigen库,v.3.2.1。我在计算一些平面的法线。然后我想让它们正常化。我的问题是,对于某些法线,计算的范数并不精确为1.00000,即: normalA=(0.0000,0.000011165.0521)--->normalA.normalize()=(0.0000,0.0000,1.0000) normalB=(0.0000,0.000011165.0524)--->normalB.normalize()=(0.0000,0.0000,1.0000) normalC=(0.00

我正在使用Eigen库,v.3.2.1。我在计算一些平面的法线。然后我想让它们正常化。我的问题是,对于某些法线,计算的范数并不精确为1.00000,即:

normalA=(0.0000,0.000011165.0521)--->normalA.normalize()=(0.0000,0.0000,1.0000)

normalB=(0.0000,0.000011165.0524)--->normalB.normalize()=(0.0000,0.0000,1.0000)

normalC=(0.0000,0.0000312.17474)--->normalC.normalize()=(0.0000,0.0000,1.0000)

normalD=(0.0000,0.000012017.9299)--->normalD.normalize()=(0.0000,0.0000,0.99999994)

我的问题是,当我比较正常值与常态C++返回false时,我的算法失败了,即If(常微分方程=正规)。< /P> 我怎样才能解决这个问题?是否有一些功能可以避免这个简单的问题?
对不起,我是初学者:教我

如前所述,该错误是由浮点运算引起的。本帖

提供了一个很好的解决问题的方法


致以最诚挚的问候

这种错误是浮点数预期的。比较浮点数时应使用公差。此外,你还应该看一看。