如何检查数字是否为整数,具有良好的精度?

时间:2014-04-01 12:49:26

标签: python integer diophantine

有类似的问题:Checking whether a variable is an integer or not, 但是我没有回答我的问题。

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

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

我想写一个简单的循环来找到diophantine-equation的一些解决方案,我需要从非常大的数字取平方根并检查它是否是整数,但现在我处于紧张状态。有人可以帮助我,或者给我一个如何获得更好精度的建议吗?

示例:

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

3 个答案:

答案 0 :(得分:6)

4.0000000000000001无法准确表示为float:

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

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

>>> sys.float_info.dig
15

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

  

可以在浮点数中忠实表示的最大小数位数

如果您需要更高的精确度,请使用decimal module

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

你能否使用内置功能'type'?我运行了以下内容:

print type(4.0000000000000000000000000000000000000000000000001)
print type(4)

得到了结果:

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

然后,您可以使用find()方法

检查结果中'int'和'float'的出现位置