当前位置: 首页 > news >正文

2025-03-05 学习记录--C/C++-PTA 习题5-7 使用函数求余弦函数的近似值

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

在这里插入图片描述
在这里插入图片描述

二、代码(C语言)⭐️

1.0版本 ❌

在这里插入图片描述

// 计算阶乘的函数
int getMultiply(int n) {
    int result = 1; // 初始化结果为 1
    for (int i = 1; i <= n; i++) {
        result *= i; // 累乘计算阶乘
    }
    return result; // 返回阶乘结果
}

// 计算泰勒级数中每一项的函数
double getItem(double x, int i) {
    // 返回当前项的值:x^i / i!
    return pow(x, i) / getMultiply(i);
}

// 计算余弦函数的泰勒级数展开
double funcos(double e, double x) {
    int i = 0;            // 当前项的指数,初始为 0
    int count = 0;        // 计数器,用于判断当前项是否需要加负号
    double item = 1;      // 当前项的值,初始为第一项 1(x^0 / 0! = 1)
    double result = 1;    // 最终结果,初始为第一项 1

    // 循环计算每一项,直到当前项的绝对值小于精度 e
    while (fabs(item) >= e) {
        count++;         // 计数器加 1
        i += 2;          // 指数增加 2,因为余弦级数的项是偶数幂
        item = getItem(x, i); // 计算当前项的值
        if (count % 2 != 0) {
            item *= (-1); // 如果计数器是奇数,当前项取负
        }
        result += item;  // 将当前项累加到结果中
    }

    return result; // 返回最终结果
}

在这里插入图片描述

2.0版本 ✅

在这里插入图片描述

1.0版本的代码通过计算阶乘来实现泰勒级数展开,但当 x 较大或 e 较小时,阶乘会迅速增长,导致数值溢出或精度丢失。为了避免这些问题,我们需要优化代码,避免直接计算阶乘。

优化思路: 👇🏻

  • 避免直接计算阶乘:使用递推公式计算每一项的值,而不是每次都重新计算阶乘。
    在这里插入图片描述
  • 减少重复计算:每次计算新项时,利用前一项的结果,避免重复计算。
double funcos(double e, double x) {
    double result = 1.0; // 最终结果,初始为第一项 1
    double item = 1.0;   // 当前项的值,初始为第一项 1
    int n = 2;           // 从第二项开始计算
    int sign = -1;       // 符号,初始为负

    // 循环计算每一项,直到当前项的绝对值小于精度 e
    while (fabs(item) >= e) {
        // 递推公式计算新项:item = item * (x^2) / (n * (n-1))
        item *= (x * x) / ((n - 1) * n);
        result += sign * item; // 根据符号累加到结果中
        sign *= -1;            // 符号取反
        n += 2;                // 更新 n,每次增加 2
    }

    return result;
}

在这里插入图片描述

注意 📢 】在 C 语言中,double 类型的初始值后加小数点(如 1.0)是为了明确表示这是一个浮点数常量,而不是整数常量。

  • 浮点数与整数的区别:
    • 整数常量:例如 1,默认是 int 类型。
    • 浮点数常量:例如 1.0,默认是 double 类型。
  • C 语言中,11.0 是不同的:
    • 1整数常量,类型为 int
    • 1.0浮点数常量,类型为 double

在这里插入图片描述

相关文章:

  • WindowManagerService之Window类型篇
  • 【资料分享】清华大学-187页:AIGC发展研究3.0版
  • Mysql 数据库免费使用
  • Java高频面试之集合-03
  • unity6 打包webgl注意事项
  • Vue3多页面跳转
  • 低代码+AI双重革命:传统软件开发的破局与重生
  • 四款GIS工具箱软件解析:满足企业多样化空间数据需求
  • SPI硬件设计及通信原理解析
  • FLEXOO的传感器技术:从材料选择到生产工艺的全方位创新
  • Cursor+Claude3.7实现从原型到app开发
  • 软考中级-数据库-3.3 数据结构-树
  • 网络安全数据富化 网络数据安全处理规范
  • Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略
  • Ubuntu系统安装Apache2方法
  • 2.数据结构-栈和队列
  • 蓝桥杯C组真题——巧克力
  • STM32之ADC
  • 【文生图】windows 部署stable-diffusion-webui
  • uniapp:小程序将base64图片字符串保存到手机相册
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 一个多月来上海交大接连“牵手”三区,在这些方面进行区校合作
  • 阿坝州委书记徐芝文已任四川省政府党组成员
  • GDP逼近五千亿,向海图强,对接京津,沧州剑指沿海经济强市
  • 【社论】个人破产探索,要守住“诚实而不幸”的底线
  • 王毅会见巴西外长维埃拉、总统首席特别顾问阿莫林