Bootstrap

python整数溢出问题_Python在处理大浮点数和整数时防止溢出错误

Python的整数是任意精度,因此如果使用交互算法计算斐波那契数列,则可以计算精确结果。

>>> def fib(n):

... a = 0

... b = 1

... while n > 0:

... a, b = b, a + b

... n = n - 1

... return a

...

>>> fib(100)

354224848179261915075LPython有几个多精度浮点库。 decimal模块包含在Python中,最初用于财务计算。它确实支持sqrt(),因此您可以执行以下操作:

>>> import decimal

>>> decimal.setcontext(decimal.Context(prec=40))

>>> a=decimal.Decimal(5).sqrt()

>>> a

Decimal('2.236067977499789696409173668731276235441')

>>> ((1+a)**100 - (1-a)**100)/(a*(2**100))

Decimal('354224848179261915075.0000000000000000041')其他库是mpmath和gmpy2。

>>> import gmpy2

>>> gmpy2.set_context(gmpy2.context(precision=150))

>>> a=gmpy2.sqrt(5)

>>> a

mpfr('2.2360679774997896964091736687312762354406183598',150)

>>> ((1+a)**100 - (1-a)**100)/(a*(2**100))

mpfr('354224848179261915075.00000000000000000000000248',150)

>>> gmpy2.fib(100)

mpz(354224848179261915075L)gmpy2也可以直接计算机斐波纳契数(如上图所示)。

免责声明:我维持gmpy2。

;