만능문답


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


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


문제의 소스코드:


#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 209700
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 189852
5777 대학내에서 토렌트를 차단했다는데, 사용할 방법이 있나요? [3] 海印 04.29 875
5776 스테레스 해소, 어떻게 하시나요 ? [14] 맑은하늘 04.28 527
5775 가정용 네트워크 질문. [9] TX 04.27 528
5774 건축 준공전 통신 점검 불합격. 반사손실. [7] TX 04.25 542
5773 노트8 새 기기 [3] 海印 04.25 409
5772 걷기 동호회 문의드립니다. [4] 맑은하늘 04.23 1526
5771 공유기 질문 [5] 상호아빠 04.22 381
5770 갱년기 ...증상 및 진단 문의드립니다 [8] 맑은하늘 04.22 502
5769 과거 1년 간의 주가 기록을 조회할 수 있는 무료 API 없나요? [3] 최강산왕 04.12 451
5768 그런데.. 올해 새 운영진은? [11] 별날다 04.11 360
5767 리눅스 쌩초보에게 권장할 만한 독학 도서 문의 드립니다. [2] 야다메 04.05 399
5766 라우터 인터넷 속도 제한 하기 [8] 상호아빠 04.04 497
5765 파워포인트 편집이 환장하게 느려요 [6] 윤성환 04.03 11161
5764 Windows 7 정품 저렴하게 구할 수 있는 방법 없을까요? [16] 수퍼소닉 04.02 1866
5763 무적칩 대신 사용할 방법? 海印 04.02 698
5762 블루투스 이어폰 한쪽이 안들려요. [1] 해색주 03.31 4630
5761 CD를 전부 디지털화 할까 하는데...어떤 포맷이 좋을까요? [9] file 상호아빠 03.30 425
5760 리눅스 무선 드라이버 [2] 상호아빠 03.17 556
5759 Windows 7 Enterprise with SP1 <<------- 서버 OS 인가요? [1] 海印 03.16 335
5758 워크스테이션중고 사는것은 어떻나요 [10] 그린 03.15 1170

오늘:
241
어제:
717
전체:
15,194,884