Java 有更好的数学计算解决方案吗?(爪哇)

Java 有更好的数学计算解决方案吗?(爪哇),java,math,Java,Math,我有一个Java程序,我必须做作业,下面是我必须使用的公式:。对不起,我不是以英语为母语的人,我不知道这个公式的名字 我编写了以下解决方案: /* Check: * if: j<=3: * * 1/1+sqrt2=0,414213562 * 1/sqrt2+sqrt3=0,317837245 * 1/sqrt3+sqrt4=0,267949192 * res= 0,9999999 =~1.0 */ double sum = 0; for (int j = 2;

我有一个Java程序,我必须做作业,下面是我必须使用的公式:。对不起,我不是以英语为母语的人,我不知道这个公式的名字

我编写了以下解决方案:

/* Check: 
 * if: j<=3:
 * 
 * 1/1+sqrt2=0,414213562
 * 1/sqrt2+sqrt3=0,317837245
 * 1/sqrt3+sqrt4=0,267949192
 *      res= 0,9999999 =~1.0
 */
double sum = 0;
for (int j = 2; j <= 624; j++) 
{
    sum += 1 / ((Math.sqrt(j) + Math.sqrt(j + 1)));
}
double res = 0;
res = (double)1 / (1 + Math.sqrt(2)) + sum;

System.out.println("Result is: "  + res);
/*检查:

*if:j欢迎来到浮点计算的世界。除非你能用代数重写你的公式,用更少的项或者更快的收敛,否则你就不走运了——从你的例子中可以看出,浮点计算从来都不是精确的并且会累积错误


(本例中有一个具体提示:您的术语的形式为Xk=1/(sqrt(k)+sqrt(k+1))。请尝试将分子和分母乘以sqrt(k+1)-sqrt(k))

第一个问题:使用Math.round(double)函数返回双精度中最接近的整数

您还可以使用Math.floor(double)获取小于double的最接近整数
或者math.ceil(double),它返回比double更接近的整数。

对于java计算,必须使用BigDecimal。

重点不是返回整数,而是返回尽可能接近预期的结果。如果将系列运行到623而不是624,则不会得到整数结果。+1用于将其列为家庭作业,但将来请使用家庭作业标记。@blaces:您的链接给了我安全错误:“服务器的证书与其主机名不匹配。”您的计算机管理员需要解决此问题。我理解。感谢您将分子和分母相乘-1:BigDecimal没有内置的sqrt()操作;它应该如何知道要使用多少个小数位?请参阅这篇关于BigDecimal的srt帖子:;在所有情况下,在循环中使用double,即使是加法也会导致精度损失,但bigdecimal的情况并非如此。我不得不不同意您的回复意见。除非BigDecimal确实可以处理无限精度,否则您就错了。如果是这样,请将sqrt(2)打印为一个大十进制,并让我知道您的计算机打印它需要多长时间:P.@rmk:嗯?上一次我检查过,平方根通常会产生无理数,当你用BigDecimal来近似它们时(不可能用有限的小数给出无理数的精确表示),即使精度损失减少了,你仍然有一个误差源。如果你能编辑你的帖子,就如何合理地使用BigDecimal获得有用的建议,我将删除我的反对票。不可能用double或BigDecimal精确地表示无理数,但BigDecimal的精度损失较小,这可能是有用的。我认为最好的解决办法是用代数重写公式,正如另一个答案中所建议的,但是,除此之外,BigDecimal有帮助。