我需要编写一个计算数学公式的简单程序.这里唯一的问题是其中一个变量的值可以是10 ^ 100.因此,我不能用C++/C编写这个程序(我不能使用像gmp这样的外部库).几个小时前我读到Python能够计算这些值.我的问题是:为什么
print("%.10f"%(10.25**100))
Run Code Online (Sandbox Code Playgroud)
正在返回这个号码 "118137163510621843218803309161687290343217035128100169109374848108012122824436799009169146127891562496.0000000000"
而不是
"118137163510621850716311252946961817841741635398513936935237985161753371506358048089333490072379307296.453937046171461"?
默认情况下,Python使用固定精度浮点数据类型来表示小数(就像double在C中一样).但是,您可以使用精确的有理数:
>>> from fractions import Fraction
>>> Fraction("10.25")
Fraction(41, 4)
>>> x = Fraction("10.25")
>>> x**100
Fraction(189839102486063226543090986563273122284619337618944664609359292215966165735102377674211649585188827411673346619890309129617784863285653302296666895356073140724001, 1606938044258990275541962092341162602522202993782792835301376)
Run Code Online (Sandbox Code Playgroud)
decimal如果您想要任意精度小数,也可以使用该模块(但只支持可表示为有限小数的数字):
>>> from decimal import *
>>> getcontext().prec = 150
>>> Decimal("10.25")**100
Decimal('118137163510621850716311252946961817841741635398513936935237985161753371506358048089333490072379307296.453937046171460995169093650913476028229144848989')
Run Code Online (Sandbox Code Playgroud)