본문 바로가기
Tutorial, Guide

Python의 round는 사사오입? 오사오입?

by 궁금한 준이 2023. 10. 1.
728x90
반응형

초등학교와 중학교에서 배운 반올림은 5이상에서 올리고, 5미만에서 버린다. 사사오입이라고도 부른다.

파이썬에서 반올림은 `round` 함수가 있는데, 사사오입이 아니라 오사오입이다. (banker's rounding이라고도 한다)

※ 올림과 버림은 음수로 오면 헷갈리기 쉽다. 수학적으로 각각 ceil과 floor이다.

※ 반올림의 수학적 표현은 floor(x+0.5) 이다.

 

이게 무엇인가 하면, 5미만은 버림, 5초과에서 올린다. 5의 경우 앞자리가 짝수면 버리고, 홀수면 올린다.

예를 들면, 2.5의 경우 5의 앞자리가 2인 짝수로 버린다. 즉 round(2.5)=2 이다.

3.5의 경우, 5의 앞자리가 3인 홀수로 올린다. 즉 round(3.5)=3 이다.

 

음수의 경우, 절댓값에 반올림을 적용하고, 다시 음수로 바꾸어준다. 즉 round(-x) = -round(x) 인 셈이다.

예를 들어 -1.5의 경우, 1.5의 반올림을 적용한다. 5의 앞자리가 1이므로 올림이다. 따라서 round(1.5)=2이고 원래 음수였으므로 round(-1.5) = -round(1.5) = -2 이다.

-2.5의 경우, 2.5의 반올림을 먼저 적용한다. 5의 앞자리가 2이므로 버림이다. 따라서 round(2.5)=2 이고, 원래 음수였으므로 round(-2.5) = -round(2.5)= -2 이다.

파이썬 round 함수 결과

우리가 아는 사사오입 반올림을 이용하려면 직접 구현하면 된다.

def my_round(num:float)->int:
    if num < 0:
        return -my_round(-num)
    
    if num - int(num) >= 0.5:
        return int(num) + 1
    else:
        return int(num)

 

참고로, 수학적으로 rounding은 다양하게 정의되어있다.

https://en.wikipedia.org/wiki/Rounding

 

Rounding - Wikipedia

From Wikipedia, the free encyclopedia Replacing a number with a simpler value Graphs of the result, y, of rounding x using different methods. For clarity, the graphs are shown displaced from integer y values. In the SVG file, hover over a method to highlig

en.wikipedia.org

 

일상적으로 쓰이는 사사오입은 rounding half up, 파이썬에서 구현된 오사오입은 rounding half to even 이다. 

 

 

rounding half to even은 IEEE에서 정의한 부동소수점(floating-point) 반올림 방법이다. (https://en.wikipedia.org/wiki/IEEE_754#Roundings_to_nearest)

 

IEEE 754 - Wikipedia

From Wikipedia, the free encyclopedia IEEE standard for floating-point arithmetic The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point arithmetic established in 1985 by the Institute of Electrical and Electr

en.wikipedia.org

 

참고로 백준 문제를 풀다가 알았다.

https://www.acmicpc.net/problem/18110

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

 

728x90
반응형