home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / nvdc87 / lcv1n1 / variance.c < prev    next >
Text File  |  1987-08-12  |  1KB  |  45 lines

  1. /* Listing 5 - Turbo C function to be called from Turbo Prolog
  2.                to calculate the variance. */
  3.  
  4. struct ilist {          /* Declare a Turbo Prolog list in C. */
  5.     char functor;
  6.     double val;
  7.     struct ilist *next;
  8. };
  9.  
  10. struct ifunc {
  11.    char type;
  12.    double value;
  13. };
  14.  
  15. void variance_0(struct ilist *in, struct ifunc **out) {
  16.     int count = 0;
  17.     double y = 0, dev = 0, square = 0, squares=0, z = 0, var = 0;
  18.     struct ilist *dup_list;
  19.  
  20.     if (in->functor !=1) fail_cc();
  21.     dup_list = in;            /* Save the address of the head */
  22.                       /* of the list. */
  23.  
  24.     while(in->functor !=2) {  /* Find mean first. */
  25.        y = y + in->val;
  26.        count = count+1;
  27.        in = in->next;
  28.     }
  29.     z = y/count;
  30.                                  /* Then find variance. */
  31.     while(dup_list->functor !=2) {
  32.        dev = z - dup_list->val;
  33.        square = dev * dev;
  34.        squares = squares + square;
  35.        dup_list = dup_list->next; /* Get next list element. */
  36.     }
  37.  
  38.     var = squares/count;     /* Get var and return it. */
  39.  
  40.     *out = (struct ifunc *) palloc (sizeof(struct ifunc));
  41.     (*out)->value = var;
  42.     (*out)->type = 1;
  43. }
  44.  
  45.