2014-10-18 47 views
0

double可以表示的最高數字是非常高的,我想。 雖然以下代碼會引發異常。這實際上是我的完整代碼。雙號返回stackoverflow

public class Summe { 
public static void main(String[] args) { 
    System.out.println(summe(20000)); 
    } 

public static double summe(double s) { 
    return s == 0 ? s : s + summe(s-1); 
    } 
} 

感謝您的回答。我的問題是:如何讓我的代碼工作?

+3

範圍double與此無關。您經常性地調用'summe' 20k次溢出堆棧。另外...你真正的問題是什麼? – luk32 2014-10-18 22:50:26

+0

您認爲'summe'在返回之前會被調用多少次? – 2014-10-18 22:50:36

+3

不要在雙打上使用平等檢查。 – 2014-10-18 22:51:31

回答

5

這裏的問題不是數量大小double可以容納 - 問題是堆棧的大小。在這裏,你有20K嵌套調用summe,這是方式太多堆棧來處理,因此,它溢出。如果sint而不是double,則會出現完全相同的問題。

+1

而他使用浮點精確比較的事實並不能幫助基本情況。 – chrylis 2014-10-18 22:51:55

+0

@chrylis:基本情況絕對好。 20000 - 1(等)將被計算而沒有任何精度損失。 – 2014-10-18 22:52:46

+1

@chrylis好點,儘管在這種情況下它巧合地起作用。 – biziclop 2014-10-18 22:52:57