首页 > 解决方案 > 为什么这个反转数字的代码会给出“inf”作为输出?

问题描述

def reverse(num):
    b = 0
    while num > 0:
        b = b * 10 + num % 10
        num = num / 10
    return b

n = int(input("num: "))
print(reverse(n))

当一个数字作为参数传递时,为什么输出为“inf”?

标签: pythonpython-3.x

解决方案


首先看看你可以在浮点变量中“存储”的最大数量是多少。

>>> sys.float_info.max
1.7976931348623157e+308

当你在 while 循环中迭代时,你增加b和减少num. b越来越大(见底部,b循环打印)。同时也在num下降,并在某个点达到 0,这导致 while 循环(num 不 > 0)中断。

num is2
b=2, num=0.2
b=20.2, num=0.02
b=202.02, num=0.002
...
b=2.0202020202020194e+306, num=2.000000000000004e-307
b=2.0202020202020194e+307, num=2.0000000000000043e-308
b=inf, num=2.000000000000004e-309
b=inf, num=2e-310
...
b=inf, num=2e-322
b=inf, num=2e-323
b=inf, num=0.0

当它达到最大浮点值时 -1.7976931348623157e+308它变成inf. 之后,将发生更多的 while 循环迭代。当num变小(< 2e-323)以至于 Python 解释为 0 时,循环将结束,因为不满足 while 条件。


推荐阅读