2017-06-29 92 views
-1

我并想知道如果Java的“Double.POSITIVE_INFINITY”是无穷的真实表示,如果没有,将“我是从这个代码:Double.POSITIVE_INFINITY是无穷的真实表示吗?

public class Infinity { 
private static int i; 

public static void main(String[] args) { 
    double inf = Double.POSITIVE_INFINITY; 
    for (i = 0; i < inf; i++) { 
     } 
    System.out.println(i); 
    } 
} 

曾经被打印?

+3

对于无限的“真实”表示,你是什么意思?该值被定义为'double'类型的无穷大表示。但是你不能在int中存储无穷大;没有值表示int类型的无穷大。 – Jesper

+0

相关:https://stackoverflow.com/questions/33529676/using-double-positive-infinity-in-for-loop-java?rq=1 –

回答

1

即使你改变你的代码

double inf = Double.POSITIVE_INFINITY; 
for (double i = 0.0; i < inf; i++) { 
} 
System.out.println(i); 

循环将永远不会结束,因为i不可能变得比Double.MAX_VALUE大,Double.MAX_VALUE仍比Double.POSITIVE_INFINITY小。

可以通过运行这个片段证明这一点:

if (Double.MAX_VALUE > Double.POSITIVE_INFINITY) { 
    System.out.println ("max is larger than infinity"); 
} else { 
    System.out.println ("nope"); 
} 

,它将打印“不”,因为Double.POSITIVE_INFINITY比任何可能的双重价值更大。顺便说一句,编译器将System.out.println ("max is larger than infinity");语句标记为无效代码。

我想这意味着你可以说'Double.POSITIVE_INFINITY' is a true representation of infinity

BTW,的POSITIVE_INFINITY

public static final double POSITIVE_INFINITY = 1.0/0.0; 

因此,由于1.0/0.0实际上是正无穷大,你可以说这是一个无穷大的真实再现。

4

i < inf将始终为true;即i永远不会达到Double.POSITIVE_INFINITY

这是因为int一旦达到2,147,483,647就会溢出负值。

请注意,即使idouble类型,您仍然不会达到POSITIVE_INFINITY:这是因为在2的第53次方后,某些单个增量是空操作。

+2

没有未定义的行为:它会溢出到“-2,147,483,648”和然后重新开始。 –

+0

@MarkRotteveel:我的,今天我怎么了?我确信这是C++。正准备着手IEEE754限制等 – Bathsheba

+0

我猜测一样多:) –

1

int有4个字节。它的范围从-2,147,483,648到2,147,483,647。 (例如参见here)。

这是方式小于Double.POSITIVE_INFINITY。 (参见here)。

所以,你的循环简单地跑过去一遍又一遍......

和更“哲学”奖金回答:你为什么要问其他人?你可以通过实验来学习编程。 你自己

换句话说:内心好奇地“尝试并找出”是什么帮助你成为程序员。要求澄清是好的;但要求说明没有你试试的是错误的做法。这样做减慢降低你的学习!