Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. inline float Small(float a, float b){
  6. return (a < b) ? a : b;
  7. }
  8.  
  9. inline float Big(float a, float b){
  10. return (a > b) ? a : b;
  11. }
  12.  
  13.  
  14. void min_max_avg(float **grid, int N, int M,
  15. float *min, float *max, float *avg,
  16. float *col_min, float *col_max, float *col_avg,
  17. float *row_min, float *row_max, float *row_avg) {
  18.  
  19. if(N == 0 || M == 0){
  20. *min = INFINITY;
  21. *max = -INFINITY;
  22. *avg = NAN;
  23. for(int i = 0; i < N; ++i){
  24. row_min[i] = INFINITY;
  25. row_max[i] = -INFINITY;
  26. row_avg[i] = NAN;
  27. }
  28. for(int i = 0; i < M; ++i){
  29. col_min[i] = INFINITY;
  30. col_max[i] = -INFINITY;
  31. col_avg[i] = NAN;
  32. }
  33. return;
  34. }
  35.  
  36. int i, j;
  37.  
  38. float tempMin = INFINITY, tempMax = -INFINITY, tempTotal = 0;
  39. float rowMin1, rowMin2, rowMin3, rowMin4, rowMin5;
  40. float rowMax1, rowMax2, rowMax3, rowMax4, rowMax5;
  41. float rowAdd1, rowAdd2, rowAdd3, rowAdd4, rowAdd5;
  42.  
  43. for(i = 0; i < M; ++i){
  44. col_min[i] = INFINITY;
  45. col_max[i] = -INFINITY;
  46. col_avg[i] = 0;
  47. }
  48.  
  49. for(i = 0; i < N; ++i){
  50. rowMin1 = INFINITY, rowMin2 = INFINITY, rowMin3 = INFINITY, rowMin4 = INFINITY, rowMin5 = INFINITY;
  51. rowMax1 = -INFINITY, rowMax2 = -INFINITY, rowMax3 = -INFINITY, rowMax4 = -INFINITY, rowMax5 = -INFINITY;
  52. rowAdd1 = 0, rowAdd2 = 0, rowAdd3 = 0, rowAdd4 = 0, rowAdd5 = 0;
  53.  
  54. for(j = 0; j + 9 < M; j += 10){
  55. if(grid[i][j] < grid[i][j + 1])
  56. rowMin1 = grid[i][j], rowMax1 = grid[i][j + 1];
  57. else
  58. rowMin1 = grid[i][j + 1], rowMax1 = grid[i][j];
  59.  
  60. if(grid[i][j + 2] < grid[i][j + 3])
  61. rowMin2 = grid[i][j + 2], rowMax2 = grid[i][j + 3];
  62. else
  63. rowMin2 = grid[i][j + 3], rowMax2 = grid[i][j + 2];
  64.  
  65. if(grid[i][j + 4] < grid[i][j + 5])
  66. rowMin3 = grid[i][j + 4], rowMax3 = grid[i][j + 5];
  67. else
  68. rowMin3 = grid[i][j + 5], rowMax3 = grid[i][j + 4];
  69.  
  70. if(grid[i][j + 6] < grid[i][j + 7])
  71. rowMin4 = grid[i][j + 6], rowMax4 = grid[i][j + 7];
  72. else
  73. rowMin4 = grid[i][j + 7], rowMax4 = grid[i][j + 6];
  74.  
  75. if(grid[i][j + 8] < grid[i][j + 9])
  76. rowMin5 = grid[i][j + 8], rowMax5 = grid[i][j + 9];
  77. else
  78. rowMin5 = grid[i][j + 9], rowMax5 = grid[i][j + 8];
  79.  
  80. rowAdd1 = grid[i][j] + grid[i][j + 1];
  81. rowAdd2 = grid[i][j + 2] + grid[i][j + 3];
  82. rowAdd3 = grid[i][j + 4] + grid[i][j + 5];
  83. rowAdd4 = grid[i][j + 6] + grid[i][j + 7];
  84. rowAdd5 = grid[i][j + 8] + grid[i][j + 9];
  85.  
  86. col_min[j] = Small(col_min[j], grid[i][j]);
  87. col_min[j + 1] = Small(col_min[j + 1], grid[i][j + 1]);
  88. col_min[j + 2] = Small(col_min[j + 2], grid[i][j + 2]);
  89. col_min[j + 3] = Small(col_min[j + 3], grid[i][j + 3]);
  90. col_min[j + 4] = Small(col_min[j + 4], grid[i][j + 4]);
  91. col_min[j + 5] = Small(col_min[j + 5], grid[i][j + 5]);
  92. col_min[j + 6] = Small(col_min[j + 6], grid[i][j + 6]);
  93. col_min[j + 7] = Small(col_min[j + 7], grid[i][j + 7]);
  94. col_min[j + 8] = Small(col_min[j + 8], grid[i][j + 8]);
  95. col_min[j + 9] = Small(col_min[j + 9], grid[i][j + 9]);
  96.  
  97. col_max[j] = Big(col_max[j], grid[i][j]);
  98. col_max[j + 1] = Big(col_max[j + 1], grid[i][j + 1]);
  99. col_max[j + 2] = Big(col_max[j + 2], grid[i][j + 2]);
  100. col_max[j + 3] = Big(col_max[j + 3], grid[i][j + 3]);
  101. col_max[j + 4] = Big(col_max[j + 4], grid[i][j + 4]);
  102. col_max[j + 5] = Big(col_max[j + 5], grid[i][j + 5]);
  103. col_max[j + 6] = Big(col_max[j + 6], grid[i][j + 6]);
  104. col_max[j + 7] = Big(col_max[j + 7], grid[i][j + 7]);
  105. col_max[j + 8] = Big(col_max[j + 8], grid[i][j + 8]);
  106. col_max[j + 9] = Big(col_max[j + 9], grid[i][j + 9]);
  107.  
  108. col_avg[j] += grid[i][j];
  109. col_avg[j + 1] += grid[i][j + 1];
  110. col_avg[j + 2] += grid[i][j + 2];
  111. col_avg[j + 3] += grid[i][j + 3];
  112. col_avg[j + 4] += grid[i][j + 4];
  113. col_avg[j + 5] += grid[i][j + 5];
  114. col_avg[j + 6] += grid[i][j + 6];
  115. col_avg[j + 7] += grid[i][j + 7];
  116. col_avg[j + 8] += grid[i][j + 8];
  117. col_avg[j + 9] += grid[i][j + 9];
  118. }
  119.  
  120. for(; j < M; ++j){
  121. if(grid[i][j] < rowMin1)
  122. rowMin1 = grid[i][j];
  123. if(grid[i][j] > rowMax1)
  124. rowMax1 = grid[i][j];
  125. rowAdd1 += grid[i][j];
  126. col_min[j] = Small(col_min[j], grid[i][j]);
  127. col_max[j] = Big(col_max[j], grid[i][j]);
  128. col_avg[j] += grid[i][j];
  129. }
  130.  
  131. rowMin1 = Small(Small(Small(rowMin1, rowMin2), Small(rowMin3, rowMin4)), rowMin5);
  132. row_min[i] = rowMin1;
  133. rowMax1 = Big(Big(Big(rowMax1, rowMax2), Big(rowMax3, rowMax4)), rowMax5);
  134. row_max[i] = rowMax1;
  135. rowAdd1 = rowAdd1 + rowAdd2 + rowAdd3 + rowAdd4 + rowAdd5;
  136. row_avg[i] = rowAdd1 / (float)M;
  137.  
  138. tempMin = Small(tempMin, rowMin1);
  139. tempMax = Big(tempMax, rowMax1);
  140. tempTotal += rowAdd1;
  141. }
  142.  
  143. for(i = 0; i < M; ++i){
  144. col_avg[i] /= (float)N;
  145. }
  146.  
  147. *min = tempMin;
  148. *max = tempMin;
  149. *avg = tempTotal / (float)(N * M);
  150. } // min_max_avg
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement