2014-03-31 70 views
1

我正在使用Eigen库,v.3.2.1。我正在计算一些飞机的一些法线。然后我想对它们进行标准化。我的问题是,对于一些法线,计算的标准不是精确到1.00000,即:Eigen :: vector :: normalize精度

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

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

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

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

我的问题是,当我比较normalA与normalD C++返回false,我的算法失败,即如果(normalA == normalD)。

我该如何解决这个问题?有一些功能可以避免这个简单的问题吗? 对不起,但我是初学者:教我!

+7

这种错误预计与浮动。比较浮点数时应该使用公差。 [每个程序员应该知道的浮点算术](http://floating-point-gui.de/) – japreiss

+1

另外,你应该看看[这里很好的问题](http:// stackoverflow的.com /问题/ 17333 /最有效的单向换浮子和 - 双比较?LQ = 1)。 – Dexter

回答