C/Visual C - Cálculo de la constante e

 
Vista:

Cálculo de la constante e

Publicado por Franco Cedillo (36 intervenciones) el 17/07/2005 20:47:04
Hola,

Estoy calculando el valor de la constante e con la aproximación que da la suma de las divisiones de la unidad entre los factoriales. Esta suma se realiza mientras el término a sumar sea significativo. Como el término tiene la forma 1/fact(x) entonces tomo un valor de 10^-9 como el menos significativo. Además para facilitar las cosas y no hacer cálculos de más no implemento la función factorial sino que tomo una variable y la voy multiplicando aprovechando que el cálculo de la sumatoria abarca un rango "contínuo" de valores. Se produce un error, tal vez de redondeo de la variable float. no sé cómo remediar esto.

Saludos.

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void main()
{
int i=1, fact;
float s=0;
fact = 1;
while (fact<1000000000)
{
s = s + 1/fact;
i++;
fact = fact*i;
};
cout<<s;
getch();
}

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cálculo de la constante e

Publicado por Franco Cedillo (36 intervenciones) el 18/07/2005 01:19:12
Hola,

He hecho las siguientes modificaciones. Todas las variables son araho del tipo float.
El valor de e se aproxima con 5 decimales. e = 1.71828.

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

void main()
{
float s=0, i=1, fact;
fact = 1;
while (fact<pow(10,9))
{
s = s + 1/fact;
i++;
fact = fact*i;
};
cout<<s;
getch();
}

Pero i y fact son enteros por naturaleza. No deseo usarlos como float. Ocupan más memoria.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cálculo de la constante e

Publicado por fernando.gomez (1603 intervenciones) el 18/07/2005 05:12:51
i y fact no pueden ser enteros, porque en cualquier compilador de hoy en día (p.e. de 32 bits) un int es de 16 bits, lo que equivale a un rango de -65536 a 65535, por lo que tendrías un desbordamiento de variable. Vas a tener que gastar un poco más de memoria (¡no seas codo! =), pero no con un float, sino con un long. Ahora, para mejorar la precisión de tu resultado, emplea una variable double en lugar de float para s.

Algunas sugerencias de estilo. En lugar de:
s = s + 1/fact;

mejor emplea:
s += 1/fact;

Y en lugar de
fact = fact*i;

mejor emplea:
fact *= i;

Son un poco --un poquito-- más eficientes.

Por cierto, el estándar de C/C++ define que main debe regresar int, no void.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cálculo de la constante e

Publicado por Franco Cedillo (36 intervenciones) el 19/07/2005 04:39:34
Hola,

Si uso long el resultado es incorrecto, sale uno.
Si le pongo double me sigue dando 5 decimales.
Pero los incrementos y multiplicaciones con el estilo que me sugieres es estupendo. me encanta.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar