기본 콘텐츠로 건너뛰기

4월, 2013의 게시물 표시

소숫점 0.0 으로 나눈 결과 표시 방법

c, c++ format string "%f" 나 "%g" 사용중 결과가 아래와 같이 나오는 경우가 있다. 1.$ 1.#J 1.#IO 1.#INF00 헛~ 이건 뭐임? stackoverflow.com에 관련 내용이 있었음 http://stackoverflow.com/questions/840081/what-does-floating-point-error-1-j-mean 내용을 읽어본 즉 소숫점 0.0으로 나눈 경우와 관련이 있다고 하는 군요. (Devide by floating point zero) 결론적으로 포맷에 따라 다른 결과를 보여줄 뿐, 같은 내용이었습니다. 참고하세요. 아래는 MSVS 2010 Console Application 프로젝트에서 테스트한 결과 입니다. //------------------------------------------ double a = 0.0; printf("%.1f\n", 1.0 / a);  // +inf printf("%.1f\n", -1.0 / a); // -inf printf("%.1f\n", a / a);    //  NaN printf("------------------------------------------\n"); printf("%.2f\n", 1.0 / a);  // +inf printf("%.2f\n", -1.0 / a); // -inf printf("%.2f\n", a / a);    //  NaN printf("------------------------------------------\n"); printf("%.3f\n", 1.0 / a);  // +inf printf("%.3f\n", -1.0 / a); // -inf pr

C++ 디버깅용 매크로

C++ 디버깅시 함수 추적용 코드 #if defined(_DEBUG) static int s_nEnableTraceModule = 1; # define MODULE_TRACE \ if (s_nEnableTraceModule > 0) ATLTRACE(_T("%s(%d): %s[%d]\n"), __FILEW__, __LINE__, __FUNCTIONW__, ::GetTickCount()); class __auto_EnterTraceOff_LeaveTraceOn { public: __auto_EnterTraceOff_LeaveTraceOn() { s_nEnableTraceModule *= -1; } ~__auto_EnterTraceOff_LeaveTraceOn() { if(s_nEnableTraceModule != 0) s_nEnableTraceModule = 1; } }; # define MODULE_TRACE_OFF_AND_AUTOON \ __auto_EnterTraceOff_LeaveTraceOn__tmp; #else # define MODULE_TRACE # define MODULE_TRACE_OFF_AND_AUTOON #endif //MODULE_TRACE 함수 부분 시작하자 마자 'MODULE_TRACE' 를 한줄 삽입하면 됩니다.