生成完美正方形python的舍入误差

时间:2015-08-13 09:39:53

标签: python floating-point-precision perfect-square

我试图找到n的所有值,使得(2 ^ n-7)是一个完美的正方形。我的代码是:

import math

def isperfect(n):
      return math.sqrt(n) % 1 == 0


print [i for i in range(3,200) if isperfect(2**(i)-7)]

这是我得到的:

[3, 4, 5, 7, 15, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198]

我知道它是正确的,直到n = 15,但之后它完全错了,因为下一个n应该是238.到目前为止我理解的是问题是由于大小数点的舍入误差sqrt(n)。有没有办法解决问题。

0 个答案:

没有答案