在我的C++功課裡
有一題是要用 16arctan(1/5)-4arctan(1/239) 去計算圓周率
程式的要求是希望你用arctan的泰勒展開式之後
(arctan(x)=x-x^3/3+x^5/5-x^7/7.......)
去比較只有一項x跟兩項x跟三項x...如此
當後值跟前值小於你所給定的值之後
此程式就自動結束
P.S. 不可用 pow 和 atan...如果可以就簡單了
這是我的程式碼
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
long double tol,diff,x,y,total_a,total_b,t1,t2,p1,p2,n,t1n,t2n;
cout << "Enter tolerence" << endl;<br>cin >> tol;
cout.precision(14);
x=1.0/5.0;
y=1.0/239.0;
total_a=1.0/5.0;
total_b=1.0/239.0;
t1=x;
t2=y;
p1=16*(total_a)-4*(total_b);
do
{
for(n=3;n>=0;n=n+2)
{
t1n=t1*(-1*x*x)/n;
t2n=t2*(-1*y*y)/n;
total_a=(total_a+t1n);
total_b=(total_b+t2n);
t1=t1n;
t2=t2n;
p2=16*(total_a)-4*(total_b);
cout<<p2<<endl;
p1=p2;
diff=fabs(p2-p1);
}
}while(diff>=tol);
return 0;
}
我的程式可以compile,但是卻沒有辦法結束,他會一直得到固定的值
所以我在猜想這中間我是不是有什麼value沒有reassign到
有人可以告訴我嗎
