만능문답


결론 -- 댓글에 많은 도움을 받았습니다. 감사합니다. 궁극적으로는 다른 언어로 옮겨가기로 결정했고, 이 문제는 일단 땜빵으로 돌아갔습니다.


컴퓨터가 이진법으로 계산을 하기때문에, 소수 계산을 할때 십진법으로는 도저히 이해가 안가는 엉뚱한 짓을 할 때가 있습니다. 지금 여쭙는 것이 그 중 하나인데, 원인은 알지만 해결책이 없나 해서 질문 올립니다.


문제의 소스코드:


#include<stdio.h>

#include<math.h>


void main()

{

        double a;

        a=1000.0*1.001;

        printf("%g %g\n",a,floor(a));

}


요걸 cc -lm 해서 컴파일 한 다음 수행하면..


1001 1001


하고 출력하길 기대하는데.. 1001 1000 하고 출력 합니다. -_-;; 그래서.. 이 floor 에 문제가 있군 하고는..


#include<stdio.h>


void main()

{

        double a;

        a=1000.0*1.001;

        printf("%g %d\n",a,(int)a));

}


해도 결과는 똑같습니다. -_-;; 추측하는 것은 저 0.001 이 이진수로 변환될때 무한 소수로 변환되어서.. 결과가 1001에 아주 쪼끔 모자라는 상황인 듯 한데요. 해결 방법이 없을까요. 웃기는건 float로 낮추면 문제없이 동작합니다. 그렇지만 제가 하는 일이 double precision이 필요한 일이라 답이 안되는듯 합니다. 뭔가 말도 안되는 실수를 했다기엔 너무 간단한 소스코드라.

번호 제목 작성자 작성일 조회
공지 게시판 성격에 맞지 않는 글은 예고없이 삭제합니다. [6] 星夜舞人 2011.10.10 209699
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 189851
5797 카세트 테입 플레이어 [4] 상호아빠 08.09 850
5796 오래된 네비게이션 어디에 사용하나요? [9] 상호아빠 08.03 3695
5795 일본어 잘 아시는분~ [3] 영진 08.01 580
5794 노트북 선택 고민입니다. LG그램 vs. 삼성올웨이스9 [3] 바이디 07.30 644
5793 ATARI 2600 jr 을 아시나요? [15] file 상호아빠 07.28 541
5792 HDMI splitter [7] file 건설노무자 07.22 576
5791 브이로그를 찍을 카메라 [4] 우야씨 07.12 601
5790 싸구려 게이밍 노트북을 찾습니다. [9] 쿠후^^ 07.06 876
5789 유니클로를 대체할 만한 브랜드 있을까요? [13] Pooh 07.04 1671
5788 안녕하세요? 시리얼 넘버 관련하여 궁금한것이 있습니다 [3] 봉팔이입니다 07.03 1142
5787 구글 크롬에서의 입력 오류 문제 (재설치 후에도 다시 생기는 문제) [3] 야호 07.02 452
5786 병렬컴퓨터 [4] 상호아빠 06.21 877
5785 믿을 만한 CCTV와 무선 경보 시스템 같은거 추천 부탁드립니다 [5] 최강산왕 06.18 474
5784 당사 상품 무단 유통에 대해 공문 작성 중인데요. 조언 부탁드립니다 .ㅜㅜ [3] 청부업자 06.14 500
5783 vga to mini dp젠더가 필요 합니다 [4] 바보준용군 06.08 459
5782 랜섬웨이 걸렸습니다. [8] 상호아빠 05.25 635
5781 싱가폴이 더 덥나요 타이완이 더 덥나요? [7] 영진 05.24 512
5780 ^^안녕하세요 C505에 성경파일을 설치해서 Palm Bible+을 활용하려고 하는데.. [6] 고디탕 05.20 518
5779 3D 프린터 입문 궁금합니다. [9] matsal 05.17 931
5778 농막 허가에 관해 궁금 합니다 [17] 바보준용군 05.12 4895

오늘:
548
어제:
908
전체:
15,194,474