최근 수정 시각 : 2024-11-25 16:08:03

반올림(수학)



파일:상위 문서 아이콘.svg   상위 문서: 어림
1. 개요2. 처리 방법3. 사용 분야4. 관련 문서

1. 개요

반올림/Round-off/사사오입/
[math(f(x; n) = \begin{cases} \begin{aligned} \mathrm{sgn}\left(x\right) 10^{-n}\lceil 10^{n} |x| \rceil && \textsf{ if } 10^n |x| - \lfloor 10^n |x| \rfloor \geq \dfrac{1}{2} \\ \mathrm{sgn}\left(x\right)10^{-n} \lfloor 10^{n} |x| \rfloor && \textsf{ if } 10^n |x| - \lfloor 10^n |x| \rfloor < \dfrac{1}{2} \end{aligned} \end{cases})]
흔히 생각하는 사사오입을 수식으로 표현한 것.[1][2]

근삿값( 어림수)을 구할 때에 끝수를 처리하는 방법으로, 수학적으로 말하자면 최소 단위로 나눈 나머지가 최소 단위의 절반에 미치지 못하는 경우 버리고, 초과하는 경우는 올리는 방법이다.

보통 [math(\lceil x \rceil)]은 천장함수(올림, ceiling function), [math(\lfloor x \rfloor)]은 바닥함수(버림 또는 내림, floor function)으로 적으나, 반올림은 특별한 수학 기호가 없다.

2. 처리 방법

사회과학에서는 주로 소수점 둘째자리를 최소 단위로 하여 반올림한다. 정확히 절반에 걸리는 경우에는 처리 방법에 따라 다르며, '절반의 걸리는 범위'에 대한 정의에 따라 그 결과가 달라지기도 한다. 대표적으로 아래의 유형이 있다. 예시는 모두 십진법을 전제로 한다.
  • 사사오입 (Round half up): 정확하게 절반에 걸리는 경우를 무조건 올리는 방식이다. 일상에서 말하는 반올림은 이것을 의미한다. 최소단위 바로 밑자리가 5인지만 검사하면 되기 때문에 간편하다. 구하려는 자리의 한 자리 아래 숫자가 0, 1, 2, 3, 4이면 버리고, 5, 6, 7, 8, 9이면 올리는 것. 구하려는 자리 아래가 모두 0이면 작업 끝.[3] 이 이론이 위법적 개헌에 악용된 적도 있다.
  • 오사오입[4] (Round half to even): 정확하게 절반에 걸리는 경우 최소 단위의 2배 단위로 맞추는 방식으로, 쉽게 말해 상위 단위를 짝수로 만드는 것이다. 5를 초과할 경우 올림하고, 5 미만일 경우 버림한다. 5일 경우 앞자리 숫자가 짝수면 버리고, 홀수면 올림하여 짝수로 만들어준다.
    자연과학 공학 유효숫자 개념에서 많이 사용하는 방식이다. 컴퓨터에서도 이 방식을 사용하는데, 맨 뒷자리가 필연적으로 손실되는 계산 특성상 이 방식으로 처리하는 것이 오차가 가장 적기 때문. 27.65는 27.6으로, 32.35는 32.4로 만들어주면 된다. 단 정확히 절반이라 하였으니 절반을 초과한 27.6500000001은 27.7이다. 이것은 Banker's rounding 또는 Gaussian rounding이라고도 하며, 다소 이상한 반올림이지만, 통계학적으로는 매우 합리적임을 알 수 있다.
  • 오사육입 (Round half down): 사사오입과는 반대로 절반에 걸리는 경우를 무조건 버리는 방식. 회계나 정책 결정에 잘 사용되었던 방식이다. 하지만 바로 밑의 단위가 5인지를 검사했다고 끝나는 게 아닌지라 계산이 은근히 복잡한 탓에, 바로 밑의 단위는 절사하기도 한다. 100이 최소 단위며 10이 그 밑단위라면 59까지가 0으로 절사되는 식. 실생활에서는 공모주 신청 후 배정할 때 많이 볼 수 있다.
  • 화폐 단위를 반올림할 때 사용하는 반올림 방법인 스웨덴 반올림이 있다. 문서 참고. 이름이 거창하나 수학적 원리는 같다.
사사오입 [math(\begin{aligned} {\rm round}(x;\,n) &= 10^{-n} \left\lceil \dfrac12\lfloor2\times10^n x\rfloor \right\rceil \\ {\rm round_2}(x;\,n) &= 10^{-n} \left\lfloor \dfrac12\lceil2\times10^n x\rceil \right\rfloor \end{aligned})]
오사육입

100을 최소 단위, 10을 밑단위로 잡은 예시를 들면 아래와 같다.
반올림 방법 밑자리 960~1049 1050 1051~1059 1060~1149 1150 1151~1159 1160~1249
사사오입 절사 1000 1100 1200
오사오입 고려 1000 1100 1200
사사육입 고려 1000 1100 1200
오사육입 절사 1000 1100 1200

3. 사용 분야

[math(\pi)]나 [math(\sqrt2)] 같은 무한소수를 반올림하거나, 1기압(1013.25 hPa)을 1013 hPa로 나타내듯이 복잡한 수치를 간단히 하기 위해 쓴다.

과학에선 반올림을 할때 유효숫자를 나타내기 위해 지수형태인 a×10n 꼴로 나타내는 경우가 많다. 예를 들어 3004 를 백의자리에서 반올림하면 3000 이 되고, 유효숫자는 3 하나 뿐인데 이를 표현하면 3×103 이된다. 하지만, 3004 를 십의자리에서 반올림하면 역시 3000 이 되지만, 유효숫자는 30 까지이다. 이를 지수형태로 표현하면 3.0×103 라고 표현해서 유효숫자가 2개임을 표시할 수 있다. 만약 일의자리에서 반올림 했다면 3.00×103 으로 표기한다.

수치해석이나 디지털 신호처리 같은 컴퓨터를 이용한 연산에서는 아날로그-디지털 변환이나 컴퓨터 저장용량의 한계로 인해 값을 저장할 때 반올림을 해야 한다. 이때 발생하는 오차를 반올림 오차라고 하는데 이것이 누적되면 잘못된 결과가 출력될 수도 있어서 컴퓨터를 통해 연산을 할 때에는 반올림 오차에 대해 고려해야 할 필요가 있다. 디지털 신호처리에서는 이를 양자화 오차 또는 양자화 노이즈라고 부르기도 한다.

돈 계산에 있어서 어림계산을 해야 한다면 나의 지출은 올림, 나의 수입은 버림으로 계산하는 것이 좋다. 그렇게 계산해야 나중에 뒤탈이 없다. 단 몇백 원 차이로 헝클어지는 경우가 수도 없이 많다.

Microsoft Excel에선 반올림 하는 함수로는 ROUND가 있다.[5] Excel에서의 ROUND 함수는 사사오입식 반올림으로 오사오입식 반올림을 원할 때에는
=IF(AND(ISEVEN(A1*10^0),MOD(ABS(A1)*10^0,1)<=0.5),ROUNDDOWN(A1,0),ROUND(A1,0))
이 식을 붙여넣고 0을 원하는 숫자로 바꾸면 된다. 또는 사용자정의 함수로
{{{Function BankerRound(rng As Double, sig As Integer) As Double
BankerRound = Round(rng, sig)
End Function}}}
이렇게 붙여넣고
=BankerRound(A1,0)
이렇게 함수를 쓰면 된다.

Python에서는 Microsoft Excel처럼 round 함수로 반올림을 할 수 있다. 다만, Python2에서는 사사오입법을, Python3에서는 오사오입법을 쓴다는 게 특징.
#!syntax python
print("round() function:")
for x in range(1, 11):
    xx = x + .5
    print("%4.1f to: %2d" % (xx, round(xx) ) )

이 코드는 아래와 같이 실행된다.
Python2 Python3
round() function:
 1.5 to:  2
 2.5 to:  3
 3.5 to:  4
 4.5 to:  5
 5.5 to:  6
 6.5 to:  7
 7.5 to:  8
 8.5 to:  9
 9.5 to: 10
10.5 to: 11
round() function:
 1.5 to:  2
 2.5 to:  2
 3.5 to:  4
 4.5 to:  4
 5.5 to:  6
 6.5 to:  6
 7.5 to:  8
 8.5 to:  8
 9.5 to: 10
10.5 to: 10

4. 관련 문서



[1] 절댓값 부호 함수가 들어가는 이유는 이를 쓰지 않을 경우 음수에서는 반대의 결과가 나오기 때문이다. [2] 위의 식을 조각적 정의를 쓰지 않고 쓴다면 [math({\rm round}(x;\,n) = 10^{-n} \left\lceil \dfrac{1}{2}\lfloor2×10^n x\rfloor \right\rceil)]로 나타낼 수 있다. [3] 해당 자리가 0이면 버림을 해도 결과는 같다. [4] 포병 계산 등의 분야에서는 사사육입이라 부른다. [5] 같은 관계로 ROUNDUP은 올림, ROUNDDOWN은 내림(버림)하는 함수이다. [6] 말 그대로 자유당은 반올림 이라는 기적의 논리로 헌법 개정안을 통과시켰다. 참고로 그 때 당시에는 사사오입이 반올림이다.

파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r200에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r200 ( 이전 역사)
문서의 r ( 이전 역사)