Вот из чего надо исходить:
P = 1/[П(n=1;∞)(1-0,25/n²)]
А дальше самое простое - сверять частные произведения с уже известным значением этого бесконечного произведения:
#include <iomanip>
#include <iostream>
using namespace std;
double Abs(double x) { return x < 0. ? - x : x; }
int main()
{
double E = 0.001, error, fourth = 0.25, n, one = 1.,
p = one, P = 1.57079632679489661923, x;
for (n = one;; n += one)
{
p *= one - fourth / n / n;
x = one / p;
error = x - P;
cout << setprecision(0) << setw(5) << fixed << n << ')' <<
setprecision(16) << setw(22) << x << setprecision(6) <<
setw(16) << scientific << error << endl;
if (Abs(error) < E) break;
}
}
Какая точность Е имеется в виду (относительная или абсолютная) у Вас не указано, значит берём абсолютную. В общем для получения требуемой точности потребуется взять по меньшей мере 393 сомножителя. Кстати, такой апостериорный подход может быть не защитан, а алгоритм оценки априорной точности у Вас не указан также как и сам род точности, которую нужно достичь. Да, и ещё: бесконечное произведение - это именно произведение, а никакой не ряд!