더북(TheBook)

실수를 사용하다 보면 가장 먼저 마주치게 되는 문제 중 하나가 정밀도 문제다. 5.0/2.02.5가 되지만, 5.0/3.01.6666666666666667로 평가된다. 일반적으로 실수는 소수점 15자리 내지 17자리 정도의 정밀도를 지닌다. 1.5절에서는 실수를 출력할 때 표현할 소수점 이하 자릿수를 조정하는 방법을 설명한다. 그전까지는 파이썬에서 제공하는 기본 출력 서식을 사용한다. float 객체를 이용해 계산할 때는 고려해야 할 사항이 아주 많지만, 모든 계산에 정밀 계산용 라이브러리를 사용할 필요 없이 float 객체를 사용해 자연스럽게 파이썬 프로그램을 작성할 수 있다. 예를 들어 quadratic.py(프로그램 1.2.4)는 계산에 float 객체를 사용해 이차 방정식의 근 두 개를 구한다.

프로그램 1.2.4 이차 방정식 근의 공식 (quadratic.py)

import math
import sys
import stdio
 
b = float(sys.argv[1])
c = float(sys.argv[2])
 
discriminant = b*b - 4.0*c
d = math.sqrt(discriminant)
stdio.writeln((-b + d) / 2.0)
stdio.writeln((-b - d) / 2.0)

이 프로그램은 이차 방정식 근의 공식을 이용해 x2 + bx + c의 근을 구해 출력한다. 예를 들어 x2 - 3x + 2는 간단히 (x–1)(x–2)로 인수분해해 1과 2를 쉽게 구할 수 있다. x2x – 1의 근은 𝛷와 1 – 𝛷로서, 여기서 𝛷는 황금 분할하는 황금비를 나타낸다. 그리고 x2 + x + 1의 근은 실수가 아니다.

% python3 quadratic.py -3.0 2.0
2.0
1.0
 
% python3 quadratic.py -1.0 -1.0
1.618033988749895
-0.6180339887498949
 
% python3 quadratic.py 1.0 1.0
Traceback (most recent call last):
File "quadratic.py", line 9, in <module>
  d = math.sqrt(discriminant)
ValueError: math domain error
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.