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
[689] [정보] <빌더> 수학함수에러잡기->빌더의 버그?/프포
truth [ ] 5323 읽음    1998-10-24 19:54
아래 4273번에 질문한 문제에 대해 나름대로 알아 본것인데요

보통 수학함수의 에러는 _matherr 과 _matherrl 을 통해 처리되는데

이 함수를 사용자가 다시 정의해주면 에러가 발생하면 정의된 곳으로 가서

처리하게 되어 있습니다.

빌더 1.0 에서는 이것이 잘 작동하여 사용자가 제어할 수 있는데

빌더 3.0에서는 작동하는데 문제가 있는 것 같습니다.

1.0버전에서는 다음과 같이 하면

int _matherr (struct exception *e) {
if (e->type == OVERFLOW) return 1;
else return 0;
}

double tmp = sinh (100000.);

sinh 함수가 overflow 에러가 발생하면 위의 _matherr 함수가 호출되고

값 1이 리턴됩니다. _matherr 가 0 이 아닌 값을 리턴하면 프로그램은

더이상 에러를 다루지 않게 되고 따라서 에러 윈도우가 뜨지 않게 됩니다.

overflow 가 아닌 에러가 발생하면 0 이 리턴되므로 에러윈도우가 뜨게 됩니다.

빌더 3.0에서는 조금 문법이 바뀐 것 같은데 제가 찾아낸 바로는 다음과

같이 해야할것 같습니다.

int _matherr (sturct math_exception *e){
if (e-type == OVERFLOW) return 1;
else return 0;
}

exception  이 math_exception 으로 바뀔거에요 이것은 math.h 를 살펴보면

알 수 있습니다. 그러나 여기서 문제는 위의 함수가 작동하지 않는다는 것입니다.

수학함수의 에러가 나도 _matherr로 가지 않고 overflow 에러 윈도우가 떠버립니다.

아마 math.h 에 문제가 있는가 봅니다. 물론 console 프로그램에서도 같은

결과가 나타납니다.

여기까지가 제가 발견한 것이고 지식이 일천한 관계로 직접 math.h 를 보고

고치진 못하겠군요.

이거 못고치면 빌더 1.0 으로 프로그램해야할 형편입니다.

부디 실력있는 분의 수고로 문제가 해결되었으면 좋겠군요.


+ -

관련 글 리스트
686 [질문] <빌더> math error 잡기/프포 truth 5210 1998/10/22
690     [해결] <빌더> 수학함수에러잡기/프포 truth 5194 1998/10/24
689     [정보] <빌더> 수학함수에러잡기->빌더의 버그?/프포 truth 5323 1998/10/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.