有类似的问题: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,取平方根,然后它必须是整数以满足等式。这就是我需要它的原因。
答案 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'的出现位置