static_cast<short>(sValue(10) * fVlaue(0.9f)) != static_cast<short>(10 * 0.9f) 인 이유를 알 수 있을까요?
글쓴이: ikpil / 작성시간: 목, 2012/05/03 - 10:55오전
제가 가지고 있는 문제를 조금 단순화 시켜 표현하면, 다음과 같습니다.
int main () { short sA = 10; float fB = 0.9f; float fValue = sA * fB; short Value1 = fValue; short Value2 = static_cast<short>(sA * fB); short Value3 = static_cast<short>(10 * 0.9f); }
환경은 다음과 같습니다.
윈도우7, 64bit, 비쥬얼 스튜디오 2010 Premium, 비쥬얼스튜디오는 기본 셋팅
각 Value1 ~ 3은 다음과 같습니다.
Value1 == 9
Value2 == 8
Value3 == 9
float 형이기 때문에, 오차가 발생한다는건 알고 있었는데 표현식을 달리하면,
표현식에 따라 오차가 발생하거나, 발생하지 않는다는건 지금에서야 알게 되었습니다.
질문
1. 어떻게 이렇게 되나요?
Forums:
요기서는 999 나오는데요.
http://ideone.com/
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
그렇네요. 혹시 몰라 g++, gcc 에서 컴파일
그렇네요.
혹시 몰라 g++, gcc 에서 컴파일 해보니까, 전부 9로 나오네요.
컴파일러마다 좀 다른듯 하네요.
http://www.ikpil.com
댓글 달기