float sinx(float x)
{
    static const float a[] = {-.1666666664,.0083333315,-.0001984090,.0000027526,-.0000000239};
    float xsq = x*x;
    float temp = x*(1 + a[0]*xsq + a[1]*xsq*xsq + a[2]* xsq*xsq*xsq+a[3]*xsq*xsq*xsq*xsq+ a[4]*xsq*xsq*xsq*xsq*xsq);
    return temp;
}

这些常数如何计算?如何使用此方法计算costan
我可以扩展它以获得更高的精度吗?我想我需要添加更多的常量?

c - 另一个快速三角函数-LMLPHP
相对于等度的泰勒多项式,上述“快速”正弦的误差图。

最佳答案

它们是-1/61/120-1/5040 ..等等。

或更确切地说:-1/3!,1/5!-1/7!1/9! ...等

看看syl x in here的taylor系列:

它下面有cos x:

对于cos x,如上图所示,常量为-1/2!, 1/4!, -1/6!, 1/8! ...

棕褐色x略有不同:

因此,针对cosx进行调整:

float cosx(float x)
{
    static const float a[] = {-.5, .0416666667,-.0013888889,.0000248016,-.0000002756};
    float xsq = x*x;
    float temp = (1 + a[0]*xsq + a[1]*xsq*xsq + a[2]* xsq*xsq*xsq+a[3]*xsq*xsq*xsq*xsq+ a[4]*xsq*xsq*xsq*xsq*xsq);
    return temp;
}

09-04 07:06