만능문답


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


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


문제의 소스코드:


#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 192516
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 172671
5633 SSD하드 해외 AS 문제 [8] Veekei 01.03 684
5632 윈도우OS 이미지복구후에 윈도우업데이트설치문제 [3] 블랙 12.22 716
5631 블루투스 이어셋 추천 요청드립니다. [9] 맑은하늘 12.20 801
5630 마사지 침대 [6] 상호아빠 12.20 955
5629 I.T 세상...급변하는 기술의 시대에.. 대학을 꼭 가야하나요 ? [26] 맑은하늘 12.15 962
5628 HDMI 케이블 사용법 문의 드립니다. [14] 해색주 12.08 1151
5627 자동차가 하나 생길듯 싶습니다. [17] 바보준용군 12.07 893
5626 윈도우10 파티션 인식 불가 [3] 상호아빠 11.30 1144
5625 로그인 유지가 안되고요 파일 첨부가 안됩니다 [2] SiegZion 11.29 688
5624 무선 헤드폰 [2] 상호아빠 11.28 793
5623 독일문학 번역 잘된 출판사/작가는? [1] 영진 11.24 686
5622 노트북 배터리를 유저가 DIY할수있나요.. [4] 블랙 11.21 810
5621 냉난방기 추천해주세요 [3] 영진 11.20 772
5620 노이즈 캔슬링 헤드폰.. [15] 왕초보 11.17 1344
» [해결]C 언어 질문! double에서 floor() [13] 왕초보 11.15 793
5618 이상한 +_+ 휴무 계산법에 대해 질문드립니다. 노동법에 접촉되는건 아닌지.. [3] 청부업자 11.10 753
5617 한국에서 미국으로 책 구매 대행서비스 [3] elpidos 11.10 706
5616 나이들어도 피아노 배울 수 있나요 [7] matsal 11.06 865
5615 요즘 공대생의 종강은 보통 언제인가요? [3] 영준 11.05 652
5614 납땜인두기 와 온도조절기 [7] 블랙 11.02 915

오늘:
500
어제:
2,921
전체:
11,652,516