有这个数学计算的更好的解决方案?(JAVA)

bla*_*ces 2 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; 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);
Run Code Online (Sandbox Code Playgroud)

我检查的程序j=2j=3,它给了正确的结果(1.0左右).所以我认为它运作良好.但是,当我尝试时j<=624,我的结果是:24.000000000000014

1.如何在我的程序中将结果设为24.0而不是24.000000000014?

2.这个数学公式有更好的解决方案/源代码吗?这个公式的英文名称是什么?

Jas*_*n S 6

欢迎来到浮点计算的世界.除非你能够使用更少的术语或更快收敛的方式使用代数重写你的公式,否则你运气不好 - 浮点计算永远不会精确并累积错误,正如你从你的例子中看到的那样.

(特定的提示在这种情况下:你的条件的形式为X的ķ.= 1 /(SQRT(K)+ SQRT(K + 1))尝试乘以SQRT分子和分母(K + 1) - SQRT(k)的)

  • 我明白.并且谢谢你增加分子和分母 (3认同)