円周率は、長い式を使用して計算しています。浮動小数点数などに慣れようとしています。doubleを使用するプログラムがあります。私のコードの問題は次のとおりです。
- ダブルを使用する場合、円周率は小数点以下7桁までしか正確ではありません。これ以上正確にすることはできません。
- long doubleを使用すると、円周率は小数点以下9桁まで正確ですが、コードの実行にははるかに時間がかかります。long doubleを使用して0.00000001未満の精度をチェックすると、piは9.4246775の値を返します。これはロングダブルによるものだと思います。
私の質問は、最も正確な変数タイプは何ですか?円周率の精度を向上させるためにコードを変更するにはどうすればよいですか?
これが私のコードです:
#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;
}