만능문답


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


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


문제의 소스코드:


#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 194320
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 174519
» [해결]C 언어 질문! double에서 floor() [13] 왕초보 11.15 863
5610 이상한 +_+ 휴무 계산법에 대해 질문드립니다. 노동법에 접촉되는건 아닌지.. [3] 청부업자 11.10 869
5609 한국에서 미국으로 책 구매 대행서비스 [3] elpidos 11.10 820
5608 나이들어도 피아노 배울 수 있나요 [7] matsal 11.06 1226
5607 요즘 공대생의 종강은 보통 언제인가요? [3] 영준 11.05 680
5606 납땜인두기 와 온도조절기 [7] 블랙 11.02 1814
5605 똥의 여행? [5] 느릅나무 10.22 933
5604 tv hdmi고장 [6] 상호아빠 10.20 1955
5603 히터가 고장났습니다. [7] 상호아빠 10.14 1106
5602 공인중개사 시험장에 계산기 가져가도 되나요? [1] 느릅나무 10.12 2536
5601 서멀 구리스 교체해도 발열이 심한데... [13] 엘레벨 10.12 929
5600 전자제품 고장 [3] 상호아빠 10.07 819
5599 피부과 - 혹? [5] file 느릅나무 10.06 1119
5598 사진 인쇄랑 엘범 만드는 업체 추천 부탁 드립니다. [2] 윤발이 10.06 632
5597 아두이노 릴레이를 통한 솔레노이드 밸브 제어 [5] file googrrr 09.28 2200
5596 추석연휴에 베를린을 갑니다.. 혹 추천해주실 맛있거나 이색적인 식당이 있을까요? 다카오카 09.25 672
5595 안드로이드폰 라인인 녹음케이블제작 [13] 그린 09.22 2754
5594 자동차보험 어떻게 가입하시나요? [9] 타바스코 09.21 728
5593 아이패드(ipad)의 아이클라우드(icloud) 로그인 문제 [4] chickay 09.08 1026
5592 오래된 노트북 SSD 교체 효과 있을까요 [8] SON 09.05 2220

오늘:
1,935
어제:
2,273
전체:
13,406,388