Subsecciones

19. Funciones para el tiempo

En este capítulo se revisará como se puede usar el reloj con llamadas al sistema UNIX.

Existen muchas funciones para el tiempo que las que serán consideradas aquí -- usar las páginas de man y los listados de la biblioteca estándar de funciones para más detalles.

El uso más común de las funciones de tiempo son:

19.1 Funciones básicas para el tiempo

Algunas prototipos de las funciones básicas para el tiempo son las siguientes:

19.2 Ejemplos de aplicaciones de funciones del tiempo.

Como se menciono previamente, básicamente existen tres posibles usos de las funciones de tiempo.

19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.

Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo en distintos momentos:

/* timer.c */
#include <stdio.h>
#include <sys/types.h>
#include <time.h>

main()
{
        int i,j;
        time_t t1,t2;

        (void) time(&t1);
        for (i=1; i<=300; ++i)
        {
                printf("%d %d %d\n",i, i*i, i*i*i );
                for(j=0; j<1000000; j++); /* Un pequeño retardo */
        }
        (void) time(&t2);
        printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n",
                (int) t2-t1);
}

19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.

Se ha visto un ejemplo similar previamente, en esta ocasión se usa la función lrand48() para generar una secuencia de números:

/* random.c */
#include <stdio.h>
#include <sys/types.h>
#include <time.h>

main()
{
        int i;
        time_t t1;

        (void) time(&t1);
        srand48((long) t1);
        /* usar time en segundos para poner la semilla */
        printf("5 numeros aleatorios (semilla = %d):\n",(int) t1);
        for (i=0;i<5;++i)
                printf("%d ", lrand48());
        printf("\n\n");
}

La función lrand48() devuelve enteros largos no negativos distribuidos uniformememnte entre 0 y $2^{31}$.

Una función similar es la función drand48 que regresa números de doble precisión en el rango $[0.0, 1.0)$.

srand48() pone el valor de la semilla para estos generadores de números aleatorios. Es importante tener diferentes semillas cuando se llame a las funciones de otra forma el mismo conjunto números pseudo-aleatorios sera generados. La función time() siempre da una semilla única (siempre y cuando haya transcurrido por lo menos 1 segundo).

19.3 Ejercicios

  1. Escribir un programa en C que mida el tiempo de un fragmento de código en milisegundos.
  2. Escribir un programa en C para producir una serie de números aleatorios de punto flotante en los rangos a) 0.0 - 1.0, b) 0.0 - n, donde n es cualquier valor flotante. La semilla deberá estar puesta para que se garantice una secuencia única.