Python에서 큰 숫자를 나누는 기본 방법
Python에서는 일반적인 연산 방식 그대로 큰 숫자를 나눌 수 있습니다. 예를 들어 다음과 같이 작성하면 됩니다.
result = 10**50 / 3
print(result)그런데 이 방식에는 중요한 한 가지 문제가 있습니다. 바로 정밀도(precision) 문제입니다.
왜 정밀도 문제가 발생할까요?
Python의 기본 숫자 타입인 float는 IEEE 754 부동소수점 방식을 따르기 때문에, 아주 큰 수나 소수점 아래가 긴 수를 다룰 때 오차가 발생할 수 있습니다. 언어 자체의 속도를 유지하기 위해 무한한 정밀도를 보장하지 않기 때문입니다.
대표적인 예로 다음과 같은 결과를 볼 수 있습니다.
print(0.1 + 0.2)
# 출력: 0.30000000000000004해결책: bigfloat 같은 수치 계산 라이브러리 사용
높은 정밀도가 필요한 연산이라면 bigfloat처럼 임의 정밀도(arbitrary precision)를 지원하는 수치 계산 라이브러리를 사용하는 것이 훨씬 안전합니다.
from bigfloat import bigfloat, precision
with precision(200): # 원하는 비트 수만큼 정밀도 설정
result = bigfloat(10**50) / 3
print(result)이렇게 하면 기본 float 타입으로는 표현할 수 없는 매우 큰 수나 높은 정밀도가 필요한 계산도 정확하게 처리할 수 있습니다.
부동소수점 오차에 대한 공식 문서
Python에서 부동소수점 연산 시 마주칠 수 있는 정밀도 관련 문제에 대해 더 자세히 알고 싶다면 공식 문서를 참고하세요.
Python 공식 튜토리얼 - 부동소수점 산술: 문제점과 한계
정리
- Python에서 큰 숫자 나누기는 기본 연산자로 가능하지만 정밀도가 보장되지 않습니다.
- 높은 정밀도가 필요하면
bigfloat같은 전용 라이브러리를 사용하세요. - 부동소수점의 한계는 Python 공식 문서에서 확인할 수 있습니다.