Я вычисляю пи, используя длинную формулу. Я пытаюсь лучше познакомиться с числами с плавающей запятой и т. Д. У меня есть рабочая программа, которая использует двойные числа. Проблема с моим кодом:
- Если я использую двойное число, число пи будет точным только до 7-го знака после запятой. Я не могу сделать это более точным.
- Если я использую длинное двойное значение, число пи будет точным до 9-го знака после запятой, однако выполнение кода займет гораздо больше времени. Если я проверяю точность менее 0,00000001 с помощью длинного двойного числа, число пи возвращает значение 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;
}
long double
, вы изменили все вызовы API, например.pow()
кpowl()
,arctan()
кatanl()
-эквиваленту и т. д.? - person sarnold   schedule 21.03.201226.4.7 complex value operations [complex.value.ops]
- person Martin York   schedule 21.03.2012pow(1,y)
? какие? зачем снова и снова вычислять выражение, равное 1? - person phuclv   schedule 11.03.2016