我需要编写一个计算数学公式的简单程序。 这里唯一的问题是其中一个变量的值可以是10 ^ 100。 因此,我不能用C ++ / C编写这个程序(我不能使用像gmp这样的外部库)。 几个小时前我读到Python能够计算这些值。 我的问题是: 为什么
print("%.10f"%(10.25**100))
返回号码"118137163510621843218803309161687290343217035128100169109374848108012122824436799009169146127891562496.0000000000"
"118137163510621850716311252946961817841741635398513936935237985161753371506358048089333490072379307296.453937046171461"
?
答案 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能够处理任意大的整数,但不能处理浮点值。它们可以变得非常大,但正如您所注意到的那样,您会丢失低位数的精度。