2014-03-31 2 views
1

아이겐 라이브러리 v.3.2.1을 사용하고 있습니다. 나는 몇몇 비행기의 법선을 계산 중입니다. 그런 다음 정상화하고 싶습니다. 내 문제는 일부 법선에 대해 계산 된 표준이 정확하게 1.00000이 아니라는 것입니다.Eigen :: vector :: normalize 정밀도

normalA = (normal00.normalize) ----- 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/questions/17333/most-effective-way-for-float-and-double-comparison? lq = 1). – Dexter

답변