Python实现Collatz算法处理大整数时步数计算错误如何解决
Collatz步数计算错误问题修复方案
问题根源
- 错误使用
/浮点除法:Python中/运算会返回浮点数类型,双精度浮点数仅能精确表示小于2^53(约900万亿)的整数,你输入的931386509544713451远大于该阈值,运算过程中会出现精度丢失,导致后续数值计算全部错误。 - 额外的类型转换无意义:Python原生int类型支持任意精度的大整数,不需要用ctypes限定数值类型,ctypes的
ulonglong最大仅支持到2^64-1,Collatz运算过程中数值还会继续增大,依然会出现溢出问题。
修复方案
仅需将浮点除法替换为整数除法//,全程保持变量为整数类型即可,同时可删掉冗余的math.floor操作:
number = 931386509544713451 def collatz_algorithm(n): x = n step_count = 0 while x != 1: if x % 2 == 0: x = x // 2 else: x = 3 * x + 1 step_count += 1 print(f"\nNumber of steps for {n}: {step_count}") collatz_algorithm(number)
运行上述代码即可得到和参考值一致的步数结果。
内容的提问来源于stack exchange,提问作者Elmatador DeAngel
相关产品推荐
相关产品推荐

