Autor Tema: Problema con calculo de logaritmo  (Leído 1352 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado zurdo

  • PIC10
  • *
  • Mensajes: 9
Problema con calculo de logaritmo
« en: 02 de Septiembre de 2010, 19:43:53 »
El problemas que presento es que necesito calcular el logaritmo neperiano de numeros mayores que cero y menores que uno, primeramente lo intente con la funcion log() de la libreria math pero me presentaba problemas para numeros menores a 0.5 daba resultados como -1421 y cosas asi los cuales eran incorrectos, luego se me ocurrio usar las propiedades de los logaritmos y llegue al siguiente codigo:

Código: [Seleccionar]

unsigned int32 random32,primo=2147483647;
unsigned int64 semilla;
char random_byte;
float sem1float,sem2float,x1,x2,w,primo2=2147483647,loga;

         
         case 2: {
            delay_ms(1);
            lcd_putc("\f  Pulse G0 para\ncalcular semilla");
            delay_ms(500);
            sel=0;
           
            semilla=calc_semilla();
            delay_ms(500);
                       
            for(n=1;n<=10;n++) {
                             
               do{
                  sem1float=gen_aleatorio()/primo2;
                  x1 =(2.0*sem1float)-1.0;
                  sem2float=gen_aleatorio()/primo2;
                  x2 =(2.0*sem2float)-1.0;
                  w=x1*x1+x2*x2;
                  x=ceil(w);
               }
               while (x>1);  //si coloco while (w>1) tampoco me funciona y no entiendo por que???
               
               loga=log(10*w)-LN10;
               //w = sqrt((-2.0*log(w))/w);
           
               delay_us(5);
               printf(lcd_putc,"\f%8.8f\n%0.xf",loga,loga);
               delay_us(5);
               sel=0;
               do
                  sel=input(PIN_G0);
               while (sel==0);
               sel=0;
               delay_ms(500);
               ///////////////////////////////////////////////////////////////////////////
               */

Cuando w es mayor a 0.9 el resultado que me da ellogaritmo es erroneo, pero noté que si me debe dar por ejemplo 0.001429 en la pantalla se muestra 1429 usando algun formato que no recuerdo, si me pudieran ayudar se los agradezco me me trae loco esta funcion


 

anything