창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by 지상현2013-01-05 16:54:05, Hit : 5016
창조에서 반올림하기
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=open_lec&no=199
오랜만입니다.
바람 님의 댓글을 보고 생각나서 적어봅니다.


다들 반올림이 무엇인지 알고 계시겠지만, 컴퓨터, 특히 창조에서 반올림이 어떻게 이루어지는지 정확하게 짚은 자료가 없더군요.
우선 창조에서 지원하는 반올림 관련 함수는 무엇이 있는지 보겠습니다.

실수함수: 반올림(실수: 수)
실수함수: 대반올림(실수: 수)
실수함수: 소반올림(실수: 수)

각 함수는 무슨 일을 할까요?
반올림 함수는 한 마디로 사사오입. (이 아니라는 것을 아래에서 밝힙니다)
대반올림 함수는 '올림'입니다. 다른 언어에서는 ceil 이라고 부를 것 같네요.
소반올림 함수는 '버림'입니다. 지금보니 이름을 조금 이상하게 지은게 아닌가 싶네요 ^^; 다른 언어에서는 floor에 해당합니다.


그런데, 사실 반올림이라는게 그리 만만한 주제가 아니더군요.
우선 음수일 때 어떻게 될까요? 답을 먼저 볼까요.

반올림(-1.2) = -1
대반올림(-1.2) = -1
소반올림(-1.2) = -2

반올림(-3.7) = -4
대반올림(-3.7) = -3
소반올림(-3.7) = -4

대반올림과 소반올림 결과에 주의하세요.
음수가 아니면 다음과 같이 나옵니다.

반올림(1.2) = 1
대반올림(1.2) = 2
소반올림(1.2) = 1

반올림(3.7) = 4
대반올림(3.7) = 4
소반올림(3.7) = 3

언뜻 반대로 나오는 것 같지만, 음수 부호가 붙어 있을 때는 숫자가 클수록 '작은 수'기 때문에 그렇습니다.
수직선으로 보면 쉽게 알 수 있습니다.

       -4      -3     -2       -1      0        1       2        3        4
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
           ^ -3.7             ^-1.2                ^ 1.2               ^ 3.7

대반올림은 무한대 방향, 즉 오른쪽에 있는 가장 가까운 정수를 골라줍니다.
따라서 1.2 -> 2, 3.7 -> 4 가 되며, 마찬가지로 -1.2 -> -1, -3.7 -> -3 이 됩니다.

소반올림은 대반올림과 반대로 음의 무한대 방향, 즉 왼쪽에 있는 가장 가까운 정수를 골라줍니다.
따라서 1.2 -> 1, 3.7 -> 3 이 되고, -1.2 -> -2, -3.7 -> 4 가 됩니다.

참고로, 두 함수 모두 넣어준 값이 그냥 정수면 그 값을 그대로 돌려줍니다.
자기가 수직선 위에 서있는 자리도 고려해서 값을 결정한다는 뜻이지요.


반올림은 어떨까요?
수직선 위에서 왼쪽이든 오른쪽이든 가까운 정수값을 고른다고 보시면 됩니다.

그런데, 0.5 값은 어떻게 될까요?
0.5는 0과 1 사이의 정확히 가운데 있는 숫자입니다.
0.5를 반올림하면 무슨 숫자가 나올까요? 사사오입으로 배우신 많은 분들이 1이라고 생각하시지만, 실제로 창조에서 해보면 조금 의외의 결과가 나옵니다.

반올림(0.5) = 0
반올림(1.5) = 2

왜 이렇게 나올까요?
1.5가 2가 되는건 맞는 것 같은데, 0.5가 0이 되는 것에 의아하신 분들이 계실 겁니다.

그것은, 창조에서 사용하는 반올림은 Round half to even (Banker's rounding) 이라는 방법을 사용하기 때문입니다.
가장 가까운 정수를 고르는 것이 아니라, 가장 가까운 짝수를 고르는 것입니다.
숫자 몇 개를 더 해보겠습니다.

반올림(2.5) = 2
반올림(3.5) = 4
반올림(4.5) = 4
반올림(5.5) = 6
반올림(6.5) = 6

가장 가까운 짝수를 고르는 것을 알 수 있습니다.
그렇다면 왜 중간값(0.5)을 이렇게 반올림 하는 걸까요?
통계적으로, 이렇게 하면 평균 등을 구할 때 반올림 하고 구한 값과 원래 값으로 구한 값이 비슷해지기 때문이라고 하네요.

다른 언어에서도 반올림은 대부분 이런 방법으로 제공합니다.
보통 반올림을 쓰는 용도를 생각해보면 그냥 써도 사실 별 문제 없지만, 이런 세부사항을 모르고 있다가 황당한 일을 당하는 경우가 생길 수 있으므로, 역시 알아두는게 좋습니다.


참고로, 사사오입은 다음과 같이 구현하시면 됩니다.
소반올림(값 + 0.5)

바람   2013-01-08 AM 3:50:51  
헐.. 반올림이 가까운 짝수를 출력해준다는 것을 처음 알았습니다.
마지막의 '소반올림(값 + 0.5)'를 이용해야겠군요.

안그래도 수식계산 기능 추가된 csv읽고쓰기에 결과값이 소수점일때 사용자가 지정한 자리수만큼 반올림,소반올림,대반올림 할 수있는 기능을 넣을까... 하고있었는데.. 올려주신 글이 많은 도움이 될듯합니다.^^

좋은 강좌 항상 감사합니다.
좀 늦었지만, 올해 하는일 모두 성취되길 기원합니다.^^
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
119
       [끼적강좌7] 달력 구현강좌 [3강][응용]
권선중 2005/07/16  4645
118
     [re] 배열강좌 추가..
변혁수 2005/01/20  4729
117
     [끼적강좌 2] 개성있는 메뉴 만들기 [초급보충+중급]
권선중 2004/02/28  4754
116
   [강좌#6] 연산자
ps.구루 2004/05/05  4848
115
     [끼적강좌7] 달력 구현강좌 [2강][고급]
권선중 2005/07/15  4865
114
   [끼적강좌 6] 선중이 계발한 암호화구현 [7]
권선중 2005/06/29  4887
113
   [강좌#5] 창조 컴포넌트 [6]
ps.구루 2004/04/24  4891
112
   [끼적 강좌] 기본문법을 알아야 한다...! [10]
권선중 2005/06/27  4930
111
   [삐까뻔쩍강좌] 오랜만에 글쓰네.. [10]
박재성[날개달기] 2004/09/07  4998

   창조에서 반올림하기 [1]
지상현 2013/01/05  5016
109
         [re] [끼적강좌 5] 로그인 구현강좌 [4강][다계정 구현] [5]
권선중 2005/06/27  5017
108
       환경문 강좌..^^; [진리형 자료] [1]
qkrwhdgns 2006/01/11  5021
107
   [끼적강좌 2] 개성있는 메뉴 만들기 [초급] [1]
권선중 2004/02/09  5055
106
     [re] [강좌#8] 간략히 설명을하자면... [1]
권선중 2004/06/27  5067
105
   [중급 강좌] 객체의 동적 생성 - 1 [6]
웃음맨 2002/12/25  5090
104
   마우스 오른쪽 눌렀을때의 메뉴 뜨게하기(초보용)
이시영 2005/02/02  5154
103
   [끼적강좌7] 달력 구현강좌 [1강][초급]
권선중 2005/07/11  5160
102
     [끼적강좌 1] 버튼만들기 [밑판편]
권선중 2004/02/09  5188
101
   [강좌] 파일관리창 이용방법
위자드 2002/11/30  5236
100
   [끼적강좌 1] 버튼만들기 [동화편] [3]
권선중 2004/02/09  5255
99
     환경문 강좌..^^; [실수형 자료] [1]
qkrwhdgns 2006/01/11  5258
98
         환경문 강좌..^^; [예제 소스]
qkrwhdgns 2006/01/11  5287
97
   스크린세이버에대한 분석 [5]
박재성[날개달기] 2006/03/08  5290
96
   '변수'와의 인터뷰 -_-; [5]
박종훈 2006/12/24  5368
95
       [끼적강좌 5] 로그인 구현강좌 [3강][고급] [3]
권선중 2005/06/26  5369
LIST ALL   1 [2][3][4][5] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인