프로그래밍

Java 부동소수점 비교 하기

fraction number

저를 포함한 많은 초보 개발자들이 흔히 하는 실수가 부동소수점을 비교할 때 아래와 같이 if문을 사용해서 단순히 두 값을 비교한다는 것입니다.

public void compareDouble(double x, double y){
if(x == y){
  System.out.println("X and Y is same ");
}else{
  System.out.println("X and Y is not same");
}

위 코드의 경우, 사람이 판단하기에 같은 값이라고 생각 할 지라도 실제로 콘솔에는 “X and Y is not same”이라는 메시지를 접할 가능성이 높습니다. 컴퓨터는 태생적으로 정확하게 부동소수점을 표현하지 못하기 때문입니다. 이 때문에?JSF AV C++MISRA-C 같은 경우에는 부동소수점에 대한 직접적인 비교문이나 반복문 카운터로 사용하지 못하도록 하고 있습니다.

저는 다행히 유닛 테스트에서 문제가 발견되서 실제 모듈에서 문제가 발생하지는 않았습니다. 자바에서 두 부동소수점을 비교하려면 JAVA의 경우 compare() 함수를 사용해야 합니다.

if(Double.compare(x,y) == 0){
//Do something
}

 

Leave a Reply

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *