Codice PHP:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double k = 4.0; //<- 1
int z;
for(int i = 1; i <= 10000; i+= 2)
{
for(int x = 1; x <= i; x++)
{
z = (int)pow(-1.0, x);
}
k += ((4.0*z)/i); //<- 2
}
cout << "pi greco e' : " << k;
cout << endl;
return 0;
}
Non ho idea di che algoritmo stai usando quindi non posso dirti perchè il valore finale è sbagliato. Però il problema del double è risolto con le righe (1) e (2).
In (1), puoi usare long double ma non long long double.
In (2), prima c'era (4*z)/i, che erano tutti interi, quindi veniva eseguita prima la moltiplicazione e poi la divisione tra interi. Basta forzare il numeratore ad essere un double per avere un risultato double e non int. Ovviamente avresti potuto anche scrivere
Codice PHP:
k += (((double)4*(double)z)/(double)i);
per indicare esplicitamente che le operazioni sono tra double, per rendere più leggibile il codice. Questione di gusti.
Un'ultima cosa, se scrivi using namespace std, non hai bisogno di indicare anche using std:
ow, è implicito.
Sarebbe stato diverso se pow fosse stato definito in un altro namespace, tipo
using namespace std;
usign mate:
ow;