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)。

所以,你的循環簡單地跑過去一遍又一遍......

和更「哲學」獎金回答:你爲什麼要問其他人?你可以通過實驗來學習編程。 你自己

換句話說:內心好奇地「嘗試並找出」是什麼幫助你成爲程序員。要求澄清是好的;但要求說明沒有你試試的是錯誤的做法。這樣做減慢降低你的學習!