Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/02/2015, 23:31
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda sobre float y sacar constante e

Hola; te comento algunas cosas que no están bien.

Código:
float ni = 1;       //es el factorial !n
Estás inicializando la variable de tipo float con un 1, que es entero. El compilador lo va a "castear" a float de todos modos, pero en general conviene ser explícito, para evitar errores. Entonces, conviene:
Código:
float ni = 1.0f; // la f indica que 1.0 es de tipo float, si no se pone sería un double.
Pero, por otro lado, si ni va a guardar el resultado de calcular un factoria, y un factorial es un número entero, no hay razón para que la variable sea de tipo float. Debería ser
Código:
int ni = 1;
Código:
float n = 2;
n es otra de las variables que no deberían ser de tipo float.

Otra:
Código:
e += 1/ni;          //aqui "e" vale 2
Aquí 1 es un int, que dividido por cualquier otro entero mayor que 1 va a dar 0 (división entera). En la primera ocurrencia no hay problema porque ni vale 1, pero en la segunda, dentro del segundo bucle while, deberías poner
Código:
e += 1.0f/ni;
para que se puedan ir incrementando en partes fraccionarias. Otra vez, 1.0f es una constante de tipo float.

Código:
while (e != 2.718055556){
Probablemente esta desigualdad va a resultar true eternamente. Por causa de la forma en que se representan los números float o double, nunca deberían compararse de esa manera. En este caso, creo que podría ser suficiente
Código:
while (e <= 2.718055556){
Hay una explicación completa en
http://www.parashift.com/c++-faq/flo...int-arith.html

Y por último, la serie que tienes es muy lentamente convergente, por lo que vas a necesitar unos cuantos miles de millones de ciclos para llegar a un valor aproximado de e como el que pretendes.