首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 2

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

Stack Overflow用户

发布于 2020-02-07 18:53:13

看一看

代码语言:javascript
运行
复制
(10 ** 100) == (10 ** 100 + 1)       # False
(10.0 ** 100) == (10.0 ** 100 + 1)   # True
(1e100) == (1e100 + 1)               # True

毫无疑问,Python的int没有最大值。但是,Python的float确实有精度限制。对于如此大的数字,超出了精度限制,并且对于Python,这些值现在是相同的。因此,它现在不考虑添加的1。希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60109329

复制
相关文章

相似问题

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