我正在使用冗长的公式计算 pi。我正在尝试更熟悉浮点数等。我有一个使用双精度的工作程序。我的代码的问题是:
- 如果我使用双精度数,pi 只能精确到小数点后 7 位。我不能让它更准确。
- 如果我使用 long double,pi 精确到小数点后 9 位,但代码运行时间要长得多。如果我使用 long double 检查小于 0.00000001 的精度,则 pi 返回值 9.4246775。我认为这是由于长双。
我的问题是最准确的变量类型是什么?如何更改代码以提高 pi 的精度?
这是我的代码:
#include <iomanip>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double arctan;
double pi;
double precision;
double previous=0;
int y=3;
int loopcount=0;
cout<<"Start\n";
arctan=1-(pow(1,y)/y);
do
{
y=y+2;
arctan=arctan+(pow(1,y)/y);
y=y+2;
arctan=arctan-(pow(1,y)/y);
pi=4*(arctan);
// cout<<"Pi is: ";
// cout<<setprecision(12)<<pi<<endl;
precision=(pi*(pow(10,10)/10));
loopcount++;
if(precision-previous<0.000000001)
break;
previous=precision;
}
while(true);
cout<<"Pi is:"<<endl;
cout<<setprecision(11)<<pi<<endl;
cout<<"Times looped:"<<endl;
cout<<loopcount<<endl;
return 0;
}