Какое наибольшее число может обрабатывать десятичный класс?

Моя программа вычисляет математическую константу e , которая иррациональна. Для этого мне нужно было получить факториалы очень больших чисел.

int не может обрабатывать числа, превышающие 170 !. (Я обнаружил, что самый большой калькулятор Google может обрабатывать 170.654259, но я не уверен, как не целое число может быть факторизованным.) float не может обрабатывать очень большие числа.

Я вычислил e до 750000 цифр, а math.factorial(750000) – ошеломляющее, большое количество. Тем не менее, Decimal обрабатывал его с очевидной легкостью.

Насколько велика цифра для дескриптора Decimal до того, как будет поднят OverflowError ? Является ли размер отличается в Python 2 и Python 3?

2 Solutions collect form web for “Какое наибольшее число может обрабатывать десятичный класс?”

Какое наибольшее число может обрабатывать десятичный класс?

Наибольшая величина – бесконечность:

 >>> from decimal import Decimal >>> Decimal('Inf') Decimal('Infinity') 

Наибольшее представимое конечное число на данной платформе зависит от decimal.MAX_EMAX :

 >>> from decimal import Context, MAX_EMAX >>> d = Context(Emax=MAX_EMAX, prec=1).create_decimal('9e'+str(MAX_EMAX)) >>> d.is_finite() True >>> d.next_plus() Decimal('Infinity') >>> d Decimal('9E+999999999999999999') 

Количество значащих цифр зависит от decimal.MAX_PREC например, для вычисления e с заданной точностью:

 >>> from decimal import Context >>> Context(prec=60).exp(1) Decimal('2.71828182845904523536028747135266249775724709369995957496697') 

Константы ( MAX_EMAX , MAX_PREC ) применимы только для реализации C. Версия Pure Python может использовать большие значения:

 >>> from decimal import Context, MAX_EMAX >>> Context(Emax=MAX_EMAX+1, prec=1).create_decimal('9e'+str(MAX_EMAX+1)) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: valid range for Emax is [0, MAX_EMAX] >>> from _pydecimal import Context, MAX_EMAX >>> Context(Emax=MAX_EMAX+1, prec=1).create_decimal('9e'+str(MAX_EMAX+1)) Decimal('9E+1000000000000000000') 

Это зависит от контекста, который вы предоставляете для объекта Decimal. Из документации библиотеки :

class decimal.Context (prec = None, rounding = None, traps = None, flags = None, Emin = None, Emax = None, capitals = 1)

Emax и Emin управляют границами вашего десятичного знака. Если показатель степени больше Emax или меньше Emin будет сигнал переполнения. Вы можете посмотреть поля в decimal.defaultContext чтобы узнать, что они по умолчанию, или decimal.getContext() чтобы узнать, что они представляют в любой момент времени.

Изменить: Как заметил @davidism, вы не получаете точных ответов от decimal вычислений. По умолчанию точность модуля равна 28. Таким образом, все целые числа до 9999999999999999999999999999999 (28 девяток) могут быть представлены точно, а более высокие числа могут быть округлены.

  • socket ResourceWarning с использованием urllib в Python 3
  • _tkinter TclError: не удается найти пакет Tix
  • Как удалить пакет, установленный с помощью pip install --user
  • Вывод Python в Консоль внутри подпроцесса из дочернего скребка
  • как добавить сопрограмму к запущенному циклу asyncio?
  • IOError: Недопустимый аргумент при чтении / записи большого байта
  • очередь ImportError в python 3
  • Напишите разные шестнадцатеричные значения в Python2 и Python3
  • Python, HTTPS GET с базовой аутентификацией
  • Python 3 Десятичное округление в половину с помощью контекста ROUND_HALF_UP
  • Проверить на изменчивость в Python?
  • Python - лучший язык программирования в мире.