fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. const int N = 4;
  6. const double PI = 3.14159265358979323846;
  7.  
  8. double alpha(int u) {
  9. return (u == 0) ? 1.0 / sqrt(2.0) : 1.0;
  10. }
  11.  
  12. int main() {
  13. int input[N][N] = {
  14. {23, 24, 25, 22},
  15. {26, 22, 21, 23},
  16. {20, 25, 24, 25},
  17. {24, 25, 26, 24}
  18. };
  19.  
  20. double dct[N][N];
  21.  
  22. for (int u = 0; u < N; ++u) {
  23. for (int v = 0; v < N; ++v) {
  24. double sum = 0.0;
  25. for (int x = 0; x < N; ++x) {
  26. for (int y = 0; y < N; ++y) {
  27. sum += input[x][y] *
  28. cos((2 * x + 1) * u * PI / (2 * N)) *
  29. cos((2 * y + 1) * v * PI / (2 * N));
  30. }
  31. }
  32. dct[u][v] = 0.25 * alpha(u) * alpha(v) * sum;
  33. }
  34. }
  35.  
  36. std::cout << std::fixed << std::setprecision(2);
  37. std::cout << "DCT Result:\n";
  38. for (int i = 0; i < N; ++i) {
  39. for (int j = 0; j < N; ++j) {
  40. std::cout << std::setw(8) << dct[i][j] << " ";
  41. }
  42. std::cout << "\n";
  43. }
  44.  
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0s 5324KB
stdin
Standard input is empty
stdout
DCT Result:
   47.37    -0.16    -0.63    -0.07 
   -0.95     0.92     0.51     0.38 
    0.87     0.22    -1.13     0.86 
   -0.01    -1.62    -1.70    -0.67