실수를 사용하다 보면 가장 먼저 마주치게 되는 문제 중 하나가 정밀도 문제다. 5.0/2.0
은 2.5
가 되지만, 5.0/3.0
은 1.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를 쉽게 구할 수 있다. x2 – x – 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