C语言级数展开实现exp(x)函数的代码正确性问询
关于级数展开计算exp(x)的代码检查建议
嘿,作为C语言新手完成这个作业超棒的!不过你贴的代码片段没写完(只到#include <m...),没法直接判断是否完全符合作业要求。不过我可以给你梳理下这个作业的核心要点,再提供一个符合要求的示例代码,你可以对照着自己的代码检查~
作业核心要求回顾
要通过级数展开计算exp(x),公式是:
exp(x) = 1 + x + x²/2! + x³/3! + ... + xⁿ/n! + ...
终止条件是求和增量的相对值小于指定精度e,也就是当前要加的那一项(增量)和当前已求和结果的比值的绝对值小于e,即 |term / sum| < e。
符合要求的示例代码
#include <stdio.h> #include <math.h> // 用于fabs()取绝对值 // 计算exp(x),精度为e double compute_exp(double x, double e) { double sum = 1.0; // 级数的初始项(n=0时的项:x^0/0! = 1) double term = 1.0; // 当前要累加的项,初始为第一项 int n = 0; do { n++; // 递推计算下一项:x^n/n! = (x^(n-1)/(n-1)!) * x/n,避免直接算阶乘溢出 term *= x / n; sum += term; // 判断增量的相对值是否小于精度e } while (fabs(term / sum) >= e); return sum; } int main() { double x, precision; printf("请输入x的值:"); scanf("%lf", &x); printf("请输入精度要求e:"); scanf("%lf", &precision); double result = compute_exp(x, precision); printf("按级数计算的exp(%.2lf) = %.8lf(精度:%.10lf)\n", x, result, precision); // 和标准库函数对比验证结果 printf("标准库exp()计算结果:%.8lf\n", exp(x)); return 0; }
你可以对照检查自己代码的几个关键点
- 递推计算项:有没有用递推方式生成每一项?如果直接计算
x^n和n!,当n较大时很容易溢出,递推term *= x/n是更高效且安全的方式 - 终止条件:是不是判断的增量的相对值?别搞成增量的绝对值哦!比如当x很大时,sum会变得很大,此时很小的绝对值项可能相对误差还没达标;反之x很小时,稍大的绝对值项可能相对误差已经满足要求
- 头文件与函数:有没有包含
math.h?因为要用到fabs()来取绝对值(如果你的代码里是#include <math.h>就对啦) - 输入输出:有没有实现接收x和e的输入,以及输出计算结果?作业要求输出结果,这部分不能少
如果把你的完整代码贴出来,我还能帮你更精准地检查哦!
内容的提问来源于stack exchange,提问作者Zepfyr
相关产品推荐
相关产品推荐

