초등학교와 중학교에서 배운 반올림은 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 이다.
우리가 아는 사사오입 반올림을 이용하려면 직접 구현하면 된다.
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 half up, 파이썬에서 구현된 오사오입은 rounding half to even 이다.
rounding half to even은 IEEE에서 정의한 부동소수점(floating-point) 반올림 방법이다. (https://en.wikipedia.org/wiki/IEEE_754#Roundings_to_nearest)
참고로 백준 문제를 풀다가 알았다.
https://www.acmicpc.net/problem/18110
'Tutorial, Guide' 카테고리의 다른 글
[LaTeX] Greek letters and usages (수학, 과학의 그리스 문자의 쓰임) (0) | 2024.03.25 |
---|---|
vscode 업데이트로 접속이 안될 때 (0) | 2023.12.19 |
[LaTeX] 여러가지 수학 폰트들 (mathcal, mathbb 등) (0) | 2023.08.30 |
[Error] ValueError: Expected more than 1 value per channel when training, got input size ~ (0) | 2023.08.23 |
[Error] CUDA error: device-side assert triggered (0) | 2023.08.02 |