home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_40.arc / TIDBIT40.C < prev    next >
Text File  |  1988-01-11  |  2KB  |  75 lines

  1. /* Code from Tidbits column in Micro Cornucopia Issue #40  (two listings) */
  2.  
  3. /* listing 1 -- 2 pass standard deviation algorithm
  4.              explicitly declaring register variables */
  5.  
  6. #include <stdio.h>
  7.  
  8. void stat(double *list);
  9.  
  10. main()
  11. {
  12.         register short i,j;
  13.         double list[7000];
  14.  
  15.         for(i = 0; i < 6999; i++)
  16.         list[i]=i + 1;
  17.         stat(list);
  18. }
  19. void stat(double *list)
  20. {
  21.         register i,c;
  22.         double x,z,dev,square,squares,var,sd;
  23.         double sqrt(double sd);
  24.         x = squares = 0;
  25.         puts("start");
  26.         for(i = 0; i < 6999; i++){
  27.                 x = list[i] + x;
  28.                 }
  29.         z = x/i;
  30.         printf("%f\n",z);
  31.         for(i = 0; i < 7000; i++){
  32.                 dev = z - list[i];
  33.                 square = dev * dev;
  34.                 squares = squares + square;
  35.                 }
  36.         var = squares/(i-1);
  37.         printf("%f\n",var);
  38.         sd = sqrt(var);
  39.         printf("%f\n",sd);
  40. }
  41.  
  42. /* listing 2 -- lemma (one pass) algorithm */
  43.  
  44. #include <stdio.h>
  45.  
  46. void stat(double *list);
  47.  
  48. main()
  49. {
  50.         double list[7000];
  51.         int i;
  52.  
  53.         for(i = 0; i < 6999; i++)
  54.                 list[i]=i + 1;
  55.         stat(list);
  56. }
  57. void stat(double *list)
  58. {       int i,c;
  59.         double x,z,dev,square,squares,var,sd;
  60.         double sqrt(double sd);
  61.         x = squares = 0;
  62.         puts("start");
  63.         for(i = 0; i < 6999; i++){
  64.                 x += list[i];
  65.                 squares += list[i] * list[i];
  66.                 }
  67.         z = x/i;
  68.         printf("%f\n",z);
  69.  
  70.         var = (squares - (x * x)/i)/ (i - 1);
  71.         printf("%f\n",var);
  72.         sd = sqrt(var);
  73.         printf("%f\n",sd);
  74. }
  75.