printf를 MSDN에서 찾아보면
If the argument corresponding to a floating-point specifier is infinite, indefinite, or NaN, printf gives the following output.
위의 내용을 해석하면...
( 만약 플로팅지정자로 일치하는 아규먼트가 무한대, 정의되지 않는 숫자(orNaN), 일경우
printf 는 다음 출력구문을 보여준다 )
ms 페이지에서 보면 해당 타입의 std::numeric_limits<T>::has_infinity
의 has_infinity 가 true 일 경우 이러한 무한대 값을 표시해준다라고 나와 있다
출처 : 지식인
Value | Output |
---|---|
+ infinity | 1.#INFrandom-digits |
– infinity | –1.#INFrandom-digits |
Indefinite (same as quiet NaN) | digit.#INDrandom-digits |
NAN | digit.#NANrandom-digits |
이렇게 되어 있네요
실수를 프린트에서 찍을때
+무한은 1.#INF
-무한은 -1.#INF
정의되어 있지않은 숫자는 #IND
NAN(Not a Number)는 #NAN이라고 표시된답니다.
무한(Infinity)은 말 그대로 컴퓨터의 double로 표시할 수 있는 범위를 넘어간 큰수흘 의미 합니다.
미정의 숫자(Indefinite)는 루트(-1)처럼 정의할 수 없는 숫자를 의미합니다.
이런 에러가 발생했는 지를 찾기 위해서는 float.h에 있는 _isnan이나 _finite 함수를 이용할 수 있습니다. 다음 예를 참고하십시요
#include < float.h>
#include < math.h>
#include < stdio.h>
void testnumber(double val)
{
if(_isnan(val))
{
printf("%e은 숫자가 아닙니다.\n",val);
}else if(!_finite(val))
{
printf("%e은 유한 범위의 숫자가 아닙니다.\n",val);
}
else
printf("%e은 정상적인 숫자입니다.\n",val);
}
void main()
{
double val=1;
// indefinite
testnumber(sqrt(-1));
// infinity
for(int i=0;i<10;i++)
{
val=val*1000000000000000000000000000000000.0;
testnumber(val);
}
}
'프로그래밍(Programming) > c++, 11, 14 , 17, 20' 카테고리의 다른 글
입,출력 스트림 - IO stream (0) | 2012.11.01 |
---|---|
strcmp.c (0) | 2012.11.01 |
대입연산자 오버로딩은 클래스 멤버로만 정의 가능하고 전역으로는 할 수 없다 (0) | 2012.11.01 |
멤버변수 구현파일에서 초기화 (0) | 2012.11.01 |
MSC_VER, Visual C++ 의 컴파일러 버전 (0) | 2012.11.01 |