有没有办法增加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甚至不能代表它们的指数,并且溢出到无穷大。但这无关紧要,因为数字在溢出之前很久就错了。
您需要的是一种仅使用整数运算(如加法和乘法)而不是除法来计算分子和分母的算法。