C语言计算sin(x)函数优化:错误公式修正及循环优化
#include <stdio.h> #include <math.h>
int main()
{ int n,i,k; float x,re=0,m;
scanf("%f %d", &x,&n);
for (i=1;i<=n;i++)
{
m=pow(-1, i-1)*pow(i,2*i-1);
for (k=1;k<=(2*i-1);k++)
{
m=m/k;
}
re=re+m;
}
printf("%.8f",re);
return 0;
}
这个程序的问题在于计算sin(x)的方式不正确。
首先,sin(x)可以使用泰勒级数展开来计算,即:
sin(x) = x - (x^3 / 3!) + (x^5 / 5!) - (x^7 / 7!) + ...
但是在你的程序中,你使用了一个错误的公式来计算sin(x)。这个公式是错误的,因为你没有正确计算阶乘和幂函数。你使用的公式应该是:
m=pow(-1, i-1)pow(x,2i-1) / factorial(2*i-1)
其中,factorial(n)表示n的阶乘。
另外,你的程序中使用了两层循环来计算sin(x),这是不必要的。你只需要使用一层循环来计算泰勒级数中的每一项即可。
下面是修改后的程序:
#include <stdio.h>
int factorial(int n) { int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; }
int main() { int n; float x, re = 0;
scanf("%f %d", &x, &n);
for (int i = 0; i < n; i++) {
int power = 2 * i + 1;
float term = pow(-1, i) * pow(x, power) / factorial(power);
re += term;
}
printf("%.8f", re);
return 0;
}
这样修改后的程序可以正确计算sin(x)的值。
原文地址: https://www.cveoy.top/t/topic/o7XT 著作权归作者所有。请勿转载和采集!