uff una serie de errores XD...
primero
por que si es par es invalido? es una progresion, toma presicion al avanzar, la paridad no importa en valores altos...
el error es que es una sumatoria.... una UNICA sumatoria.... tu lo que estás haciendo son 2 sumatorias... una negativa y otra positiva... para ambos debe ser "b" el valor afectado
otra cosa...
sabemos que pi es un numero decimal, especialmente esta operación requiere de decimales... si te fijas la haces con enteros.... jamás dará resultado...
personalmente lo habría hecho así
(super compacto XD)
desgloso un poquito:
-en la división hago algo similar a
este 2.0f es para que se force como flotante el resultado de la división, si no, la división quedará como entero (por ejemplo si haces 4/i, al ser i entero, el resultado es entero)
-en la impresión de datos no uso cout, sino printf con el valor "%.10f" esto significa que va a imprimir 10 decimales (aunque sean ceros)
espero sea de ayuda inténtalo correr con un valor de 1000000000
mi maquina lo corre en unos 20 seg y el valor dudo que lo puedas tener más aproximado XD
primero
Código (cpp) [Seleccionar]
if(n%2==0){
cout<<"numero invalido"<<endl;
por que si es par es invalido? es una progresion, toma presicion al avanzar, la paridad no importa en valores altos...
Código (cpp) [Seleccionar]
int b=0,a=1,i,c=0 ;
for(i=1;i<=n;i++){
if(i%2==0){
while(a<=n){
b=b-(4/a);
a=a+2;
}
cout<<b<<endl;
}else{
while(a<=n){
c=c+(4/a);
a=a+2;
}
cout<<c<<endl;
}
}
el error es que es una sumatoria.... una UNICA sumatoria.... tu lo que estás haciendo son 2 sumatorias... una negativa y otra positiva... para ambos debe ser "b" el valor afectado
otra cosa...
sabemos que pi es un numero decimal, especialmente esta operación requiere de decimales... si te fijas la haces con enteros.... jamás dará resultado...
personalmente lo habría hecho así
![:P :P](https://forum.elhacker.net/Smileys/navidad/tongue.gif)
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main(){
int precision, i = 0;
float pi = 4;
cout << "ingrese un grado de precision: ";
cin >> precision;
while (i++ < precision)pi += ((i%2==0?4:-4)/(1+i*2.0f));
printf ("\npi es: %.10f \n" , pi);
system("pause");
return 0;
}
desgloso un poquito:
-en la división hago algo similar a
Código (cpp) [Seleccionar]
if(i%2==0) {
pi = pi + (4 / (i*2.0f) );
}else{
pi = pi - (4 / (i*2.0f) );
}
este 2.0f es para que se force como flotante el resultado de la división, si no, la división quedará como entero (por ejemplo si haces 4/i, al ser i entero, el resultado es entero)
-en la impresión de datos no uso cout, sino printf con el valor "%.10f" esto significa que va a imprimir 10 decimales (aunque sean ceros)
espero sea de ayuda inténtalo correr con un valor de 1000000000
![:P :P](https://forum.elhacker.net/Smileys/navidad/tongue.gif)