Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双精度返回stackoverflow_Java_Function_Double_Stack Overflow - Fatal编程技术网

Java 双精度返回stackoverflow

Java 双精度返回stackoverflow,java,function,double,stack-overflow,Java,Function,Double,Stack Overflow,我想,double所能代表的最高数字是非常高的。 尽管下面的代码引发了一个异常。这实际上是我的全部代码 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); } } 谢谢你迄今为

我想,
double
所能代表的最高数字是非常高的。 尽管下面的代码引发了一个异常。这实际上是我的全部代码

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); 
  }
}

谢谢你迄今为止的回答。我的问题是:如何使我的代码工作

这里的问题不是一个
double
可以容纳的数字的大小-问题是堆栈的大小。在这里,您有20K个对
summe
的嵌套调用,这对堆栈来说太多了,无法处理,因此它会溢出。如果
s
是一个
int
而不是
double
,你会遇到完全相同的问题。

这里的问题不是一个
double
可以容纳的数字的大小-问题是堆栈的大小。在这里,您有20K个对
summe
的嵌套调用,这对堆栈来说太多了,无法处理,因此它会溢出。如果
s
int
而不是
double
,则会出现完全相同的问题。

您对
summe进行了太多递归调用


您应该仔细阅读此问题以获得完整的解释:

您对
summe
进行了太多递归调用



您应该仔细阅读此问题以获得完整的解释:

双精度范围与此无关。您反复调用
summe
20k次溢出堆栈。也。。。你真正的问题是什么?你认为在它返回之前会调用多少次
summe
?不要对double使用相等检查。我认为summe会被调用大约20000次。堆栈的极限在哪里?double的范围与此无关。您反复调用
summe
20k次溢出堆栈。也。。。你真正的问题是什么?你认为在它返回之前会调用多少次
summe
?不要对double使用相等检查。我认为summe会被调用大约20000次。堆栈的极限在哪里?事实上,他在浮点上使用精确比较对基本情况没有帮助。@chrylis:基本情况完全正确。20000-1(等)将在不损失任何精度的情况下进行计算。@chrylis这一点很好,即使在这种情况下,它同时工作。值得注意的是,在我的机器上,堆栈在6279次调用后会溢出。我的堆栈在5300次时溢出。5299仍然可以正常工作。这很奇怪,事实上,他对浮点使用精确比较对基本情况没有帮助。@chrylis:基本情况绝对好。20000-1(等)将在不损失任何精度的情况下进行计算。@chrylis这一点很好,即使在这种情况下,它同时工作。值得注意的是,在我的机器上,堆栈在6279次调用后会溢出。我的堆栈在5300次时溢出。5299仍然可以正常工作。真奇怪