text: #include <stdio.h>
  #include <stdlib.h>
  #include <sys/time.h>
  #include <math.h>
  
  #define ceild(n,d)  ceil(((double)(n))/((double)(d)))
  #define floord(n,d) floor(((double)(n))/((double)(d)))
  #define max(x,y)    ((x) > (y)? (x) : (y))
  #define min(x,y)    ((x) < (y)? (x) : (y))
  
  double L[N][N];
  double U[N][N];
  double A[N][N+13];
  
  void print_array()
  {
    int i, j;
  
    for (i=0; i<N; i++) {
      for (j=0; j<N; j++) {
        fprintf(stderr, "%lf ", round(A[i][j]));
        if (j%80 == 79) fprintf(stderr, "\n");
      }
      fprintf(stderr, "\n");
    }
    fprintf(stderr, "\n");
  }
  
  void init_arrays()
  {
    int i, j, k;
  
    /* have to initialize this matrix properly to prevent                                              
     * division by zero                                                                                 
     */
    for (i=0; i<N; i++) {
      for (j=0; j<N; j++) {
        L[i][j] = 0.0;
        U[i][j] = 0.0;
      }
    }
  
    for (i=0; i<N; i++) {
      for (j=0; j<=i; j++) {
        L[i][j] = i+j+1;
        U[j][i] = i+j+1;
      }
    }
  
    for (i=0; i<N; i++) {
      for (j=0; j<N; j++) {
        for (k=0; k<N; k++) {
  	A[i][j] += L[i][k]*U[k][j];
        }
      }
    }
  }
  
  double rtclock()
  {
    struct timezone tzp;
    struct timeval tp;
    int stat;
    gettimeofday (&tp, &tzp);
    return (tp.tv_sec + tp.tv_usec*1.0e-6);
  }
  
  int main()
  {
    init_arrays();
  
    double annot_t_start=0, annot_t_end=0, annot_t_total=0;
    int annot_i;
  
    for (annot_i=0; annot_i<REPS; annot_i++)
      {
        annot_t_start = rtclock();
  
  
  