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
[17046] Re: 정말 감사드리구요, 한가지만 더...
계동원 [keidw] 895 읽음    2002-03-30 00:43

답변 정말 감사드립니다.


_fpreset();

를 해주니까 정말 아무런 문제 없이 잘 되는군요.

근데 정말 궁금한 것은..

Visual C++ 등에서는 이런 선언 없이도 Exception 이 발생이 되는데,
왜 Builder 에서는 차이를 보이는 걸까요?  (같은 CPU 인데...)

그리고,

ShowMessage(IntToStr(a/b));

대신에 c = a/b;  라는 문장을 넣었을 경우...

풀디버그로 컴파일 했을 때에는 위의 문장에서도 Exception 처리가 됩니다만,

_fpreset(); 을 이용하면,  c = a/b; 에서는 예외 처리가 안되는군요.

게다가...

예외 처리를 해줬는데 초기화까지 매번 해줘야 하다니, 뭔가가 좀 이상하네요.

추가 조언 좀 부탁드립니다. ^^



개박살.U&I 님이 쓰신 글 :
:
: 안녕하세요? 개박살입니다.
:
: 저랑 같은 고민을 하셨군요 ^^; 저도 알아낸것이지만요
:
: 결론은, x86 CPU의 부동소수점 유닛은 x87특성상 Float연산의 상태를 공유하기 때문에
:
: 그것을 Clear해주어야만 한다.. 라고 알고 있습니다. (정확한건 묻지마셈 ^^)
:
: 방법은,
:
: #include <float.h> // 먼저 걸고요
: _fpreset();        // 요놈을 써서 클리어해주면 됩답니다.
:
:     try {
:         _fpreset();
:         ShowMessage(IntToStr(a/b));
:     }


+ -

관련 글 리스트
17031 [질문] 예외 처리 문제 계동원 942 2002/03/29
17037     Re:[질문] 예외 처리 문제 개박살.U&I 1048 2002/03/29
17046         Re: 정말 감사드리구요, 한가지만 더... 계동원 895 2002/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.