다음은 허용 오차 내에서 2 개의 double 값의 동등성을 결정하기위한 코드의 테스트 블록입니다.숫자 비교에 영향을 미치는 이중 입도 C++
double lhs_1 = 0.02;
double lhs_2 = 0.04;
double rhs = 0.03;
double tolerance = 0.01;
bool is_match_1 = (abs(lhs_1 - rhs) <= tolerance);
bool is_match_2 = (abs(lhs_2 - rhs) <= tolerance);
그러나 is_match_2는 false로 밝혀졌습니다. 나는 컴퓨터에 저장된 숫자가 신중한 값이며 연속적이지 않다는 것을 알고 있습니다. 누군가가 해결책을 공유 할 수 있습니까? 나는 이유 안에서 시험을 통과하는 측면에서 잘못하고 싶습니다. 현재 어떤 정밀도 (double의 비트 레이아웃에 익숙하지 않다)에 대해 double 값을 1 씩 증가시키는 방법이 있습니까? 왜냐하면이 세분성 문제를 허용하기 위해 허용치를 증가시킬 수 있기 때문입니다.
편집 :이 정말 입력 및 허용 오차를 정의하는 사용자를 구현, 그래서 난 그냥 그들에게 입력 어떤 값에 대한 예상 출력을 제공하기 위해 노력하고있어
.
단위 테스트 라이브러리는 누구입니까? http://stackoverflow.com/questions/17333/most-effective-way-for-float-and-double-comparison –
사용 하시겠습니까? googletest와 같은 대부분의 패키지에는 표준 EXPECT_EQ()에 대한 EXPECT_DOUBLE_EQ()가 있습니다.이 패키지는 사용자를 대신하여이 패키지를 처리합니다. – kfmfe04
http://stackoverflow.com/questions/1245870/next-higher-lower-ieee-double-precision-number 다음 가장 큰 배를 찾는 법을 설명합니다. 이것이 아마도 관용에 유용하지는 않을 것이다. 몇 가지 계산을 수행하면 오류가 이보다 커질 수 있습니다. – arx