[Python] round 함수의 함정👻 (feat. 오사오입, 사사오입)

Sangho Han·2023년 7월 12일
2

🐍 Python

목록 보기
1/2
post-thumbnail

파이썬을 사용해본 사람이라면, 어떤 수에 대해서 반올림을 해주는 round 함수에 대해서 알고 있을 것이다.

round 함수

  • 간단하게 설명을 하자면, round함수는 들어온 숫자에 대해 반올림을 진행한 후, 반환해준다.
num = round(1.5)
print(num)

# 2 출력
  • 이런식으로 소숫점 몇 째 자리 이후로 반올림을 해줄 것인지 설정도 가능하다.
num = round(1.567,2)
print(num)

# 1.57 출력 

그렇다면 아래와 같은 코드를 작성한다면 예상 출력은 어떻게 될까?

print(round(1.5))
print(round(2.5))
print(round(3.5))
print(round(4.5))
  • 아마 다들 당연하게도 2,3,4,5가 순서대로 출력될 것으로 예상할 것이다.
    우리는 반올림이 5이상의 숫자라면 올림을, 그 이하라면 버림을 하는 것으로 알고 있기 때문이다.

하지만 놀랍게도 실제 결과는 아래와 같이 2,2,4,4가 출력된다.

대체 어떤 문제 때문에 이렇게 출력되는 것일까? 답은 pythonround함수는 오사오입 방식을 사용하기 때문이다.

사사오입 vs 오사오입

위에서도 적어놓았듯이, 우리는 대개 반올림을 할 때 0,1,2,3,4까지는 버림을, 5,6,7,8,9까지는 올림을 한다고 알고 있다. 이를 사사오입 방식이라고 한다.

하지만 오사오입 방식에서는, 5 미만은 버림을, 5 초과는 올림을 해주는데.. 그러면 5는 어떻게 되는 걸까?

👉 5 앞의 수가 홀수라면 올림을, 짝수라면 버림을 하게 된다.

그렇기 때문에 위에서 1.53.5는 올림을, 2.54.5는 버림이 된 것이다!

오사오입을 사용하는 이유?

이쯤 되면 파이썬 혹은 다른 프로그램들에서 왜 오사오입을 사용하는지 궁금해진다.

그 답은 https://blog.naver.com/noseoul1/221592047071 이 분의 좋은 글에서 알아볼 수 있었다.

통계학적인 부분에서는 오사오입이 합리적!

  • 오사오입을 통해서 반올림한 변량의 평균과, 실제 변량 값의 평균의 차이는 사사오입의 경우와 비교했을 때 오차의 크기가 같거나 더 작다고 한다.

  • 이 때문에 공학이나 자연과학에서는 오사오입 방식을 많이 사용한다고 한다.

사사오입을 오사오입에 비해 일반적으로 사용하는 이유!

  • 반올림이라는 것은 원래 통계학적인 목적보다 개별적인 숫자의 근사값을 표현하기 위함에 목적을 두기 때문이다.

  • 즉, 실제 수치에 가깝게 만들어 주는 것이 좋은 반올림이라고 할 수 있겠다.


지금까지 사사오입과 오사오입에 대한 사실들을 알아보았다.

파이썬에서는 오사오입을 방식을 사용하고 있고, 만약 사사오입을 방식을 사용하기 위해서는 함수를 자체적으로 만들어주어야한다는 점을 알게 되었으니 다음번에 관련된 문제를 풀게 될 때 활용할 수 있을 것 같다!

profile
안녕하세요. 비즈니스를 이해하는 백엔드 개발자, 한상호입니다.

0개의 댓글