C/Visual C - ayudenme..

 
Vista:

ayudenme..

Publicado por eduardo (82 intervenciones) el 23/07/2007 20:01:57
Estoy haciendo un programa en C que calcula:
1) el valor de 'e' (epsilon)
2) la potencia de 'e' (epsilon elevado a la 'x'), x se ingresara desde el teclado

pero no he logrado la 2) con exito ya que no me arroja resultados correctos
espero me ayuden....gracias de antemano:

aca el programa:

#include <stdio.h>

float epsilon();
double pot_epsilon(float exp);
int factorial(int n);
float potencia(float x,int n);

int main( )
{
char continuar;
char opc;
float exp;
do{
system("cls");
printf("1. e = 1 + 1/1! + 1/2! + 1/3! + ...\n\n");
printf("2. e^x = 1 + x/1! + x^2/2! + x^3/3! + ...\n\n");
printf("SELECCIONE OPCION (1-2)\n");
printf("-----------------\n");

do{
opc = getch();
switch(opc){
case '1':
system("cls");
printf("OPCION 1 : CALCULO DE EPSILON\n");
printf("--------\n\n");
printf("1. e = 1 + 1/1! + 1/2! + 1/3! + ...\n\n");
printf("\n\te = %f\n\n",epsilon());
break;
case '2':
system("cls");
printf("OPCION 2 : POTENCIA DE EPSILON\n");
printf("--------\n\n");
printf("2. e^x = 1 + x/1! + x^2/2! + x^3/3! + ...\n\n");
printf("Digite un valor para 'x'\n");
printf("X = ");
scanf("%f",&exp);
printf("\n\te^ %.2f = %f\n\n",exp,pot_epsilon(exp));
break;
default:
break;
}

}while(opc != '1' && opc != '2');
printf("\n Desea calcular otra vez ? presione \"n\" para terminar ");
continuar = tolower(getch());
}while(continuar != 'n');
return 0;
}

float epsilon(){
float e;
int i;
e = 1;
for(i = 1;i < 34;i++) /* segun formula matematica es una suma infinita
pero la variable "e" parece desbordarse al poner mas de
34 iteraciones ¿poque ocurre... si lo que necesito es
mas presicion */

e = e + 1.00/factorial(i);

return e;
}

double pot_epsilon(float exp){
double pot_e;
int i;
pot_e = 1;
for(i = 1;i < 15;i++) /* de igual manera aqui no logro una buena presicion
es mas, hay bastante diferencia para x=5,6,7,..*/
pot_e = pot_e + potencia(exp,i)/factorial(i);

return pot_e;
}

int factorial(int n){
int f;
int i;
f = 1;
for(i = 1;i <= n;i++)
f *= i;
return f;
}

float potencia(float x,int n){
float pot;
pot = 1;
int i;
for(i = 1;i <= n;i++)
pot *= x;
return pot;
}

/* QUE ESTA MAL....AYUDENME */
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:ayudenme..

Publicado por Nelek (816 intervenciones) el 24/07/2007 07:35:38
Hola,

en primer lugar, las variables tienen sus limitaciones. Que un double pueda alcanzar hasta Xe31 no quiere decir que te vaya a dar todas las cifras asi como asi. Si lo que quieres es un mayor rango tendras que hacerte cascadas de variables, concatenando en un double la parte baja y en el otro la parte alta. Es decir, como LOByte y HIByte (algo de ese estilo).

Por cierto printf ("%f", var); tiene menos que printf ("%lf", var); "%LF" (long float).

En segundo... no puedes usar la funcion POW (base, exp) del math.h?

En cuanto a tu codigo... no he visto ningun fallo raro, aunque tampoco lo he ejecutado para seguirlo punto a punto. A simple vista parece correcto. Mira a ver si en lugar de usar floats, usando doubles a lo largo de todo el codigo... quiza sea por problemas de limitaciones de variables, o algo tan "tonto" que se pasa por encima al leer el codigo sin darse cuenta.
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