我试图找到任何非平方数的连分数(直到它重复)。你知道吗
例如:输入:23 = [4; 1,3,1,8]
我的代码适用于许多数字(尽管它非常笨拙)。 它适用于23个输出:
[4, 1, 3, 1, 8, 1, 3, 1]
(忽略多余的1,3,1)
但当我输入61时,它就不会停止。。。这里有一行输出:
[7, 1, 4, 3, 1, 2, 2, 1, 3, 4, 1, 14, 1, 4, 3, 1, 2, 2, 1, 4, 5, 1, 6900]
14之后,它不会像应该的那样重复(4、5而不是3、4和6900不合适)
我是一个有点noob当谈到编码,所以它会有很大帮助,如果有人能告诉我为什么它不工作,我应该如何修复它
这是我的密码:
def find_fractions(n):
d = math.sqrt(n)
x = 0
y = 0
safeint = 0
safe = True
a = ["a", "b", "c", "d"]
while a[1:int(len(a) / 2)] != a[int(len(a) / 2) + 1:]:
a.append(math.floor(d))
d = 1 / (d - math.floor(d))
print(a)
safeint += 1
if safeint > 4 and safe:
del a[0]
del a[0]
del a[0]
del a[0]
safe = False
print(a)
find_fractions(23)
编辑:不是63,意思是61
你得到的是一个精度误差。这些计算非常精确,这意味着它们需要许多二进制数字来表示。您的计算机使用的有限浮点精度有时不足以精确地执行此操作。在这条线上的某个地方,你的机器如何处理这种不准确的行为打破了你的计算。我使用decimal模块来处理这个大的精度。你知道吗
这给了我输出
[7, 1, 4, 3, 1, 2, 2, 1, 3, 4, 1, 14, 1, 4, 3, 1, 2, 2, 1, 3, 4, 1]
输入61。Decimal类的默认位数是28。如果需要,可以像这样设置Decimal对象以使用更高的精度getcontext().prec = x
这里有一个Wikipedia page来检查浮点精度。如果你愿意,我很乐意给你一些建议,让你的代码更干净。你知道吗
相关问题 更多 >
编程相关推荐