만능문답


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


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


문제의 소스코드:


#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 209697
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 189849
5657 서울에서 외국인 취업 가능한 곳이 있을까요? [21] 뿌뿌아빠 06.23 521
5656 랜테스터기.. [7] TX 06.21 530
5655 전자계산기조직 응용기사 [13] 해색주 06.20 460
5654 시인 혹은 시집 추천 부탁드립니다. [9] 쿠후^^ 06.19 307
5653 노트북 hdd를 ssd로 바꾸기. [3] ds1dvm 06.15 552
5652 인터넷을 wifi로 연장하고 연장하여 끌어오기? [6] 도원 06.13 685
5651 서울 나라 데이트 코스 질문 드립니다. [15] 뿌뿌아빠 06.01 535
5650 FreeSync vs. G-Sync [4] 왕초보 05.30 540
5649 네*버 또는 *음 카페 권한 설정 문의 드립니다. [4] 인간 05.29 549
5648 이것이 뭘까요? [4] file 상호아빠 05.24 535
5647 고용량 스토리지 구축 (1,000TB 이상) [8] 우리 05.21 895
5646 IMAC에 리눅스 설치하기 [2] file 상호아빠 05.18 1349
5645 집을 매수자께서 전세를 끼고 구입하시고자 하는데요. [4] 청부업자 05.17 877
5644 태블릿 배터리 문제.ㅠㅠ [2] file Veekei 05.16 707
5643 시놀로지 NAS의 영상을 티비로 보려면 [5] 앙겔로스 05.08 2371
5642 디카용 메모리카드는 어느 것을 사용해야 합니까? [5] file 느릅나무 05.05 755
5641 Sony DSC-WX80 vs Nikon COOLPIX P300 [15] 느릅나무 05.02 665
5640 밥 로스의 Joy of Painting [9] file matsal 04.21 776
5639 막내동생 운전 연습용 차? [9] 앙겔로스 04.19 1253
5638 모터 구동 턴테이블을 만들려고 합니다. [23] file 노랑잠수함 04.13 1578

오늘:
829
어제:
796
전체:
15,193,847