home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / math / ols / multiply.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-28  |  1.3 KB  |  76 lines

  1. /*
  2. Various kinds of matrix multiplies.
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <math.h>
  7. #include "utils.h"
  8. #include "matrix.h"
  9.  
  10. void 
  11. MMult (float **A, float **B, float **C, int M, int N, int K)
  12.      /* A is MxN, B is NxK.  C is AxB.  Nothing is allocated.  */
  13. {
  14.   int row, col, j;
  15.   float sum;
  16.  
  17.   for (row = 1; row <= M; row++)
  18.     for (col = 1; col <= K; col++)
  19.       {
  20.     sum = 0.0;
  21.     for (j = 1; j <= N; j++)
  22.       sum += A[row][j] * B[j][col];
  23.     C[row][col] = sum;
  24.       }
  25. }
  26.  
  27. void 
  28. d_MMult (double **A, double **B, double **C, int M, int N, int K)
  29.      /* A is MxN, B is NxK.  C is AxB.  Nothing is allocated.  */
  30. {
  31.   int row, col, j;
  32.   double sum;
  33.  
  34.   for (row = 1; row <= M; row++)
  35.     for (col = 1; col <= K; col++)
  36.       {
  37.     sum = 0.0;
  38.     for (j = 1; j <= N; j++)
  39.       sum += A[row][j] * B[j][col];
  40.     C[row][col] = sum;
  41.       }
  42. }
  43.  
  44. float 
  45. dot (float *x, float *y, int N)
  46. {
  47.   int i;
  48.   float sum;
  49.  
  50.   for (sum = 0.0, i = 0; i < N; i++)
  51.     sum += x[i] * y[i];
  52.   return sum;
  53. }
  54.  
  55. double 
  56. d_dot (double *x, double *y, int N)
  57. {
  58.   int i;
  59.   double sum;
  60.  
  61.   for (sum = 0.0, i = 0; i < N; i++)
  62.     sum += x[i] * y[i];
  63.   return sum;
  64. }
  65.  
  66. double 
  67. df_dot (double *x, float *y, int N)
  68. {
  69.   int i;
  70.   double sum;
  71.  
  72.   for (sum = 0.0, i = 0; i < N; i++)
  73.     sum += x[i] * ((double) y[i]);
  74.   return sum;
  75. }
  76.