考拉兹猜想代码处理大数20^200时除法结果异常问题
问题原因及解决方案
核心原因:浮点数精度丢失
你遇到的问题确实是超大整数导致的精度丢失,问题出在代码里的除法操作:
numero = int(numero/2)
Python中/运算符会将整数转换为浮点数进行计算,但双精度浮点数(Python默认的float类型)的有效精度仅约15-17位。20^200是远超这个精度范围的超大整数,转换成浮点数时会丢失大量尾部精确信息,再转回整数自然就和预期结果不符。
修复方法:使用整数除法
将除法操作替换为Python的整数除法运算符//,它会直接对整数进行精确运算,不会触发浮点数转换:
VERDE = "\033[1;42m" ROJO = "\033[0;41m" numero = int(input("Que numero quieres meter: ")) print(len(str(numero))) print(numero) while numero != 2: if numero % 2 == 0: numero = numero // 2 # 替换为整数除法 print(ROJO, numero) else: numero = 3*numero +1 print(VERDE, numero)
另外,对于偶数除以2的操作,也可以用位运算numero >> 1,效果与整数除法一致,运算效率更高。
验证效果
修改后输入20^200的精确值,第一次迭代会正确输出你预期的结果:
80346902212949513777098104617058130126110149689139641765068800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
内容的提问来源于stack exchange,提问作者MixJ
相关产品推荐
相关产品推荐

