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
[37558] Re:빌더 float error
김태선 [jsdkts] 767 읽음    2004-10-11 13:44
float는 정확한 숫자데이타를 저장하는데 한계가 있습니다.
그래서 0.001을 저장해도 내부적으로 그 뒤 밑으로 찌거기 같은 값이 더 달려 있는 경우가 있습니다.
이는 float의 숫자데이타 저장공간의 부족에서 일어나는 문제입니다.
4바이트로는 정밀도에 문제가 생길수 밖에 없습니다.

이러한 문제는 C++ 컴파일러에 공통적으로 일어나는 현상입니다.
테스트를 VC++로 해도 마찬가지 결과를 얻습니다.

이러한 문제 때문에 가급적 float 보다는 double 을 쓸 것을 권합니다.
어쩔수 없이 써야 한다면
다음과 같이 캐스팅 연산자를 꼭 써주어야 합니다.

if (fVal == (float)0.001)

이렇게 하면 동일한 값을 가지고 비교하게 되므로 true 의 결과를 얻을 수 있습니다.

그럼..


gon 님이 쓰신 글 :
: 예를 들어
: float fVal=0.001;
: if(fVal==0.001)
:     cout<<"true"<<endl;
: else
:     cout<<"false"<<endl;
:
: 이라는 코드를 했을경우에 결과를 보니
: false가 찍히더군요
: 값을 확인해보면
: fVal =0.001000000049 정확한건 아니지만 이런식으로
: 뒤에 값이 더 붙어버리는 바람에 false가 찍히는 것 같습니다.
: watch에서 확인해보면 fVal=0.001이라고 나오는데
: 왜 둘의 결과가 다른걸 까요?
: 위의 결과가 true로 나오게 할수 있는방법좀 알려주십시요..
: 제생각엔 옵션이 있을것 같은데
: 대강 프로젝트 옵션에 있는 컴파일 옵션중에 float그룹안에 있는것을
: 변경해보았지만
: 별 소용이 없더라구요
: 한수 지도 바랍니다. 꾸벅

+ -

관련 글 리스트
37550 빌더 float error gon 707 2004/10/10
37558     Re:빌더 float error 김태선 767 2004/10/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.