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
[22784] Re:재미있는 현상이네요 아시는분?
불사새 [phenix96] 1060 읽음    2002-11-22 12:45
전에도 어떤님께서 한번 올리셨던것과 비슷하네요...

미스테리라기 보다는 당연한 현상입니다...

2진수로 수를 표현하다보니 10진수에서의 표현과는 많이 다르지요.

10진수를 2진수로 표현시 정수부분은 별 탈없이(?)표현됩니다.

다만 소숫점이하가 문제지요..

예를 들어 우리는 1.5(10진수)라고 하는 표현이...2진수로 표현하게 되면 1.1(2진수)입니다.

2진수에서 각 자릿수는 다음처럼 됩니다.

1 0 1 0 0 . 0 1 1 0 0 1.. (2진수)
16 8 4 2 1 .0.5 0.25 0.125 0.0625 0.3125 0.015625...    

16*1+4*1+0.25*1+0.125*1+0.015625*1.. = 20.39625.. (10진수)
이런식이겟지요 위는 2진수 아래는 10진수로..

그렇다면 20.4의 표현은 2진수로 정확이 얼마...라고 떨어지지 못합니다.

이미 10진수는 2진수로 변환되어 저장된 이상 2진수로서 소숫점은 깨집니다.

즉 20.4는 20.39625..하고 한참을 나아가는데 보통 자릿수 표현제한이 있으니깐 어느정도에서

자릿수를 끊고 반올림을 하겟찌요..

즉 님께서 입력하신 20.4는 20.39625로 저장되고 당연히 그대로 출력하면 20.4로 출력되지만

10을 곱하면 203.9625로 되고 그걸 int로 캐스틍하니깐 소숫점은 날라가고 정수부분인 203만 남지요..



아담 님이 쓰신 글 :
:     int m_SetPower;
:     double i_power;
:
:     i_power = StrToFloat(SetAvgPower->Text);
:     m_SetPower = ( i_power*10.0);
:
:
:   이렇게 코딩했더니.
:   SetAvgPower->Text가 20.4 일때에
:   m_SetPower 가 203이 되네요?
:   20.5 는       205가 맞는데
:   20.3도        203 맞고
:   20.2는        201이 된다는 미스테리한현상이.....
:
:   (int) ( i_power*10.0);
:   로 형변환 해도 마찬가지네요?
:

+ -

관련 글 리스트
22782 재미있는 현상이네요 아시는분? 아담 834 2002/11/22
22784     Re:재미있는 현상이네요 아시는분? 불사새 1060 2002/11/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.