我正在做一个项目,需要对大数进行高精度的划分,而有时候大数将是复数。我需要在python(最好是python 3.7)中执行此操作,但到目前为止我尝试过的所有操作都根本无效。
对于实数,我可以简单地使用十进制模块,但是我发现十进制模块不适用于复数。另外,当我尝试将小数模块扩展为复数时,由于对大的实数输入和大的复数输入都得到不准确的结果,因此它失败了。尝试下载具有该功能的外部模块时,此方法无效。
from decimal import *
def div(a,b):
y = b.real - (b.imag*1j)
a = a*y
b = Decimal((b*y).real)
return [Decimal(a.real)/b,Decimal(a.imag)/b]
这是我的代码,用于对复数使用十进制模块,并演示我的意思(并演示此除法方法),下面将在一些输入和输出中显示。第一种是使用较小输入的方法,第二种将是非常不使用较大输入的方法。
>>> div(13243,23)[0]*23
Decimal('13243.00000000000000000000000')
>>> div(15**17,23)[0]*23
Decimal('98526125335693355453.21739130')
尝试使用15**17
的结果不仅比15**17
高出数千倍,而且也不是整数。这是非常不正确的。就像我所说的,我需要这种方法可以转换为复数,并且因为它可以在列表中存储复数是很痛苦的,也不是理想的选择。为了在部件上使用十进制,有必要这样做,但是,显然它没有用。
起初我以为也许是这种情况,我只是需要将精度设置得更高,但是即使将其设置为1000,它仍然会失败。
在这一点上,我试图找到一些允许我执行此操作的模块。我发现2。mpmath
和gmpy
。我尝试通过pip安装gmpy
,并尝试在多个版本的python和多个版本的gmpy
上进行安装,并且每次收到错误消息时,通常都会出现一条关于服务器“主动拒绝”的信息。连接”,以及其他人说它不受支持等。
这种让我陷入困境。我找不到为我自己做的模块,而当我自己尝试做时,它显然是行不通的。是否存在另一个提供此功能的模块,或者我的尝试可以以某种方式解决的问题我做得特别错?