[Python] 부동소수의 오차와 round 함수

이정훈·2022년 5월 13일

Python

목록 보기
2/4
post-thumbnail

부동소수의 표현

컴퓨터는 부동 소수를 이진법을 사용하여 표기한다. 그러나 1과 10 사이에는 수 많은 부동소수가 존재하지만, 컴퓨터의 이진법으로는 이러한 수많은 10진수 부동 소수를 다 표현 할 수 없다. 따라서 컴퓨터는 부동소수를 근사값으로 부동소수를 표현한다.

부동소수의 오차

부동소수를 근사값으로 사용하기에 산술 결과에서 오차가 발생한다.

>>> 0.1 + 0.2
0.30000000000000004

예를 들어 0.1과 0.2를 더하면 0.3이 아닌 0.30000000000000004으로 출력된다.
10진수 부동소수로 표현으로는 정확히 0.1과 0.2를 컴퓨터에서 표현하지 못하기 때문에 근사값을 사용한다. 이러한 근사값의 사용으로 두 부동소수를 더하였을때 약간의 오차가 발생한다.

>>> 1 / 10
0.1

위의 1 / 10의 결과로 0.1이 나왔지만 이 역시 반올림한 근사값이다. 이진법에서 1 /10은 무한히 반복되는 소수이고 컴퓨터의 메모리는 한정적이기 때문에 특정 비트에서 멈추고 근사값으로 표현한다.

이러한 부동소수의 오차는 파이썬 뿐만 아니라 부동소수를 지원하는 다른 여러 언어에서도 발견할 수 있다.
파이썬에는 부동소수의 반올림한 값을 반환하는 내장 함수인 round()함수가 있다.

round() 함수

파이썬에서 지원하는 내장 함수인 round() 함수의 형태는 다음과 같다.

round(number, [n])

여기서 number에는 부동소수가 오고 n은 생략이 가능하며 생략시 가장 근접한 근사값을 돌려준다.

>>> round(3.141592)
3

n에 자연수 입력시 소수점 n자리까지 반올림한 부동소수를 반환한다.

>>> round(3.141592, 2)
3.14

n에 음수도 가능하다. 음수를 입력하면 10의 절댓값 n승자리까지 반올림한 수를 반환한다.

>>> round(31.41592, -1)
30.0
profile
새롭게 알게된 것을 기록하는 공간

0개의 댓글