首页 / JAVA / 为什么这会归还无限? (JAVA)
为什么这会归还无限? (JAVA)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么这会归还无限? (JAVA),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含843字,纯文字阅读大概需要2分钟。
内容图文
我试图找到1/1 1/4 1/9 1/16 1/25的结果……
这些是我写的给出结果Infinity的行:
public class BaselProblem {
public static void main(String[] args) {
int testLimit = 100000;
double sum = 0;
for (int i = 1; i<testLimit; i++)
{
sum = sum + 1.0/(i*i);
}
System.out.println(sum);
}
}
将1.0 /(i * i)更改为1 /(1.0 * i * i)可得到正确的结果1.6449240667982423.为什么只有第二种形式起作用但不起作用?
另外,因为(i * i)> 1,那么1.0 /(i * i)应该是< 1,那么它如何导致无限?
解决方法:
因为你的testLimit以及你的i被定义为int.由于你将表达式i * i放在括号中,它将首先计算,并将尝试找到两个整数的倍数 – 这将很快达到溢出并重置为零.
具体来说,当我达到2¹?时,i * i将是2³².这意味着1后跟32个二进制零,其中只保留32个零,这意味着零. (谢谢@templatetypedef).
因此,您将有一个除以零的数字,即无穷大.
更改你的循环声明,以便我是双倍.或者乘以i * i左边的double(1.0).这将导致表达式在乘以第二个i之前变为double.
内容总结
以上是互联网集市为您收集整理的为什么这会归还无限? (JAVA)全部内容,希望文章能够帮你解决为什么这会归还无限? (JAVA)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。