用泰勒系列计算棕褐色

时间:2014-11-23 13:11:55

标签: c

我正在尝试编写以弧度计算角度tan的函数。我必须使用泰勒系列使用迭代来做到这一点,但仅限于前13位提名者和分母。这是公式:http://upload.wikimedia.org/math/e/b/1/eb1675c46a1350a0983e57abf736b78c.png。在最后一次迭代之后,角度1.024的正确结果应该是大约1.642..etc。我的大概是2.528551e + 000,这是完全错误的。 我真的很感谢所有想法我做错了什么。

这是我的功能:

double ttan(double x)
{
double nominator[13] = {1,1,2,17,62,1382,21844,929569,6404582,443861162,18888466084,113927491862,58870668456604};//first 13 nominators
double *n = nominator;
double denominator[13] = {1,3,15,315,2835,155925,6081075,638512875,10854718875,1856156927625,194896477400625,49308808782358125,3698160658676859375};//first 13 denominators
double *d = denominator;

int i=0;
int j=0;
double t;
double s;
double xx=x*x;
s=t=x;


for(int test=0;test<13;test++)
{
t=t* xx* *(n+i)/ *(d+j);
s+=t;
printf("%e\n",s);
i++;
j++;
}


int main(int argc, char **argv)
{
if (argc<2)
return 1;
char *endptr;
double p = strtod(argv[1], &endptr);
ttan(p);
return 0;
}

1 个答案:

答案 0 :(得分:1)

我已经简化了迭代循环,现在它可以正常工作。我删除了不必要的数组指针,以及重复循环变量测试的两个整数ij。但最重要的是,我将数组总和s初始化为0而不是x,因为第一个术语值(x)在第一次迭代中得到了处理,因为两个数组的值都是1作为它们的第一个元素。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double ttan(double x)
{
    double nominator[13] = {1,1,2,17,62,1382,21844,929569,  
            6404582,443861162,18888466084,
            113927491862,58870668456604};//first 13 nominators
    double denominator[13] = {1,3,15,315,2835,155925,6081075,
            638512875,10854718875,1856156927625,194896477400625,
            49308808782358125,3698160658676859375};//first 13 denominators
    int test;
    double s = 0, xx=x*x;

    for(test=0;test<13;test++)
    {
        s += x * nominator[test] / denominator[test];
        printf("%e\n",s);
        x *= xx;
    }
    return s;
}

int main(int argc, char **argv)
{
    char *endptr;
    double p;
    if (argc<2)
       return 1;
    p = strtod(argv[1], &endptr);
    ttan(p);
    printf("\nMath library: tan(%f) = %f\n", p, tan(p));
    return 0;

}

我的程序输出为1.024

1.024000e+000
1.381914e+000
1.532034e+000
1.595748e+000
1.622822e+000
1.634327e+000
1.639216e+000
1.641294e+000
1.642177e+000
1.642552e+000
1.642712e+000
1.642716e+000
1.642744e+000

Math library: tan(1.024000) = 1.642829