区间[0.1,1.5]内无穷级数求和代码错误排查求助
级数求和代码错误排查与修正
错误分析
你的代码核心问题出在项的递推逻辑,尤其是分母的计算:
- 原代码中用
i*(i-1)作为新项的分母,但级数每一项的分母是累积的双阶乘(2! → 4! = 2!×4×3 → 6! =4!×6×5…),直接用当前i的乘积会导致分母被严重低估,计算结果偏离正确值。 - 单独维护分子变量
a但未同步维护分母的阶乘累积,导致累加项a/(i*(i-1))完全不符合级数的项定义。
修正后的代码
Scanner sc = new Scanner(System.in); System.out.print("x="); double x = sc.nextDouble(); sc.close(); if (x < 0.1 || x > 1.5) { System.out.println("error"); return; } // 预计算4x²,避免重复计算 double fourXSq = 4 * x * x; // 初始化级数第一项:-(2x)²/2! = -4x²/2 double term = -fourXSq / 2; double s = term; // current表示下一项分母需要乘的第一个数(从4开始,对应4!的4) int current = 4; // 循环直到项的绝对值小于精度阈值0.001 while (Math.abs(term) > 0.001) { // 递推下一项:前一项 × (-4x²) / (current × (current-1)) term = term * (-fourXSq) / (current * (current - 1)); s += term; current += 2; } System.out.printf("function=%.4f%n", 2 * (Math.cos(x) * Math.cos(x) - 1)); System.out.printf("summa=%.4f", s);
修正说明
- 直接递推每一项的值
term,基于前一项计算,避免拆分分子分母导致的逻辑混乱。 - 预计算
4x²(即(2x)²),提升计算效率。 - 分母通过
current*(current-1)累积计算,每次循环current加2,对应阶乘的后续两个乘数(4×3、6×5…),完全符合级数项的分母要求。
内容的提问来源于stack exchange,提问作者Edmund
相关产品推荐
相关产品推荐

