Ошибка округления при генерации идеальных квадратов питона
Я пытаюсь найти все значения 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)
, Есть ли способ решить проблему.