有没有办法增加pythons的无穷大限制?

我正在做https://projecteuler.net/problem=57,在那里我得到分子和分母,如果分子比分母长,我会在总数中加一。

然而,在某一时刻(n=805 以上),分子和分母变得如此之大,以至于 python 将它们转换为无穷大。如果你想测试它,这是我的代码。

def sqrt_2(max_iteration, total = 0, previous_numerator = 1, previous_denominator = 2, iteration = 1):
    
    numerator_test = previous_numerator + previous_denominator
    denominator_test = previous_denominator
    print(numerator_test, denominator_test, numerator_test / denominator_test)
    if len(str(numerator_test)) > len(str(denominator_test)):
        total += 1
    
    if iteration == max_iteration:
        return total
    
    next_value_numerator = 1 * previous_denominator
    next_value_denominator = int(( 2 + (previous_numerator / previous_denominator) ) * previous_denominator)
    
    return sqrt_2(max_iteration, total, next_value_numerator, next_value_denominator, iteration + 1)
            


print("n", sqrt_2(806))

有没有办法增加这个无穷大的限制?806真的很接近1000。如果它与IDE / Python版本有什么关系,我使用的是Spyder 5.0和python 3.7。

提前致谢!

回答

您不能在此处使用浮点运算。浮点支持有限数量的有效数字(17 或一些)。当代码对数字进行除法时,结果是一个浮点数,很快(迭代 25 或类似的)将没有足够的精度将其表示为float

实际发生的是你的数字变得如此之大,float甚至不能代表它们的指数,并且溢出到无穷大。但这无关紧要,因为数字在溢出之前很久就错了。

您需要的是一种仅使用整数运算(如加法和乘法)而不是除法来计算分子和分母的算法。


以上是有没有办法增加pythons的无穷大限制?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>