|
답변 정말 감사드립니다.
_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));
: }
|