Una pequeña correción lareto:
Cita:
Iniciado por lareto 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).
Dado que en su versión, "ni" es de tipo float, el programa va a castear ese "1" a float, por lo que la división va a ser correcta.
Cita:
Iniciado por lareto
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 Tampoco es una forma correcta de hacer una comparación de dos float. En primer lugar, float tiene 6 dígitos significativos, el resto puedes considerarlos tranquilamente basura. Es el precio que hay que pagar a cambio de la posibilidad de manejar números grandes.
En el caso de los float, desde mi punto de vista, la forma correcta de realizar una comparación es algo tal que:
El motivo es que, como ha dicho lareto, las representaciones binarias de los números decimales no son todo lo precisas que nos gustaría, por lo que forzar una equivalencia 1=1 puede dar problemas en el momento en el que empiezan a entrar en acción los decimales.
La forma que propongo tiene como ventaja la flexibilidad. Puesto que las representaciones decimales están sujetas a errores de precisión, este mecanismo de comparación trata de camuflar el problema dando resultados bastante satisfactorios.