自定义cosx函数计算结果错误求助(新手编程问题)
自定义cos1x函数的错误分析与修正
你的自定义cos1x函数存在三个核心错误,导致计算结果偏离标准库函数:
- 初始值错误:余弦函数的泰勒展开式第一项是
1,而非x,你当前代码将cosx初始化为x,直接导致结果整体偏移。 - 首项计算错误:
numerator初始值设为x不符合余弦泰勒展开的第二项(-x²/2!)的要求,应初始化为x*x/(2*1)。 - 变量j未递增:循环内没有对
j执行j+=2操作,导致后续项的分母始终为2*1,无法正确计算高阶项(如x⁴/4!需要分母4*3)。
修正后的cos1x函数代码
double cos1x(double x, int i) { int j = 2; double cosx, numerator, pr; // 余弦泰勒展开第一项为1 cosx = 1.0; // 初始化第一个需要参与加减的项:x²/(2!) numerator = x * x / (j * (j - 1)); do { pr = numerator; // 根据i的奇偶性决定加减符号 if(i % 2 == 1) cosx -= numerator; else cosx += numerator; i++; j += 2; // 递增j以计算下一个偶数阶的分母 // 推导下一项:前一项 * x² / (j*(j-1)) numerator = pr * x * x / (j * (j - 1)); } while(fabs(pr - numerator) > 0.000001); return cosx; }
修正后,自定义cos1x的计算结果会和标准库cos()函数的结果一致,精度满足你的循环终止条件(差值小于0.000001)。
内容的提问来源于stack exchange,提问作者Cheat3d
相关产品推荐
相关产品推荐

