晚上好,我正在尝试计算余弦,但我不知道我错在哪里。即使输入的近似值非常高(即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;
}
我该怎么做才能纠正这些错误?提前谢谢。
答案 0 :(得分:1)
我认为你的错误在于:
while ((cos(rad)-fabs(cosine))>eps){
可能应该是
while (fabs(cos(rad)-cosine)>eps){
但实际上,为了确定精确度,人们会使用当前和以前的近似值之间的差异。