处理非常大的数字

时间:2013-12-21 17:28:15

标签: python numbers

我需要编写一个计算数学公式的简单程序。 这里唯一的问题是其中一个变量的值可以是10 ^ 100。 因此,我不能用C ++ / C编写这个程序(我不能使用像gmp这样的外部库)。 几个小时前我读到Python能够计算这些值。 我的问题是: 为什么

print("%.10f"%(10.25**100))

返回号码"118137163510621843218803309161687290343217035128100169109374848108012122824436799009169146127891562496.0000000000"

而不是 "118137163510621850716311252946961817841741635398513936935237985161753371506358048089333490072379307296.453937046171461"

2 个答案:

答案 0 :(得分:5)

默认情况下,Python使用固定精度浮点数据类型来表示小数(就像C中的double一样)。不过,您可以使用precise rational numbers

>>> from fractions import Fraction
>>> Fraction("10.25")
Fraction(41, 4)
>>> x = Fraction("10.25")
>>> x**100
Fraction(189839102486063226543090986563273122284619337618944664609359292215966165735102377674211649585188827411673346619890309129617784863285653302296666895356073140724001, 1606938044258990275541962092341162602522202993782792835301376)

如果你想要任意精度小数,你也可以使用decimal模块(但是,只支持可以表示为有限小数的数字):

>>> from decimal import *
>>> getcontext().prec = 150
>>> Decimal("10.25")**100
Decimal('118137163510621850716311252946961817841741635398513936935237985161753371506358048089333490072379307296.453937046171460995169093650913476028229144848989')

答案 1 :(得分:2)

Python能够处理任意大的整数,但不能处理浮点值。它们可以变得非常大,但正如您所注意到的那样,您会丢失低位数的精度。