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
[4810] Re:이런 일도 생기나여? 좀 황당...
조재영 [] 2964 읽음    2001-01-08 20:02
최우택 님이 쓰신 글 :
:
:  double형 변수를 int형 변수로 주는 과정에서 괴이한 현상이 보여서 질문드립니다.
:  2라는 값을 갖고있는 double변수를 int형 변수에게 넘기니까 1로 바뀌어 버리는군요.
:  다른 값.. 그러니까 1이나 8, 9등 2가 아닌 다른 값일때는 안그러는데, 2일때만 그렇고요,
:  항상 그런것이 아니라 프로그램에서 화일로딩/세이브 다이얼로그가 한번 떳다... 하면 그렇게
:  됩니다. 이러저러한 형태로도 고쳐봤지만 모두 결과가 같았고, 대표적으로 다음과 같은 2가지
:  형태에서도 모두 같은 결과가 나타납니다. 혹시나 해서 타입 캐스팅을 해줘도 같은 결과가
:  나오고, 전혀 다른 함수에서 일처리를 해줘도 같은 현상이 일어나는 군요.
:
:  나,인트 = 궁시렁 궁시렁 계산결과 더블형; // 나,인트에 1이 담겨버립니다.
:
:  나,더블형 = 궁시렁궁시렁 계산결과 더블형; // 여기까지는 제대로 계산결과 2가 나오고...
:  나,인트 = 나 더블형; // 더블형은 2를 제대로 갖고 있습니다.
:                        // 그러나 나,인트는 1을 받아버립니다.
:
:
:  아직까지 다른 부분에서의 버그는 찾지 못핶고요... 일단은 데이터 변수를 몽땅 double
:  형 변수로 고치는 무식한 방법을 써서 그런대로 현재 프로그램은 에러없이 돌아가고 있습니다.
:  4.0엔터프라이즈를 사용하고 있는데, 패치 프로그램들을 돌려줘도 역시 같은 문제가 발생하더
:  군요. 디버깅모드 에서 F8을 눌러가며 변수들을 살펴봐도 천연덕스럽게 데이터가 변질되어버리
:  는데 미치겠습니다. 무언가 잘못되었다는 생각은 들지만.. 혹시 이런문제에 대해 짐작가는 부분
:  이 있으신 분들의 조언 부탁드립니다.



PC에 있는 CPU의 플로팅계산 오차때문일 겁니다.
(이에 관해 자세한 내용은 C로 배우는 알고리즘'이나 기타책에서 참고하시길..
컴퓨터가 플로팅을 표현하는 방법을 아시면 됩니다.)

이렇게 해보십시요.
double을 int로 바꾸어줄때
double값이 0보다 크면 +0.5를 더해서(반올림) 캐스팅하시고
0보다 작으면 -0.4 를더해서(맞나.. --;;) 캐스팅해보세여.

double값은 눈에 2라고 보여도 2라고 믿어면 안됩니다.
2에 근사한값으로 생각해야하죠..

+ -

관련 글 리스트
4795 이런 일도 생기나여? 좀 황당... bluewing 3135 2001/01/07
4810     Re:이런 일도 생기나여? 좀 황당... 조재영 2964 2001/01/08
4812         감사합니다. bluewing 3329 2001/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.