Пи в квадрате к n цифрам Переполнение стека

Я нашел много похожих тем, но ни одна из них не дает мне четкого объяснения.

Я должен написать программу, которая вычисляет квадрат Пи до n цифр, используя эту серию Тейлора:

π ^ 2 = 12 (1/1 ^ 2 — 1/2 ^ 2 + 1/3 ^ 2 — 1/4 ^ 2 + …)

Я написал это:

#include <iostream>
#include <math.h>

using namespace std;

int main() {
int n;
cout << "How many digits?" << endl;
cin >> n;
long double Pi2 = 0;
int i = 1;

while( precision is less than n ) {
if ((i%2) == 1) {
Pi2 += 1/pow(i,2);
i+=1;
}
else {
Pi2 -= 1/pow(i,2);
i+=1;
}
}

Pi2 *= 12;

cout << Pi2 << endl;
return 0;
}

и я понятия не имею, что писать в то время как ()? Когда этот цикл должен остановиться?

0

Решение

Если Вам известна требуемая точность, Вы можете рассчитать правильное значение для максимального значения для n, прежде чем запустить цикл.
Второе: начните с наименьшего числа, если начнете добавлять все значения дельты.

Похоже на это

int ndigits;
cout << "How many digits?" << endl;
cin >> ndigits;
int n = int( pow( double(10), double(ndigits)/2 ) + 0.5 );
long double Pi2 = 0;
int i = 1;

for( int i=n; i>0; --i )
{
if ((i%2) == 1) {
Pi2 += 1/pow(long double(i),2);
}
else {
Pi2 -= 1/pow(long double(i),2);
}
}
Pi2 *= 12;
0

Другие решения

Рассматриваемый метод использует ndigits создать значение «эпсилон».
Давайте предположим, что ndigits равен 3. Это дает эпсилон 0,0001

если разница между вашим значением из предыдущей итерации и текущей итерацией меньше 0,0001, то вы можете предположить, что у вас есть значение, которое вы ищете, и завершить цикл while.

Предупреждение, хотя. Двойные и длинные двойные имеют верхний предел количества цифр, которые они могут содержать точно.

0

По вопросам рекламы [email protected]