C나 C++에서 수식을 연산하다 잘못된 메모리를 읽거나, 저장된 파일을 읽어들이거나
0으로 나누거나 등등의 이유로 실수값에 -1.#INF0 과 같은 값이 지정된 것을 본적이
있을것이다. 혹은 -1.#IND0 과 같은 것도 있다.

.#IND Not a Number <= 숫자가 아닌값(실수체계에서 나올 수 없는 값과 같은 경우)
.#INF Infinite Number <= 0으로 나누는 등으로 인하여 무한히 큰값

숫자가 아닌값을 검출할 때는 CRT의 _isnan()
무한대의 숫자를 검출할 때는 CRT의 _finite()
주어진 숫자가 의심스러울 때 혹은 상태를 검출할 때는 _fpclass()
모두 float.h 에 선언되어 있습니다.

제목에서 처럼 0으로 나누어졌을 때는 숫자가 무한히 커져 .#INF00 의 무한값을 나타내고
다른 예로 double a = sqrt(-1) (데브피아 Neo.L 님께서 제시해주신 예시) 과 같은 경우는
실수체계에서 표현할 수 없는 숫자라는 의미로 .#IND00 과 같이 표기됩니다.

이 부분은  IEEE754,854 문서에 표기된 표준 표기에 의한것 (데브피아 stiletto 님께서 표기해줌)
으로 모두 정상적인 표기 방법입니다.

다행한것이 설계를 그렇게 한것인지, 저런 값이 나온다고 하여 연산하다가 죽는 경우는 없다는
점이다. 단, 필요한 요소에서 꼭 확인하여 엉뚱한 결과로 인한 피해를 줄이자.

사용자 삽입 이미지

















잘 모르는 내용을 올리다가 망신살도 좀 뻗치고.. 아무튼 이런 기회에 새로운걸 공부해 보네요.

+ Recent posts