5.2 실수 계산하기

1.5, 3.333333처럼 소수점이 붙은 수를 실수라고 하죠? 이번에는 실수끼리 계산을 해보겠습니다.

>>>3.5 + 2.1를 입력해보세요.

>>> 3.5 + 2.1
5.6

덧셈의 결과인 5.6이 잘 나왔습니다. 이번에는 뺄셈, 곱셈, 나눗셈을 해보죠.

>>> 4.3 - 2.7
1.5999999999999996
>>> 1.5 * 3.1
4.65
>>> 5.5 / 3.1
1.7741935483870968

그런데 4.3 - 2.7의 결과가 좀 이상합니다. 1.6이 나와야 하는데 1.5999999999999996이 나왔습니다. 왜냐하면 컴퓨터는 실수를 표현할 때 오차가 발생하기 때문입니다.

컴퓨터는 2진수로 숫자를 표현합니다. 2진수로 정확하게 표현할 수 있는 숫자와 그렇지 못한 숫자가 있습니다. 4.3-2.7의 결과는 2진수로 정확하게 표현할 수 없으므로 끝에 오차가 발생합니다. 이는 컴퓨터가 멍청하기 때문은 아닙니다. 10진수에서 1/3=0.33333...이므로 정확하게 표현할 수 없습니다. 숫자 표기법에 따라 정확하게 표기할 수 있는 숫자가 다를 뿐입니다.

지금까지 실수끼리 계산을 해보았습니다. 실수와 정수를 함께 계산하면 어떻게 될까요?

>>> 4.2 + 5
9.2

실수인 9.2가 나왔습니다. 실수와 정수를 함께 계산하면 표현 범위가 넓은 실수로 계산됩니다(실수가 정수보다 표현 범위가 넓습니다).

그림 5-1 표현 범위가 넓은 쪽으로 계산됨
그림 ‎5 1 표현 범위가 넓은 쪽으로 계산됨
참고 | 정수 계산 결과를 실수로 만들고 싶어요.

계산 결과가 정수이지만 강제로 실수로 만들려면 계산식을 괄호로 묶은 뒤 앞에 float를 붙여주면 됩니다.

>>> float(1 + 2)
3.0

float는 부동소수점(floating point)에서 따왔으며 결과를 실수로 만들어줍니다.

참고 | 복소수

파이썬에서는 실수부와 허수부로 이루어진 복소수(complex number)도 사용할 수 있습니다. 이때 허수부는 숫자 뒤에 j를 붙입니다(수학에서는 허수를 i로 표현하지만 공학에서는 j를 사용합니다).

>>> 1.2+1.3j
(1.2+1.3j)

두 실수를 복소수로 만들 때는 complex를 사용하면 됩니다.

>>> complex(1.2, 1.3)
(1.2+1.3j)