C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[69543] Re:Re: 음수가 나왔다는 것 자체가 오버플로어 때문이죠
김시환 [godson2] 2911 읽음    2013-05-28 07:52
오버플로의 개념에 혼동이 있으신것 같은데 오버플로는 한개의 변수가 자신이 표현할 수 있는 범위의 수가 넘어갔을 경우 사인비트가 바뀌면서 음수로 표현되는 경우이고 이번 경우는 정상적인 연산에의해 음수가 나온 경우입니다.

이번경우를 오버플로로 생각하고 해법을 찾으면 안됩니다.


99 님이 쓰신 글 :
: 1193 시간이 지난 이후 부터 m_dfDelayTime 값이 음수가 나온것 자체가 오버플로어 문제 입니다.
: 흐흠님, 지나가다님 답변이 맞아요. 간단한 문제 아닌가요.
:
: 이전 틱과 현재 틱을 비교할 때, 현재 틱값이 항상 이전 틱 값보다 크다는 조건이 만족된다면 상관 없겠지만
: 오버플로어로 인해서 그 반대가 되는 경우가 있다면, 그런 부분은 델타 값을 보정해서 처리해줘야 합니다.
:
:
:
:
:
:
:
: 김시환 님이 쓰신 글 :
: : 논리적인 오류는 맞습니다. 다만 Overflow 의 문제는 아닙니다.
: : 이경문님의 답변에서 힌트를 얻었습니다.
: :
: : GetTickCount 함수는 어차피 Overflow 가 되면 0으로 초기화 시키고, 아래 변수들 중에서 m_dfDelayTime 은 제가 일부러 double 로 선언했기 때문에 Overflow는 발생하지 않습니다.
: :
: : 문제는 1193시간이 지난후부터 m_dfDelayTime 값이 계속 음수가 나오기 때문에  if(m_dfDelayTime > 10) 문이 참이 될수 없다는 것이네요..  결국 m_dfDelayTime 이 음수가 되면 m_dfStartTime 변수를 다시 갱신해 주는 코드가 한줄 필요하네요...
: :
: : 답변해 주신분들 감사합니다. 이래서 토론이 좋은것인가 봅니다. 머리싸매고 토론하다 보면 좋은 결론이 나오네요..
: :
: :
: :
: :      while(!Terminated)
: :      {
: :          m_dfDelayTime = (GetTickCount() / 1000.0) - m_dfStartTime ;
: :
: :           if( m_dfDelayTime < 0) m_dfStartTime = GetTickCount() / 1000.0 ;      <-- 한줄추가..
: : 
: :          if(m_dfDelayTime > 10)      // 10초에 한번씩 시스템데이타를 읽어 온다.
: :          {
: :                Data_Read() ;
: :         
: :                m_dfStartTime = GetTickCount() / 1000.0 ;
: :          }
: : 
: :           if(user_stop == true) this->Terminate() ;
: : 
: :           if( g_dfTestTime <= 0) Sample_Test()
: :      }
: :
: :

+ -

관련 글 리스트
69522 GetTickCount() 함수에 대한 의문점... 김시환 2783 2013/05/27
69606     Re:GetTickCount() 함수에 대한 의문점... 김동원 2945 2013/06/07
69538     많은 토론끝에 문제점을 찾았습니다. 자답입니다. 김시환 3044 2013/05/27
69541         Re:많은 토론끝에 문제점을 찾았습니다. 자답입니다. 김태선 2819 2013/05/27
69540         Re: 음수가 나왔다는 것 자체가 오버플로어 때문이죠 99 2841 2013/05/27
69543             Re:Re: 음수가 나왔다는 것 자체가 오버플로어 때문이죠 김시환 2911 2013/05/28
69523     Re:GetTickCount() 함수에 대한 의문점... Lyn 3517 2013/05/27
69524         Re:Re:GetTickCount() 함수에 대한 의문점... 김시환 2736 2013/05/27
69525             Re:Re:Re:GetTickCount() 함수에 대한 의문점... 이경문 2601 2013/05/27
69527                 Re:Re:Re:Re: 논리적인 오류임 흐흠 2357 2013/05/27
69533                     Re:Re:Re:Re:Re: 논리적인 오류임 - GetTickCount64() 에 대해.. 장성호 4676 2013/05/27
69536                         Re:Re:Re:Re:Re:Re: 논리적인 오류임 - GetTickCount64() 에 대해.. 김시환 3180 2013/05/27
69534                         Re:Re:Re:Re:Re:Re: 논리적인 오류임 - GetTickCount64() 에 대해.. 지나다가 2750 2013/05/27
69528                     Re:Re:Re:Re:Re: 논리적인 오류임 김시환 2510 2013/05/27
69531                         Re:Re:Re:Re:Re:Re: 논리적인 오류가 맞습니다 지나다가 2736 2013/05/27
69535                             Re:Re:Re:Re:Re:Re:Re: 논리적인 오류가 맞습니다 김시환 2291 2013/05/27
69537                                 Re:Re:Re:Re:Re:Re:Re:Re: 논리적인 오류가 맞습니다 이경문 2596 2013/05/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.