0

有类似的问题:检查变量是否为整数,但我看不到我的问题的答案。

我的意思是,我最近在和大数字作斗争,所以我的朋友建议我安装 Python。我今天打开它,这样我就可以计算大数并具有良好的精度,但是......如何使用这个精度?我的意思是,如果我做类似的事情pow(31,123)可以正常工作,但是如果我想检查数字是否为整数,我会得到:

>>> (4.00000000000001).is_integer()
False
>>> (4.000000000000001).is_integer()
False
>>> (4.0000000000000001).is_integer()
True
>>> (4.00000000000000001).is_integer()
True

我想写一个简单的循环来找到丢番图方程的一些解,我需要从非常大的数字中取平方根并检查它是否是整数,但现在我很紧张。有人可以帮助我或给我建议如何获得更好的精度吗?

例子:

例如:$ 2x^2 = 1 + y^31 $,其中 x,y 是整数。我的想法是制作循环,在其中增加 y(从 1 开始),加 1,除以 2,取平方根,然后它必须是整数才能满足方程。这就是我需要它的原因。

4

3 回答 3

6

4.0000000000000001不能准确地表示为浮点数:

>>> format(4.0000000000000001, '.53f')
'4.00000000000000000000000000000000000000000000000000000'

所以这个数字确实是一个整数。在大多数系统上,您不能希望超过 15 位十进制数字:

>>> sys.float_info.dig
15

sys.float_info结构,dig属性代表:

可以忠实地以浮点数表示的十进制数字的最大数量

如果您需要更高的精度,请改用该decimal模块。

于 2014-04-01T12:51:51.827 回答
1

你不能使用内置函数'type'吗?我运行了以下内容:

print type(4.0000000000000000000000000000000000000000000000001)
print type(4)

并得到了结果:

<type 'float'>
<type 'int'>

然后,您可以使用 find() 方法检查结果中“int”和“float”的出现

于 2014-04-01T14:14:44.690 回答
1

您可以使用以下代码检查给定数字是否为整数的平方:

def is_square(x):
    s = int(sqrt(x) + 0.5)
    return s * s == x

类似的方法可用于丢番图方程。只需将给定 x 找到的 y 转换为 int (y = int(y + 0.5)),然后检查对给定 x 和 y 找到的丢番图方程是否为真

于 2014-04-01T12:54:44.447 回答