【发布时间】:2015-11-04 18:46:08
【问题描述】:
以下代码将如何表现,尤其是当双计数器达到其极限 ((2-2^-52)·2^1023) 时?
for (double i = 0; i < Double.POSITIVE_INFINITY; i++){
//do something
}
此代码会按预期运行(永远循环)还是在某些时候失败?为什么?
谢谢。
【问题讨论】:
-
我认为不能保证它会达到那个值。谁能说
i在达到该值之前不会下溢,因为双重算术的行为方式? -
为什么不试试呢?
-
@Makoto 这基本上就是我要问的。这里唯一有趣的情况是边缘情况。
-
我不确定我是否认为这本身很“有趣”...如果您想要无限循环,是否有充分的理由避免
while(true)? -
@Makoto 好吧,在我目前的情况下,它比较的变量可以是正常值,也可以是无穷大,以防您想永远运行循环。我认为这是实现这一目标的最简单最方便的方法。