Decimal类可以处理的最大数字是多少?

我的程序计算的数学常数 e 是不合理的。为此,我需要获取大量的阶乘。

int无法处理大于170!的数字。(我发现Google可以处理的最大计算器是170.654259,但我不确定如何将非整数分解。)

float也不能处理非常大的数字。

我计算出 e

为750000位数字,真是math.factorial(750000)个令人难以置信的大数字。但是,Decimal处理起来显然很轻松。

提出加注Decimal之前可以处理多少个数字OverflowError?Python 2和Python 3的大小不同吗?

回答:

Decimal类可以处理的最大数字是多少?

最大的幅度是无穷大:

>>> 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_EMAXMAX_PREC)仅与C实现有关。纯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类可以处理的最大数字是多少? 的全部内容, 来源链接: utcz.com/qa/399319.html

回到顶部