C 中的余弦功能,没有任何数学功能

cosine function in c++ without any math function

本文关键字:功能 任何数 余弦      更新时间:2023-10-16

我正在使用代码来计算十进制数字的余弦(弧度(。问题在于,只有在我放置少量数字时才能得到正确的答案。它使用泰勒系列。

double coseno(float x)
{
    double t = x;
    double cos= t;
    for ( int a=1; a<20.0; ++a)
    {
        double mult = -x*x/((2*a)*(2*a-1));
        t *= mult;
        cos += t;
    }
    return cos;
}
  1. 你犯了一个错误。开始时,您应该将t设置为1(不是x(;
  2. 您忘记了术语。如果数字太大或太小,您可以简单地使用一些hiles。
    最终它可以很好地工作:
#include <math.h> //for M_PI
double coseno(float x){
    while(x<0) x+=2*M_PI;
    while(x>2*M_PI) x-=2*M_PI;
    double t = 1;
    double cos= t;
    for ( int a=1; a<40; ++a)
    {
        double mult = -x*x/((2*a)*(2*a-1));
        t *= mult;
        cos += t;
    }
    return cos;
}

我认为问题是当您使用所需的精度评估操作时,该操作不会评估。当您使用小值时,近似足以获得正确的结果,但是当您使用较大的值时,您会陷入近似问题。

您在for循环中多次重复近似错误,因此随着输入增加而获得错误结果