我正在使用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)。
我該如何解決這個問題?有一些功能可以避免這個簡單的問題嗎? 對不起,但我是初學者:教我!
這種錯誤預計與浮動。比較浮點數時應該使用公差。 [每個程序員應該知道的浮點算術](http://floating-point-gui.de/) – japreiss
另外,你應該看看[這裏很好的問題](http:// stackoverflow的.com /問題/ 17333 /最有效的單向換浮子和 - 雙比較?LQ = 1)。 – Dexter