首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未返回正确结果的项的求和

未返回正确结果的项的求和
EN

Stack Overflow用户
提问于 2019-10-12 21:25:33
回答 1查看 72关注 0票数 0

我有一个C语言的学术项目。其中一个练习是不使用数学计算cos(x)。为此,我们给出了一个用于cos(x)的级数(我猜想它是Taylor/Maclaurin)。对于标准输入,我们有x个角度和k个迭代。之和为(-1)^n*x^(2n)/(2n)的k-1!

我尝试过在循环中和周期之外进行更改,并尝试修改变量,但没有结果。

以下是代码(更新):

代码语言:javascript
运行
复制
#include <stdio.h>

int fat(int num) {
    int fat_num=1;
    for (int cnt=1; cnt<=num; cnt++) fat_num*=cnt;
    return fat_num;
}

float expn(int x, int y) {
    int x_y=x;
    for (int cnt=1; cnt<y; cnt++) x_y*=x;
    return x_y;
}

int main() {
    const float pi = 3.1415926;
    float x; 
    scanf("%f",&x);
    int k; 
    scanf("%d", &k);
    float cosx = 0;
    int n = 0;
    x *= pi/180;
    while (n <= k-1) {
        if (n%2 == 0) 
            cosx +=    expn(x,2*n)/fat(2*n);
        else 
            cosx += -1*expn(x,2*n)/fat(2*n);
        n++;
    }
    printf("%f", cosx);
    return 0; 
}

输入96的余弦值为0.54.,这是不正确的。

解决:错误在expn中,必须更新为浮动!

EN

回答 1

Stack Overflow用户

发布于 2019-10-12 21:47:02

两个问题

expn(x,2*n)/fat(2*n)使用整数除法。

float expn(int x, int y)使用int x。需要浮点x

代码语言:javascript
运行
复制
// int expn(int x, int y) {
float expn(float x, int y) {
  float x_y = 1;
  for (int cnt = 0; cnt < y; cnt++)
    x_y *= x;
  return x_y;
}

代码具有不同的效率。

一种不需要k的替代方案--一些思考的食物。

代码语言:javascript
运行
复制
static double my_cos_helper(double xx, double term, unsigned n) {
  if (term + 1.0 == 1.0) {
    return term;
  }
  return term - xx * my_cos_helper(xx, term / ((n + 1) * (n + 2)), n + 2);
}

double my_cos(double x) {
  return my_cos_helper(x * x, 1.0, 0);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58358670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档