|
전 모든 C++ 컴파일러가 다 그럴거라 예상 했는데 아니었군요...
그런것이 아니었다면 이런문제는 정식으로 제안해서 고쳐야 할 버그가 아닐까요?
개발툴에 있어서 MS 보다 한수 위임을 자처하는 볼랜드에서 이것은 좀....
이 문제 땜에 고생 많이 했습니다. 당연히 문제가 없을 것이라는 생각으로 썼는데 이런 문제가
발생해서 대략 난감 했지요...
이것이 꼭 0.3 만의 문제는 아니고 몇가지 수에서 같은 증상이 나옵니다.
0.3 0.6 0.7 1.2 1.4 공통점이 뭔지 찾아 봤지만 찾지를 못하겠어요...
Lyn 님이 쓰신 글 :
: VC++ 2008 :
:
: int itemp, i2, i3 ;
: double dtemp = 0.3 ;
: itemp = (int) (dtemp * 1000.0) ;
: i2 = dtemp * 1000.0 ;
: dtemp *= 1000 ;
: i3 = dtemp ;
: printf("%d %d %d", itemp, i2, i3);
:
: 결과 : 300 300 300
:
: C++ BUilder 에서는 299, 299, 300
:
: 컴파일러 차이인듯 ㅡ.ㅡa
:
:
: 나그네 님이 쓰신 글 :
: : int itemp ;
: : double dtemp = 0.3 ;
: :
: : itemp = (int) (dtemp * 1000.0) ; // itemp == 299
: : ================================================
: : itemp = dtemp * 1000.0 ; // itemp == 299
: : ================================================
: : dtemp *= 1000 ;
: : itemp = dtemp ; // itemp == 300
: :
: : 이유가 뭘까요?
|