gpt4 book ai didi

c - 项求和未返回正确结果

转载 作者:行者123 更新时间:2023-11-30 14:35:50 25 4
gpt4 key购买 nike

我有一个 C 语言的学术项目。其中一项练习是在不使用 math.h 的情况下计算 cos(x)。为此,我们给出了 cos(x) 的级数(我认为它是泰勒/麦克劳林级数)。对于标准输入,我们有 x 角度和 k 次迭代。总和是从 n=0 到 k-1 ((-1)^n*x^(2n))/(2n)!

我尝试过改变循环和摆弄变量,但没有成功。

这是代码(已更新):

#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 中,必须更新为 float !

最佳答案

2个问题

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

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

// 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的替代方案 - 一些值得深思的东西。

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);
}

关于c - 项求和未返回正确结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com