만능문답


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


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


문제의 소스코드:


#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 192159
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 172266
5650 실수로 입력한 패스워드를 브라우저가 기억하고 자꾸 디스플레이해줍니다 [4] 건설노무자 03.01 2004
5649 Facebook.apk 바이러스인가요? [9] 가을 02.27 3413
5648 공기청정기 추천 좀 해주세요. [16] 해색주 02.26 2354
5647 최고의 일정관리+할일관리 프로그램은? [18] 엘레벨 02.23 2107
5646 2개의 컴퓨터에서 같은 문서를 실시간공유하고 고칠수있는방법 [2] 그린 02.19 2006
5645 전원이 들어 오지 않는 디카 [4] 상호아빠 02.16 2039
5644 여러분만의 행복의 비결을 알려주세요. [13] 쿠후^^ 02.10 2065
5643 Todo list 관리하는 모바일 앱 추천? [10] 엘레벨 02.08 2105
5642 대형가전제품 어떻게 구입하세요? [8] Pooh 02.01 2099
5641 노트북 추천 부탁 드립니다. [5] 해색주 01.31 2048
5640 라틴어 질문 영진 01.27 1962
5639 대변에 소변(오줌)이 조금 묻어 나온다는데 [2] 느릅나무 01.21 1458
5638 항공권 최저가 검색 방법 [3] 쿠후^^ 01.20 516
5637 외장 하드와 연결하여, 동영상 볼수 있는 휴대용 솔루션 [14] 쿠후^^ 01.18 590
5636 스크린 게임방 [7] 상호아빠 01.17 551
5635 18650 보호회로 내장되어 있나요? [4] file matsal 01.13 643
5634 혹시 crucial mx300 750gb 해외 구매를 하셨던 분 계신가요?; [6] Veekei 01.08 609
5633 SSD하드 해외 AS 문제 [8] Veekei 01.03 651
5632 윈도우OS 이미지복구후에 윈도우업데이트설치문제 [3] 블랙 12.22 705
5631 블루투스 이어셋 추천 요청드립니다. [9] 맑은하늘 12.20 766

오늘:
1,343
어제:
1,951
전체:
11,277,217