본문 바로가기
컴퓨터/C++_STL

isnan과 isinf

by adnoctum 2010. 12. 6.


   nan 이나 inf 는 floating point 연산을 할 때 잘못된 연산에 의해 발생하는 것으로, 0 으로 나누거나 숫자가 아닌 것으로 나누려 할 때 발생하는 에러이다. 그 이외에도 꽤 많다. exp 가 over-flow 가 발생하거나, log(0) 이거나, 여하튼 여러 원인에 의하여 제대로 계산할 수 없을 경우 반환되는 값이다. 메모리가 inf 인지 nan 인지는 표준으로 정해져 있다. nan 은Not a Number, inf는 쉽게 예측할 수 있듯이 infinity 에서 왔겠지.

   아놔, 연산하다 보면 아주 이놈의 inf 와 nan 때문에 열받을 때가 아주 한두번이 아니다. 에러 처리를 한다고 해도 요리조리 빠져 나가서 결국은 이놈의 nan 이나 inf 때문에 중간에 멈추거나 할 때가 있다. 따라서 이것을 미리 막아 줘야, 디버깅이 편해진다. 디버깅이 편해진다고 인생이 편해지겠냐만은 디버깅이 괴로우면 인생이 괴로워지는 이 불합리함 속에서, inf 나 nan 과 같은 에러는 isnormal 로 막을 수 있다. 만약 isnormal(숫자) 가 0 을 반환하면 nan 이나 inf 등의 잘못된 값이다.

isnorma(value) == 0 if value is abnormal number.

isnorma 은 isnan 이나 isinf 와 같은 macro 를 모두 확인하는 macro이고, 실제로는 fpclassify 함수를 내부에서 호출하게 되어 있다고 한다, man page에서. 여하튼, 어쨌든 function call 이니만큼 load 가 걸릴테니 데이터를 미리 isnormal 로 깨끗히 한 다음 힘든 일을 하는 것이 좋을 듯.



'컴퓨터 > C++_STL' 카테고리의 다른 글

파일 읽기 편하게 하기  (0) 2013.05.01
const pointer  (0) 2011.11.23
동적 라이브러리 만들고 사용하기  (5) 2010.05.25
Strict weak ordering  (4) 2010.05.11
에지(edge) 객체 구현해 보기  (0) 2010.05.08