Python 非常大数量的计算,而不损失准确性?

Python 非常大数量的计算,而不损失准确性?,python,Python,非常大数量的计算,而不损失准确性 给定1700位数字,我们希望存储该值并对其执行两个功能 在不损失精度的情况下,如果计算时间更长,则可以,但如果计算速度更快,则更好 其中x=1700位长的数值 使用be计算的两个计算值 X*(最多四位数) 然后我们取这个结果的模数400 ( x % 400 ) 如果我们不能相乘[X*(最多四位数)],然后根据 处理瓶颈、上限——那么,这可以在我们第一次采取行动的地方完成吗 原始x的模数=1700位,然后乘以四位数值 然后取这之后的模量?理想的情况下,我更愿意做

非常大数量的计算,而不损失准确性

给定1700位数字,我们希望存储该值并对其执行两个功能 在不损失精度的情况下,如果计算时间更长,则可以,但如果计算速度更快,则更好

其中
x
=1700位长的数值

使用be计算的两个计算值

X
*(最多四位数)

然后我们取这个结果的模数400

( x % 400 )
如果我们不能相乘[
X
*(最多四位数)],然后根据 处理瓶颈、上限——那么,这可以在我们第一次采取行动的地方完成吗 原始
x
的模数=1700位,然后乘以四位数值 然后取这之后的模量?理想的情况下,我更愿意做 第一种情况

迄今为止,我了解到的与此相关的限制

首先,我只在WinXp 32位系统上运行,目前无法升级

第二,我已经意识到python、Symphy和, 等正确处理大量计算。这些问题似乎出现了 通过使用浮点数和相关参数避免数据丢失。关于若干不同项目的详细信息 方法可以在这里查看

我的系统无法正确处理“float128”浮动,尽管有人告诉我 由一个人,这将能够处理这种计算-尽管问题 看起来float128实际上很少是128个float,而且在我的系统中肯定不是。 此外,由于内部处理的特殊性,似乎大多数浮点数都会丢失 关于这类计算的数据。如果我理解正确,这是最好的 获取返回的最准确值的候选项包括 具有任意精度,并将输入表示为字符串,而不仅仅是直数值 价值观另外,理想情况下,我希望这个公式能够处理理性而不需要 精度损失。所以“x”开始时是一个整数,但当我乘以它时 通过四位数的值,我希望该值是任何数值,例如整数, 整数或有理数,如“2243.0456”

我一直在试验的方法之一的结构

from sympy import mpmath
mpmath.mp.dps = 1700
x = (mpmath.mpf" INSERT 1700 DIGIT NUMBER HERE"
(x % 400)
以实时数据为例

from sympy import mpmath
mpmath.mp.dps = 1700
x = (mpmath.mpf"4224837741562986738552195234618134569391350587851527986076117152972791626026988760293885754068768475423919991676816860701478996539715076968649431668262941552499272851934021744703799728797962346859481772141964720120813934781420732260156446701740408591264289745960985811289070246238359268267313892549883722768575435935465369820850766441187744058828599331364172396647692768693734233545999439071435129082764340446292057962343360114463696515950803159895238667237356887294549618489296157716384494295159851060500050371940523385701946860964162569067371175357615144192344763876540813882107379891591055307476597279137714860430053785074855035948744902479909111840444834198237419177418965268614345042634655648237818899253116247916585686713243193074635608527160273611309051938762676520507404815180792793701259216609316118483835216791263172902470123821111779223204735647931377027227055312940934756325611832463728974558417085791096461266371917752574370345933533929245534623041989305973992490523694190318284666464757159324866096861573704540654160644711274766759520501013633999706244117691235878123489694261724158073725644897527727473450037615295487637338687848351441331386946416003718795419822246935787682977520303924734875834943985619000970655639767984458204513958680501990182471695393372003272654902387493955849775308922901631024199011283441050881608686856746206012270890984260424834329551281249797545775091226433669036680463406283858413423722935297859778786945935751468048494081427689669730664660260908636113264573712854536295005312934569838992758429422872122606102877623867968067833225444280667381025371705347744037508121975424674439904984528128036994803804742198422695627759844248"
(x % 400)

但我不知道是否会返回准确的结果,希望听到任何人的建议?

可以增长到非常大的数量。虽然效率较低,但他们可能会做你想做的事。

Dunno,只是将那个巨大的数字分配给一个变量,然后在Mac OS上执行模数对我来说就行了。纯Python可以直接处理非常大的数字,你只是在处理整数吗?Python已经内置了任意精度的精确整数算法。您不需要引入任意精度的浮点库。为什么不在google、wolfram或octave中检查结果呢?
x
是整数吗?你的第一个运算是乘法还是求幂?这里显示的是整数和乘法,但在链接的新闻组帖子中,使用的是非整数和幂运算。对于整数和乘法,使用Python内置的
int
和/或
long
类型将很好地工作
n=int(long\u number\u string);打印(n*1234%400)
。对于指数运算,您可能希望使用更好的算法(尽管普通整数仍然可以工作)。如果你的很长的数字应该是一个相对较小但精度很高的十进制数,你会有一个真正的问题。谢谢各位的反馈!在本例中,“x”将始终作为整数输入,但该值可以高达2000位。我的理解是long、longdouble等不足以存储和操作此值。在这种情况下,我不会处理求幂运算,但是如果我想将一个整数乘以一个4位有理数(或十进制,小数),在处理时这肯定不会作为一个整数工作,我的理解是,如果我仅仅对这个数字的大小执行一个模数,大多数常用的方法都会导致数据丢失……我的理解是分数的精度限制在15位?没有哪一个地方足够接近1700到2000位这样大的数字?分数的精度实际上是无限的。只要计算保持在整数或有理数域中,它就100%准确。当您将最终的有理值转换为浮点类型时,就会出现近似值。您可以将其转换为
Decimal
mpmath.mpf
gmpy2.mpfr
,或任何其他扩展精度浮点类型,以获得所需的精度。