【发布时间】:2018-03-14 20:24:25
【问题描述】:
我有这两个小程序:
1.
x = 1000
while (1000 * x != x):
x = 1000 * x
print("Done")
2.
x = 1000.0
while (1000.0 * x != x):
x = 1000.0 * x
print("Done")
我试图对这些程序的执行方式做出明智的猜测。我认为整数存储在 4 个字节(32 位)中,第一个程序将执行循环,直到 x 达到 2^31,然后可能会给出错误。而且我猜第二个循环会永远持续下去,因为浮点数可以存储比 int 更多的信息。
我的猜测不可能再错了。第一个似乎永远持续下去,而第二个存在循环并在 x 达到大约 10^308 后打印“完成”——这是 x 取值 inf(可能是无限的)的时候。
我不明白这是如何工作的,任何解释都将不胜感激。谢谢!
【问题讨论】:
-
整数在 python 中没有限制。一段时间后浮动(可能是您提到的 10^308 值)
-
Python 整数是对象。没有像其他语言中的原始类型。比你需要的大(或你的记忆可以存储的大)。把它们想象成 Java 的
BigInteger类。 -
sys.float_info将告诉您浮动是如何在您的特定平台上实现的。 -
切普纳说了什么。通常,Python 浮点数实现为 IEEE 754 binary64。
标签: python python-3.x while-loop floating-point