만능문답


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


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


문제의 소스코드:


#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 209793
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 189947
360 HDD 2 TB 하드를 PC 에 최대 많이 붙일 수 있는 방법이 뭐가 있을까요? [15] 김강욱 08.31 7070
359 영어 단어 사용 질문 (의외로 간단한...) [7] 뻐하하 04.18 7092
358 서울에서 스프링 제본 저렴한곳 아시나요? [6] 돌마루™ 03.19 7095
357 대용량 파일들 엑셀파일 오픈에 대해서 여쭈어봅니다. [8] 청부업자 07.22 7103
356 진상을 영어로 번역하면 뭘까요? [13] FFK953 05.02 7111
355 휴대폰 수리 부품 구입처 [14] 기둥 08.29 7111
354 정장에 신을 신발중에.. 발이 편한 신발이 있을 까요? [8] 주니 04.16 7124
353 알리익스프레스 분쟁하고 거래마감 궁금합니다 [7] 틱트 02.10 7144
352 무선랜에 수동 IP 할당... [13] 인포넷 11.12 7146
351 PSP가 전원이 들어오지않네요. [4] 시월사일 03.15 7150
350 영어 spirit, soul, mind의 뜻과 사용 [7] 기둥 02.10 7153
349 KT 요금제, 스마트 500이 무엇인가요 ? [6] 맑은하늘 03.15 7164
348 확장자가 pub 인 파일 열거나 편집할 수 있는 프로그램 뭐가 있나요? [4] 시카모어 03.05 7169
347 hdmi 출력 to dp 입력 이 가능한지요. [17] hakdh 07.15 7180
346 보험 고민 - 백군님~ [6] 토로록알밥 08.17 7191
345 캘린더와 일정의 차이점 - 아이팟 및 아웃룩 [3] 06.30 7195
344 마개조가 대체 뭐죠? [9] Mito 03.26 7199
343 엘빈 토플러의 이 말, 원전이 어딘지 알 수 있을까요? [5] 노랑잠수함 05.28 7201
342 집에서 담글 수 있는 간단한 술이 있을까요? [39] 낙랑이 10.16 7208
341 돈 안갚는 사람들의 심리가 궁금 [11] 스노우캣 07.05 7215

오늘:
621
어제:
961
전체:
15,232,033