如何编写一个程序来估计正弦函数的泰勒级数用C?

问题描述 投票:0回答:3

我是新来编程,我无法弄清楚什么是错我的代码。如果有任何的方式,有人可以帮助我了解什么是错的我的节目,我真的很感激它。我已经努力在这个问题上两个小时,我知道我就比困难它需要。这是我的新代码。我的新的输出是0.000000476837158。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main() {
         double x, sinx, z, factorial, term;
         int j, n, i;
         x=0.5;
         n=10;
         i=0;
         z=sin(0.5);
         for(int i=0; i<=n; i++){
                      factorial = 1;
                      for(j=2*i +1; j<=i; j++)
                      {
                               factorial = factorial * j;
                               }
                      term=(pow(-1,i)*pow(x,2*i+1))/(factorial);
                      sinx=term++;
                      i=i++;
                                   }
                      printf("sin(0.5) is approximately %.15lf\n", sinx);
                      printf("sin(0.5) by default function is %.15lf\n", z);
                      system("pause");
                      return 0;
                      }
c trigonometry taylor-series
3个回答
0
投票

你的第i项是-1i X2I + 1 / I,生长快。你应该已经打印出来的第一对夫妇的术语来发现问题。

(还有其他的问题太像i=i++;,但他们可以等待。)


0
投票

这句话的第一次出现

     sinx=sinx+term;

将你的问题之一,因为当你第一次使用它们既不在赋值的右手边的变量已经被初始化。同一线路的后续执行,内环路,将传播整个计算sinx的垃圾值。

我希望有其他的问题太多,但并没有检查代码密切。


0
投票

这个循环是没有意义的。

 for(j=0; j<=i; j++){
     factorial=2*j+1;
     }

它没有做任何事情比不同

factorial = 2*i+1;

如果你想计算阶乘(如i!)比我会做以下

// initialize `factorial`
factorial = 1;
for(j=1; j<=i; j++)
{
    //multiply `factorial` by `j`.  
    factorial = factorial * j;
}

您继续使用sinxterm,但他们从来没有初始化。这意味着,他们将含有垃圾值。


qazxsw自身的POI的增量,你不应该使用任何额外的赋值运算符。

更改

i++

简单地

i=i++;

或者更好的是,使用i++; 循环,而不是一个for循环

while
© www.soinside.com 2019 - 2024. All rights reserved.