晚上好,我试图计算余弦,但我不知道我错在哪里。即使输入的近似值非常高(即0.000001),结果也不精确并且符号错误(-0.54而不是60度角的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;
}
我能做些什么来纠正这些错误?
我认为你的错误在这里:
while ((cos(rad)-fabs(cosine))>eps){
可能应该是
while (fabs(cos(rad)-cosine)>eps){
但在现实中,人们使用当前和以前的近似值之间的差值来确定精度。