Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用mpz变量的算术运算的结果是什么?_Python_Python 2.7_Gmp - Fatal编程技术网

Python 使用mpz变量的算术运算的结果是什么?

Python 使用mpz变量的算术运算的结果是什么?,python,python-2.7,gmp,Python,Python 2.7,Gmp,我正在尝试用python中的gmpy2做一些算术。不幸的是我没有 知道这个算法返回值的类型。例如: x=float(gmpy2.comb(100,50))/gmpy2.comb(200,100) print x print isinstance(x, (int, long, float, complex)) 给我: 1.114224180581451e-30 False 我在谷歌上搜索时,找不到任何有用的信息。 一般来说,有没有一种方法可以在python中获取对象类型? 否则,此值的确切类型

我正在尝试用python中的gmpy2做一些算术。不幸的是我没有 知道这个算法返回值的类型。例如:

x=float(gmpy2.comb(100,50))/gmpy2.comb(200,100)
print x
print isinstance(x, (int, long, float, complex))
给我:

1.114224180581451e-30
False
我在谷歌上搜索时,找不到任何有用的信息。 一般来说,有没有一种方法可以在python中获取对象类型? 否则,此值的确切类型是什么?是mpz吗? 最后一个问题,当我用mpz值和 例如float,它是否总是将类型强制转换为mpz

另外,我不知道mpz是否是我在这里使用的正确术语!我也会很高兴的 如果有人在stackoverflow中将gmpy添加到标记中以使其
了解gmpy的人更容易理解的问题。

我不知道
gmpy2
,但您可以使用
x.在Python中找到对象的类型


对于新样式的类,您还可以使用
type(x)

gmpy2引入了几种新的数据类型:mpz、mpq、mpfr和mpc。它们类似于Python的int/long、分数、分数、浮点和复杂类型。因此,涉及mpz的分割通常会导致mpfr

在您的示例中,创建一个mpz,将其转换为浮点,然后将其除以一个mpz。执行除法时,gmpy2将浮点转换为mpfr,然后执行除法。如果需要浮点结果,应该对整个结果应用float(),而不仅仅是gmpy2.comb(100,50)。请注意括号中的差异

>>> float(gmpy2.comb(100,50))/gmpy2.comb(200,100)
mpfr('1.114224180581451e-30')
>>> float(gmpy2.comb(100,50)/gmpy2.comb(200,100))
1.114224180581451e-30
为什么要将浮点转换为mpfr?mpfr数据类型可以支持更高的精度,并且具有比浮点更宽的范围。只要mpfr的精度大于或等于浮点的精度(即53),则转换是无损的


免责声明:我维护gmpy和gmpy2。

谢谢。类型(x)可以工作,但它返回:这没有意义!为什么不呢?看起来您正在将一个
浮点
除以一个
mpz
(多精度整数),并得到一个
mpfr
(多精度实数)。我想,在不太了解
gmpy
或您的程序的情况下,您可能希望在分子中创建
mpfr
而不是
float
gmpy2.mpfr(gmpy2.comb(100,50))
。因此,我的强制转换层次结构与python中的类型相同。我的意思是,如果有一个mpz,其他的一切都将在mpz中,如果有mpfr,其他的一切都将在mpfr中。是吗?看起来是这样,但我认为casvh是软件包的维护者。非常感谢您的帮助。非常感谢您提供的信息。我想弄清楚的是似乎存在的层次结构。(在数学表达式中,每个术语都会被转换为一个精度更高的术语,即使对于gmpy类型也是如此)(如果我错了,请纠正我)是的,但这需要更多内存,因为我正在用动态编程编写程序,为了节省空间,我必须将最后的所有内容都转换为浮点,因为我认为在很长的数字上计算是最好的!