有类似的问题:检查变量是否为整数,但我看不到我问题的答案。
我的意思是,我最近在与大量战斗,所以我的朋友建议我安装 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.0000000000000001
不能准确地表示为浮点数:
>>> format(4.0000000000000001, '.53f')
'4.00000000000000000000000000000000000000000000000000000'
所以这个数字确实是一个整数。在大多数系统上,您不能希望超过 15 位十进制数字:
>>> sys.float_info.dig
15
请参阅sys.float_info
结构,dig
属性表示:
浮点数中可以忠实表示的最大十进制数字数
如果需要更高的精度,请改用decimal
模块。
以下代码检查给定数字是否是整数的平方:
def is_square(x):
s = int(sqrt(x) + 0.5)
return s * s == x
类似的方法也可以用于丢番图方程。只需将给定 x 找到的 y 转换为 int (y = int(y + 0.5)),然后检查丢番图方程对于给定的 x 和 y 是否成立
你能不使用内置函数"type"吗?我运行了以下内容:
print type(4.0000000000000000000000000000000000000000000000001)
print type(4)
并得到结果:
<type 'float'>
<type 'int'>
然后,您可以使用find()方法检查结果中"int"和"float"的出现