만능문답


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


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


문제의 소스코드:


#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 209694
공지 [공지] 만능문답 게시판을 이용하는 분들을 위한 당부 말씀 [3] iris 2010.03.16 189847
5877 데스크톱 업그레이드 문의 드려 봅니다. [19] 해색주 11.14 401
5876 디지털 카메라 촬영방법을 잘 모르겠네요. [13] file 수퍼소닉 05.27 403
5875 크롬 사용시 계정에 따라 페이지가 다르게 뜹니다. [2] 스노우캣 01.21 403
5874 파이쏜 초보 질문입니다 [2] file 건설노무자 01.20 404
5873 캠핑은 아니고 오토 캠핑 비스므래 한걸 해볼려고 합니다 [6] 바보준용군 03.12 404
5872 미국에 있는 분과 통화 좋은 앱? [5] 도원 07.22 409
5871 노트8 새 기기 [3] 海印 04.25 409
5870 건강검진에 관해 궁금해서 여쭙니다 [6] KJKIM 02.29 411
5869 SJ 4000 악세서리 따로 구매가능한곳 있을까요? [2] 바보준용군 08.27 418
5868 라우터 문의 [9] 상호아빠 06.09 418
5867 자작 블투 헤드폰... 그런데 문제가...!! [2] 엘레벨 10.09 419
5866 노트북 추천 부탁 드립니다. [4] 해색주 09.12 419
5865 혼다 오디세이 2010 카본 필터 [5] 상호아빠 08.21 420
5864 DVD/Blu-Ray Ripper 중에 가장 나은 것은 어떤 것일지요? [5] 야호 11.03 420
5863 노트북 HDMI 관련 질문입니다. [3] 바이디 01.13 420
5862 이번에 박싱데이 때 뭘 지르실 겁니까? [3] 최강산왕 12.25 421
5861 잘 아시는 복지원 있으면 소개해주십시요 [2] 공간 03.02 421
5860 구글이 망한다면 [6] 영진 08.10 421
5859 일주일 정도 사용할 온라인 백업 스토리지가 있을까요? [5] 스노우캣 11.18 422
5858 CD를 전부 디지털화 할까 하는데...어떤 포맷이 좋을까요? [9] file 상호아빠 03.30 425

오늘:
719
어제:
768
전체:
15,191,989