2014-03-24 2 views
0

두 개의 double과 a와 b가 C++에서 동일해야하지만 어떤 이유로 든 그런 식으로 취급되지 않습니다. 다음 코드 :C++에서 두 개의 double을 비교하여 올바른 결과를 얻지 못함

cout << a << "==" << b << ": " << (a == b) << endl; 

0.5 == 0.5: 0 

이 false로 해결 왜 어떤 아이디어를 출력한다? 소수를 비교할 때

+2

이'cout과 <<을 << 시도 사용할 수 있습니다 도망. – dasblinkenlight

+1

진지하게 말하면, 이것은 수천 번이 아니라면 문자 그대로 수백 개로 언급되었습니다. 페이스의 변화를 위해서 : http://www.parashift.com/c++-faq/floating-point-arith.html – PaulMcKenzie

+1

아, 그게 틀림 없어. "0.5 - 0.5 = 2.22045e - 016" – user3358762

답변

2

이 기능을 사용하는 것이 도움이 될 수있는 오류를 방지하려면 :

.001this 질문에서 잡고 같은 EPSILON가 소수에 의해 표현 될 수

bool AreSame(double a, double b) 
{ 
    return fabs(a - b) < EPSILON; 
} 

.

편집 : -;`하고 무엇을 참조 << B << "="<< (AB) << endl의 ""<limits>를 포함하여 하나 std::numeric_limits<double>::epsilon()

+1

절대적으로 괜찮지 만 상대적 비교는 너무 빠릅니다. 예 :'abs (a-b) <= (atol + rtol * abs (b))' – Kiwi

+1

@Kiwi이 질문에 대한 해결책은 ** 많이 ** 있습니다. 네가 옳아. 나는 이해하기 쉬운 것처럼 보인 것을 골랐다. –

관련 문제