/*    P.S.Williams */
/*  Timings of addition, mutiplication & division in integer 
     and floating point */

#include <stdio.h>
#include <time.h>

int main(void)
{
   int i,n;
   int    addI,sumI,
          factorI,productI,quotientI,divisorI;

   double addD,sumD,factorD,productD,
          divisorD,numeratorD;

   float  addF,sumF,factorF,productF,
          divisorF,numeratorF;

          
   int t1,t2,t,loopTime;

  
  printf("C Integer & Real arithmetic on the Arc\n\n");

  n = 10000 ; /* the number of each operation */


  /*How long is an empty loop ? */
  t1 = clock();
  for(i=1;i<=n;i++){};
  t2 = clock();
  loopTime = t2-t1;
  printf("%d Integer empty loops took %d centi-seconds\n",n,loopTime);

  /* Integer addition */
  addI = 17; sumI = 0;
  t1 =  clock(); /* the centi-second system clock */
  for(i=1;i<=n;i++) sumI =  addI + sumI;
  t2 = clock();
  t = t2-t1;
  printf("%d Integer additions took %d centi-seconds\n",n,t);
  printf("SumI = %d\n",sumI);

  /* Integer multiplication */
  factorI = 1; productI = 2;
  t1 =  clock(); 
  for(i=1;i<=n;i++) productI =  factorI*productI;
  t2 = clock();
  t = t2-t1;
  printf("%d Integer multiplications took %d centi-seconds\n",n,t);
  printf("ProductI = %d\n",productI);



 /* Integer divisons */
  divisorI = 2; quotientI = 2147483647;
  t1 =  clock(); 
  for(i=1;i<=n;i++) quotientI =  quotientI/divisorI;
  t2 = clock();
  t = t2-t1;
  printf("%d Integer divisions took %d centi-seconds\n",n,t);
  printf("QuotientI = %d\n\n",quotientI);

  /* Float addition */
  addF = 7.6;  sumF = 0;
  t1 =  clock(); 
  for(i=1;i<=n;i++) sumF =  addF + sumF;
  t2 = clock();
  t = t2-t1;
  printf("%d Float  additions took %d centi-seconds\n",n,t);
  printf("SumF = %e\n",sumF);

 /* Float multiplication */
  factorF = 1.001; productF = 0.8;
  t1 =  clock();
  for(i=1;i<=n;i++) productF =  factorF*productF;
  t2 = clock();
  t = t2-t1;
  printf("%d Float  multiplications took %d centi-seconds\n",n,t);
  printf("ProductF = %e\n",productF); 

  /* Float division */
  divisorF = 1.01; numeratorF = 0.8;
  t1 =  clock(); 
  for(i=1;i<=n;i++) divisorF =  numeratorF/divisorF;
  t2 = clock();
  t = t2-t1;
  printf("%d Float  divisions took %d centi-seconds\n",n,t);
  printf("DivisorF = %e\n\n",divisorF); 



  /* Double addition */
  addD = 7.6;  sumD = 0;
  t1 =  clock();
  for(i=1;i<=n;i++) sumD =  addD + sumD;
  t2 = clock();
  t = t2-t1;
  printf("%d Double  additions took %d centi-seconds\n",n,t);
  printf("SumD = %e\n",sumD);

 /* Double multiplication */
  factorD = 1.001; productD = 0.8;
  t1 =  clock(); /* the centi-second system clock */
  for(i=1;i<=n;i++) productD =  factorD*productD;
  t2 = clock();
  t = t2-t1;
  printf("%d Double  multiplications took %d centi-seconds\n",n,t);
  printf("ProductD = %e\n",productD); 

  /* Double division */
  divisorD = 1.01; numeratorD = 0.8;
  t1 =  clock(); 
  for(i=1;i<=n;i++) divisorD =  numeratorD/divisorD;
  t2 = clock();
  t = t2-t1;
  printf("%d Double  divisions took %d centi-seconds\n",n,t);
  printf("DivisorD = %e\n",divisorD); 
     
 return(0);

}

