You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于泰勒级数的C语言余弦值计算代码问题求助

问题分析与修正代码

你的代码存在多个关键错误,导致计算结果完全偏离预期,下面逐个说明并给出修正方案:

核心错误点

  • 泰勒级数逻辑完全混乱:meincosinus函数里你把输入的角度值x直接覆盖成了阶乘结果fac(n),彻底丢失了公式里的角度变量,完全不符合余弦泰勒级数的定义。
  • 循环条件不合理:用n <= x作为循环终止条件毫无依据——泰勒级数的迭代次数和输入角度值无关,应该用固定的足够多次数(比如15次),或者直到计算项的绝对值小于极小值(如1e-10)来保证精度。
  • 阶乘溢出问题:fac函数用int类型存储结果,当n≥13时,阶乘结果会超出int的最大值导致溢出,计算直接出错,必须改用double类型计算阶乘。
  • 角度单位不匹配:计算器的cos(50)是50度的余弦值,但泰勒级数计算的是弧度的余弦值,必须先把输入角度转换成弧度(弧度 = 角度 × π / 180)。
  • main函数笔误:你调用sin(x)却打印成cos的结果,属于低级错误。

修正后的代码

#include <stdio.h>
#include <math.h> 

// 用double计算阶乘,避免数值溢出
double fac(int n) {
    double prod = 1.0; 
    for (int i = 1; i <= n; i++) { 
        prod *= i; 
    } 
    return prod;
}

// 基础版:直接按泰勒级数公式计算(输入为弧度)
double meincosinus(double x_rad) {
    double erg = 0.0;
    // 迭代15次足够收敛到高精度
    for (int n = 0; n <= 14; n++) {
        // 余弦泰勒级数公式:Σ[(-1)^n * x^(2n) / (2n)!]
        double term = pow(-1, n) * pow(x_rad, 2 * n) / fac(2 * n);
        erg += term;
    }
    return erg;
}

// 高效版:递推计算每一项,避免重复计算阶乘和高次幂
double meincosinus_fast(double x_rad) {
    double erg = 1.0; // n=0时的初始项
    double term = 1.0;
    for (int n = 1; n <= 14; n++) {
        // 递推公式:第n项 = 第n-1项 * (-x²)/(2n*(2n-1))
        term *= (-x_rad * x_rad) / (2 * n * (2 * n - 1));
        erg += term;
    }
    return erg;
}

int main() {
    double x_deg;
    printf("请输入角度值:\n");
    scanf("%lf", &x_deg);
    
    // 角度转弧度,匹配泰勒级数的计算要求
    double x_rad = x_deg * M_PI / 180.0;
    
    double y1 = meincosinus(x_rad);
    printf("自定义cos(%.2lf°)=%.10lf\n", x_deg, y1);
    
    double y2 = meincosinus_fast(x_rad);
    printf("快速版自定义cos(%.2lf°)=%.10lf\n", x_deg, y2);
    
    // 用math.h的cos函数做结果对比(注意传入弧度值)
    double y3 = cos(x_rad);
    printf("math.h的cos(%.2lf°)=%.10lf\n", x_deg, y3);
    
    // 暂停程序查看结果
    printf("输入任意整数退出:\n");
    int i;
    scanf("%d", &i);
    return 0;
}

补充说明

  1. 新增角度转弧度步骤后,输入50度时,计算结果会和计算器的0.6427...完全匹配。
  2. 提供两个版本的计算函数:基础版直观对应泰勒级数公式,高效版通过递推避免重复计算,性能更好且彻底规避阶乘溢出问题。
  3. 循环次数设为15次,足以让结果收敛到高精度(误差小于1e-10)。

内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:00:53