如何消除python中的十进制溢出…我正在尝试计算rubik';s立方体可以用于学术项目

如何消除python中的十进制溢出…我正在尝试计算rubik';s立方体可以用于学术项目,python,math,python-decimal,Python,Math,Python Decimal,嘿,我想计算一个2000x2000的魔方可能的组合数量, 我用python编写了这段代码来计算它,因为我使用的在线计算器和物理计算器都没有结果。我需要一台更强大的电脑吗?还是这根本无法实现 用普通计算器表示法,实际方程为10^((3.26017)*((2.00214)^(2000))-6.51938。如果你们中的任何人能为我计算,请发送给我像复制粘贴的东西的代码,如果可能的话,谢谢 import decimal >>> decimal.getcontext().pre

嘿,我想计算一个2000x2000的魔方可能的组合数量, 我用python编写了这段代码来计算它,因为我使用的在线计算器和物理计算器都没有结果。我需要一台更强大的电脑吗?还是这根本无法实现

用普通计算器表示法,实际方程为10^((3.26017)*((2.00214)^(2000))-6.51938。如果你们中的任何人能为我计算,请发送给我像复制粘贴的东西的代码,如果可能的话,谢谢

     import decimal
>>> decimal.getcontext().prec = 10000
>>> decimal.Decimal(10)**((decimal.Decimal(3.26017))*((decimal.Decimal(2.00214))**(decimal.Decimal(2000))))-(decimal.Decimal(6.51938))
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    decimal.Decimal(10)**((decimal.Decimal(3.26017))*((decimal.Decimal(2.00214))**(decimal.Decimal(2000))))-(decimal.Decimal(6.51938))
decimal.Overflow: [<class 'decimal.Overflow'>]

导入十进制
>>>decimal.getcontext().prec=10000
>>>十进制.十进制(10)**((十进制.十进制(3.26017))*((十进制.十进制(2.00214))**(十进制.十进制(2000))-(十进制.十进制(6.51938))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
十进制.十进制(10)**((十进制.十进制(3.26017))*((十进制.十进制(2.00214))**(十进制.十进制(2000))-(十进制.十进制(6.51938))
十进制溢出:[]
2.002142000是一个超过600位的数字。把它乘以3再减去6不会有太大的变化

问题是你想将10提升到这个幂。这个数字的幂不是一个600位数的数字,而是一个位数为600位数的数字。要在内存中存储此数字,需要10600位的顺序。一个字节(假设你能得到一台有这么多内存的计算机)只有大约1019位


简而言之,你的数字太大,无法计算。

你应该先做一个粗略的估计。结果是超过2**2000位,这个数字大于宇宙中原子的数量。你需要重新思考如何表达这个价值。在日志(以10为基数)中工作是可行的。你从哪里得到这个公式的?我怀疑它是否正确:真实数字必须以
(6*2000*2000)为界(2000*2000)!^6
(表面颜色可能排列的数量),这是一个比您给出的数字小得多的数字。(实际数字约为1550万位,因此使用适当的大数字库应该很容易计算。)