用泰勒级数和近似输入计算C ++中的余弦

时间:2016-09-08 16:43:19

标签: c++

晚上好,我正在尝试计算余弦,但我不知道我错在哪里。即使输入的近似值非常高(即0.000001),结果也是不精确的并且具有错误的符号(对于60度角为-0.54而不是0.5)。对于30度的角度,没有显示结果但代码仍在运行(我认为while循环没有结束)。

#include <iostream>
#include <cmath>
using namespace std;
double fact (int);
double eps;
double PI=3.141592654;
double fact (int num){
if (num==0 || num==1)
    return 1;
else
    return num*fact(num-1);
}
int main(){
double deg;
    double rad;
    double term=0.0;
    double sum=0.0;
    double cosine=0.0;
    int i=1;
    cout<<"You have chosen to calculate the cosine. Insert degrees of the   desired angle: \n"; 
    cin>>deg;
    rad=(PI/180)*deg;
    cout<<"Value from the c++ library is: \n"<<cos(rad);
    cout<<"\nProceeding to cosine calculation, insert desired approximation here: \n";
    cin>>eps;
    while ((cos(rad)-fabs(cosine))>eps){
    term=pow(rad,2*i)*((pow(-1.0,i))/fact(2*i));
    sum+=term;
    i++;
    cosine=sum;
    }
    cout<<"Value of cosine is: "<<cosine;
}

我该怎么做才能纠正这些错误?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你的错误在于:

while ((cos(rad)-fabs(cosine))>eps){

可能应该是

while (fabs(cos(rad)-cosine)>eps){

但实际上,为了确定精确度,人们会使用当前和以前的近似值之间的差异。