簡體   English   中英

double d = 1 / 0.0 vs double d = 1/0

[英]double d=1/0.0 vs double d=1/0

double d=1/0.0;
    System.out.println(d);

它打印Infinity ,但如果我們寫double d=1/0; 並打印它我們會得到這個異常: Exception in thread "main" java.lang.ArithmeticException: / by zero at D.main(D.java:3)為什么Java在一種情況下知道潛水為零是無窮大但是對於int 0它沒有定義? 在這兩種情況下,d都是雙倍的,在兩種情況下,結果都是無窮大。

浮點數據類型具有保留的特殊值以表示無窮大,而整數值則不保留。

在您的代碼中, 1/0是一個整數除法,當然會失敗。 但是, 1/0.0是浮點除法,因此導致Infinity

嚴格來說, 1.0/0.0根本不是無窮大,它是未定義的。

正如大衛在他的回答中所說的那樣,Floats有一種表達一個數字的方式,該數字不在它可以代表的最高數字和最低數字的范圍內。 這些值統稱為“非數字”或僅僅是NaN。 NaNs也可能來自真正無限的計算(例如lim x -> 0 ln 2 x ),值有限但溢出范圍浮點數可以表示(如10 100 100 ),以及未定義的值,如1/0 。

浮點數不能很清楚地區分未定義的值,溢出和無窮大; 該計算產生的比特組合取決於。 由於只是打印“NaN”或“非數字”對於不知道如何表示浮點值的人來說有點難以理解,因此格式化程序只打印“Infinity”或有時“-Infinity”,因為它提供相同的當您知道FP NaN的所有內容時,信息水平,並且當您不知道FP NaN時有一些意義。

整數沒有任何可與浮點NaN相媲美的東西。 因為當你執行1/0時,整數沒有合理的值,所以剩下的唯一選擇是引發異常。

用機器語言編寫的相同代碼可以調用與Java異常相當的中斷,也可以設置條件寄存器,這將是一個全局值,表示最后一次計算是除以零。 其中哪些可用的平台有點不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM