Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Maclaurin级数近似计算cos(x)_C - Fatal编程技术网

用Maclaurin级数近似计算cos(x)

用Maclaurin级数近似计算cos(x),c,C,所以,我试图创建一个程序,通过使用泰勒近似来计算cos(x) 程序非常简单:用户输入一个参数x(x是弧度的角度)和一个浮点ε,这是cos(x)值的精度 基本上,程序必须做的唯一一件事就是计算这个总和: x^0/0!-x^2/2!+x^4/4!-x^6!+x^8/8!-。。。,直到项小于ε,也就是cos(x)的值,它将在我们的精度范围内 下面是代码: #include <stdio.h> /* Calculates cos(x) by using a Taylor approxima

所以,我试图创建一个程序,通过使用泰勒近似来计算cos(x)

程序非常简单:用户输入一个参数x(x是弧度的角度)和一个浮点ε,这是cos(x)值的精度

基本上,程序必须做的唯一一件事就是计算这个总和: x^0/0!-x^2/2!+x^4/4!-x^6!+x^8/8!-。。。,直到项小于ε,也就是cos(x)的值,它将在我们的精度范围内

下面是代码:

#include <stdio.h>

/* Calculates cos(x) by using a Taylor approximation:
   cos(x) = x^0/(0!) - x^2/(2!) + x^4/(4!) - x^6/(6!) + x^8/(8!) - ... */

int main(void)
{    
    int   k;         // dummy variable k

    float x,         // parameter of cos(x), in radians
          epsilon;   // precision of cos(x) (cos = sum ± epsilon)
          sum,       // sum of the terms of the polynomial series
          term;      // variable that stores each term of the summation

    scanf("%f %f", &x, &epsilon);

    sum = term = 1, k = 0;

    while (term >= epsilon && -term <= epsilon) 
    // while abs(term) is smaller than epsilon
    {
        k += 2;
        term *= -(x*x)/(k*(k-1));
        sum += term;
    }

    printf("cos(%f) = %f\n", x, sum);

    return 0;
}
#包括
/*使用泰勒近似计算cos(x):
cos(x)=x^0/(0!)-x^2/(2!)+x^4/(4!)-x^6/(6!)+x^8/(8!)-*/
内部主(空)
{    
int k;//伪变量k
float x,//cos(x)的参数,以弧度为单位
ε;//cos(x)的精度(cos=总和±ε)
sum,//多项式级数项的和
term;//存储求和的每个项的变量
scanf(“%f%f”、&x、&epsilon);
总和=项=1,k=0;

while(term>=epsilon&&-term错误在于while循环的条件:

while (term >= epsilon && -term <= epsilon)
您应该只使用标准浮点abs函数,
fabs
,因为它使代码的功能更加明显:

while (fabs(term) >= epsilon)

应用该更改并编译您的程序后,我使用它来计算cos(3.141593)=-1.000004,这是正确的。

只是添加到Charliehorse55的答案中

通常使用简单的三角学进行参数约简

cos(x + y) = cos(x)cos(y) - sin(x)sin(y)
sin(x + y) = cos(x)sin(y) + sin(x)cos(y)

将参数缩减为[0..SmallAngle]范围,然后才计算泰勒展开。

并与数学库链接。@ring0-遗憾的是,近似算法有时会给出一些愚蠢的结果。如果超出-1..+1范围的估计值是不可容忍的,您可以随时添加检查以强制执行这些限制。谢谢,这非常有用!=D我使用的部分真是太愚蠢了“&&”而不是“| |”,是的,我本可以使用数学库中的fabs,但我觉得这有点奇怪(我的意思是,cos(x)函数也在数学库中!)。无论如何,再次感谢您的帮助!
cos(x + y) = cos(x)cos(y) - sin(x)sin(y)
sin(x + y) = cos(x)sin(y) + sin(x)cos(y)