首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果整数没有最大值,为什么1e100+1 == 1e100?

如果整数没有最大值,为什么1e100+1 == 1e100?
EN

Stack Overflow用户
提问于 2020-02-07 16:03:10
回答 2查看 368关注 0票数 3

考虑下面的代码:

代码语言:javascript
运行
复制
def factorial(n):
    import math
    if not n >= 0:
        raise ValueError("n must be >= 0")
    if math.floor(n) != n:
        raise ValueError("n must be exact integer")
    if n+1 == n:  # catch a value like 1e300
        raise OverflowError("n too large")
    result = 1
    factor = 2
    while factor <= n:
        result *= factor
        factor += 1
    return result

我不明白为什么需要check n+1 == n

我认为Python中的整数没有最大值,那么为什么例如1e100+1 == 1e100

EN

Stack Overflow用户

发布于 2020-02-07 16:08:58

1e100不是int;它是float,所以它的精度是有限的,对于这么大的数字,精度太低,不能表示1e1001e100 + 1之间的区别。

代码语言:javascript
运行
复制
>>> type(1e100)
<class 'float'>

如果你想把这个数字作为int,你可以写成10 ** 100。然后,假设Python的int类型允许任意大的整数,您将获得预期的结果。

代码语言:javascript
运行
复制
>>> x = 10 ** 100
>>> y = 10 ** 100 + 1
>>> x
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> y
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
>>> x == y
False
票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60109329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档