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仍然可以正常工作。真奇怪