Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 큰 숫자를 나누는 방법과 정밀도 문제 해결하기

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 공식 문서에서 확인할 수 있습니다.