티스토리 뷰

Java

java Double.NaN 값 비교 연산 삽질...

딤딤이 2012. 3. 23. 19:40

오늘 Java의 Double.NaN 값을 비교하는 로직 때문에 완전 삽질을 했다. (덕분에 기록적인 혈압상승??을 맛보았다. ㅠ.ㅠ)

NaN값을 갖을 수 있는 double 변수 value 에 대해 아래와 같은 비교 연산을 통해서 예외 처리를 하였다.
if (Double.NaN != value)  {
  . . .
}


하지만 위의 연산으로는 value 변수의 값이 NaN임에도 불구하고 if문을 타는 경우가 발생했다. 
간만에 엄청난 삽질을 한 결과 아래와 같이 처리해야 함을 알게 되었다. 
if (Double.isNaN(value))  {
   . . .
} 


참고로 Double.isNaN(value) 함수의 코드를 보니까 아래와 같이 되어 있었다. 
    return (value != value);

오늘은 정말 엄한 삽질로 인하여 심신이 지친 관계로 정확한 원인은 다음에 구글링 해야할 것 같다. 

추측하건데... 부동소수점 연산의 특성 때문이 아닐까 한다. ㅠ.ㅠ

댓글