TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hectdiaf en 31 de Marzo de 2010, 01:33:00

Título: funcion exp()
Publicado por: hectdiaf en 31 de Marzo de 2010, 01:33:00
buenas noches

pregunta sencilla, alguien sabe como utilizar la funcion exp(), necesito calcular potencias negativas( 2^-1, 2^-2...)
 pero el resultado siempre es cero no se que tengo mal .

Código: CSS
  1. #include <16f873a.h>
  2. #use delay(clock=4000000)
  3. #FUSES XT,NOWDT
  4. #include <math.h>
  5. #include <LCD.c>
  6.  
  7. void main()
  8. {
  9. int i;
  10. int valor;
  11. lcd_init();
  12.  
  13.     for(i=0;i<=32;i++)
  14.    {
  15.     valor=1/exp(i*log(2));
  16.     printf(lcd_putc,"\f %u  - %u",valor,i);
  17.    }
  18. }
Título: Re: funcion exp()
Publicado por: migsantiago en 31 de Marzo de 2010, 12:15:53
Hola

Ni valor ni i están declaradas como flotantes.

Código: [Seleccionar]
float i, valor;
Título: Re: funcion exp()
Publicado por: hectdiaf en 31 de Marzo de 2010, 14:45:11
migsantiago grcias por tu respuesta

si tienes razon con lo de que mi variable valor tiene que ser float no habia caido en cuenta .

pero aun asi el problema persiste,  deje el programa aun mas sencillo el resultado deberia ser 0.5 y el resultado que me arroja es -16.16

Código: CSS
  1. #include <16f873a.h>
  2. #use delay(clock=4000000)
  3. #FUSES XT,NOWDT
  4. #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
  5. #include <math.h>
  6. #include <LCD.c>
  7.  
  8. int i;
  9. float valor;
  10.  
  11. void main()
  12. {
  13.  lcd_init();
  14.  
  15.  i=1;
  16.    valor = 1/exp(i*log(2));
  17.    printf(lcd_putc,"\f %f %u",valor,i);
  18.  
  19. }

igual esa expresion matematica aparece en la ayuda del compilador.
Título: Re: funcion exp()
Publicado por: migsantiago en 31 de Marzo de 2010, 14:48:26
Prueba haciendo una conversión de valor int a float sobre la variable i y escribiendo los decimales de 2.0.

Código: [Seleccionar]
i=1;
  valor = 1 / exp( (float)i * log(2.0));
  printf(lcd_putc,"\f %f %u",valor,i);
Título: Re: funcion exp()
Publicado por: alexysar en 31 de Marzo de 2010, 18:00:40
probe la forma que puso migsantiago y anda bien. Algunas aclaraciones:

log() , es una función que da el logaritmo neperiano, es decir, lo que nosotros anotariamos   ln()
exp() , eleva el número de euler a la potencia, es decir, nosotros anotariamos exp(5)=e^5

para hacer 2^-5 se puede usar;  pow(2,(-5));