home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -seriously_amiga- / misc / posbb / src / generic / math.c < prev    next >
C/C++ Source or Header  |  1998-05-09  |  3KB  |  133 lines

  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. /* #include "posbb_tests.h"  // this would be needed by Test_qsort,not finished,yet
  6. */
  7. #define TRUE -1
  8. #define FALSE 0
  9.  
  10.  
  11.  
  12. /****** posbb_tests.c/Test_IMath ********************************************
  13. *
  14. *   NAME
  15. *     Test_IMath -- Tests the speed of some int Math operations.
  16. *
  17. *   SYNOPSIS
  18. *     time = Test_IMath( void )
  19. *     BYTE Test_IMath( void );
  20. *
  21. *   FUNCTION
  22. *     Does 1 million of additions,differences,multiplications and divisions
  23. *     and returns the time it took.
  24. *
  25. *   RESULT
  26. *     time - number of seconds taken. No error can be returned.
  27. *
  28. *   EXAMPLE
  29. *     See posbb.c/Perform_Tests()
  30. **
  31. ****************************************************************************
  32. */
  33.  
  34. int Test_IMath( precision )
  35. int precision;
  36. {
  37.   int c,i=0;
  38.   long *a=0,*b=0,*d=0;
  39.   time_t time1,time2;
  40.  
  41.   a = calloc(sizeof(long),100*precision);
  42.   b = calloc(sizeof(long),100*precision);
  43.   d = calloc(sizeof(long),100*precision);
  44.   /* Initializing b and d table with random values */
  45.   for(i =0;i<(100*precision);i++)
  46.   {
  47.     b[i] = rand();
  48.     d[i] = rand();
  49.   }
  50.   time1 = time(NULL);
  51.   for (c = 0;c<10000;c++)
  52.   {
  53.     for ( i = 0; i<(100 * precision)-3; i+=3 )
  54.     {
  55.       a[i] /= b[i] + d[i];
  56.       a[i+1] *= b[i+1] - d[i+1];
  57.       a[i+2] += b[i+2] * d[i+2];
  58.       a[i+3] -= b[i+3] / d[i+3];
  59.     }
  60.   }
  61.   time2 = time(NULL);
  62.  
  63.   free(a);
  64.   free(b);
  65.   free(d);
  66.   return (time2-time1);
  67. }
  68.  
  69.  
  70. int Test_FPMath( precision )
  71. int precision;
  72. {
  73.     int c,i=0;
  74.     double *a=0,*b,*d;
  75.     time_t time1,time2;
  76.  
  77.     a = calloc(sizeof(double),100*precision);
  78.     b = calloc(sizeof(double),100*precision);
  79.     d = calloc(sizeof(double),100*precision);
  80.     /* Initializing b and d table with random values; */
  81.     for(c =0;c<(100*precision);c++) {
  82.       b[c] = (double) rand();
  83.       d[c] = (double) rand();
  84.     }
  85.   time1 = time(NULL);
  86.   for (c = 0;c<10000;c++)
  87.   {
  88.     for ( i = 0; i<(100 * precision)-3; i+=3 )
  89.     {
  90.       a[i] /= b[i] + d[i];
  91.       a[i+1] *= b[i+1] - d[i+1];
  92.       a[i+2] += b[i+2] * d[i+2];
  93.       a[i+3] -= b[i+3] / d[i+3];
  94.     }
  95.   }
  96.   time2 = time(NULL);
  97.   free(a);
  98.   free(b);
  99.   free(d);
  100.   return (time2-time1);
  101.  
  102. }
  103.  
  104. int Test_TMath(precision)
  105. int precision;
  106. {
  107.   time_t time1,time2;
  108.   int c=0;
  109.   double *cosine=0,*sine=0,*tangent=0,angle = 0;
  110.  
  111.   cosine = calloc(sizeof(double),360*precision);
  112.   sine = calloc(sizeof(double),360*precision);
  113.   tangent = calloc(sizeof(double),360*precision);
  114.  
  115.   time1 = time(NULL);
  116.   for(c=0;c<100;c++)
  117.   {
  118.     for(angle=0;angle<360*precision;angle++)
  119.     {
  120.       sine[(int)angle] = sin(angle);
  121.       cosine[(int)angle] = cos(angle);
  122.       tangent[(int)angle] = tan(angle);
  123.     }
  124.   }
  125.   time2 = time(NULL);
  126.   free(sine);
  127.   free(cosine);
  128.   free(tangent);
  129.   return (time2-time1);
  130. }
  131.  
  132.  
  133.