더북(TheBook)

3.1.4 부동소수점 수를 두 개 비교

컴퓨터는 모든 부동소수점 수를 표현할 수 없습니다.3 자바에서 부동소수점 타입(floatdouble)의 어떤 수들은 근사치로 구해야 합니다. 단위 테스트에서 시사점은 두 부동소수점 수를 비교해도 항상 우리가 원하는 대로 나오지 않을 수 있다는 것입니다.

iloveyouboss_13/test/scratch/AssertHamcrestTest.java

assertThat(2.32 * 3, equalTo(6.96));

 

테스트를 통과할 것 같지만 실패합니다.

java.lang.AssertionError:
Expected: <6.96>
  but: was <6.959999999999999>

두 개의 float 혹은 double 양을 비교할 때는 두 수가 벌어질 수 있는 공차 또는 허용 오차를 지정해야 합니다. assertTrue()를 사용하여 다음과 같이 직접 작성할 수 있습니다.

iloveyouboss_13/test/scratch/AssertHamcrestTest.java

assertTrue(Math.abs((2.32 * 3) - 6.96) < 0.0005);

 

헉, 저 단언은 잘 읽히지 않네요. 실패 메시지 또한 내용을 파악하기 어렵습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.