Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Recondando Macros

Iniciado por Warchief, 08 de Agosto de 2004, 01:20:46 PM

« anterior - próximo »

Warchief

 Estoy haciendo un programita de tiempo real (nada serio) y de repente no me funciona la libreria math.h (no me carga nada de esa libreria :blink:), asi que para salir del atolladero he pensado: hagamos nuestro propio 'round'  (ole) (que es lo unico que necesito por ahora).

Como hay que tener un poquito de cuidado con el tiempo que tarda he decidido probar una funcion normal y una macro. Y he aqui los resultados obtenidos:

Sea este programa que realiza 10 veces 10000 iteraciones con 4 rounds cada una.


#include <sys/time.h>
#include <unistd.h>

#define miround(x) ((int)(100*x)-((int)x)*100) > 50 ? (int)x+1 : (int)x

int miround2(double x);
int miround2(double x) {
 double x2;
 x2 = x - (int)x;
 if(x2 > 0.5) return (int)x+1;
 return (int)x;
}

int main(void) {
 int i, j;
 long sec, usec;
 struct timeval acc, acc2;

 for(i=0; i<10; i++) {
   gettimeofday(&acc, NULL);
   for(j=0; j<10000; j++) {
     miround(6.50);
     miround(12.50);
     miround(13.515515);
     miround(12381.12);
   }
   gettimeofday(&acc2, NULL);
   sec = acc2.tv_sec - acc.tv_sec;
   usec = acc2.tv_usec - acc.tv_usec;
   printf("%10ld s %10ld u\n", sec, usec);
 }

 return 0;
}


Con salidas:


/* Funcion */
        0 s       2103 u
        0 s       2124 u
        0 s       2109 u
        0 s       2110 u
        0 s       2107 u
        0 s       2108 u
        0 s       2119 u
        0 s       2128 u
        0 s       2109 u
        0 s       2123 u
/* Cambiando a macro */
        0 s         15 u
        0 s         25 u
        0 s         24 u
        0 s         26 u
        0 s         27 u
        0 s         24 u
        0 s         28 u
        0 s         26 u
        0 s         28 u
        0 s         28 u


Solo para recordar que esas cosas que estan escondidas por ahi son utiles.

Si alguien se siente con ganas de hacer una macro que tarde menos que la pase inmediatamente ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.