/*
Obliczanie liczby Pi na podstawie:
1/(1*1) + 1/(2*2) + 1/(3*3) + ... + 1/(N*N) = Pi*Pi/6
#define - deklaracja stałej w stylu C
const -  deklaracja stałej w stylu C++




















*/
#include <iostream>
#include <iomanip>
#include <math>

using namespace std; // w starszych kompilatorach trzeba zakomentować ten wiersz
// KrokWyswietlenia musi być potęgą dwójki
//#define KrokWyswietlenia 1024*1024 //w stylu C
const unsigned KrokWyswietlenia=1024*1024; //w stylu C++

int main()
  {
   long double suma=0,pi=0;
   cout.setf(ios::fixed);
   cout<<"Liczba pi z  <math> "<<setprecision(19)<<M_PI<<endl;
   unsigned i;
   for(i=1;i;++i)
     {
      suma+=(long double)1/i/i;
      long double nowa_pi=sqrt(6*suma);
      if(pi>=nowa_pi) break;
      if(!(i&(KrokWyswietlenia-1)))
        {
         cout<<"\rObliczona liczba pi "<<setprecision(19)<<pi;
        }
      pi=nowa_pi;
     }
   cout<<endl<<"Napotkano ograniczenia liczby "<<(i?"double":"unsigned")<<endl;
   cin.get();
   return 0;
  }


