|
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그룹안에 있는것을
: 변경해보았지만
: 별 소용이 없더라구요
: 한수 지도 바랍니다. 꾸벅
|