fork download
  1. void f(unsigned& i, unsigned& j) __attribute__ ((noinline));
  2. void f(unsigned& i, unsigned& j)
  3. {
  4. if (i == j) {
  5. j = 0;
  6. i++;
  7. } else {
  8. j++;
  9. }
  10. }
  11.  
  12. void g(unsigned& i, unsigned& j) __attribute__ ((noinline));
  13. void g(unsigned& i, unsigned& j)
  14. {
  15. const bool eq = i == j;
  16. i += eq;
  17. j = (j + 1) * (1 - eq);
  18. }
  19.  
  20. void h(unsigned& i, unsigned& j) __attribute__ ((noinline));
  21. void h(unsigned& i, unsigned& j)
  22. {
  23. const bool eq = i == j;
  24. i += eq;
  25. j = (j + 1) & (eq - 1);
  26. }
  27.  
  28. #include <iostream>
  29.  
  30. int main()
  31. {
  32. unsigned i = 0, j = 0;
  33. while (i < 5) { std::cout << i << ':' << j << ' '; f(i, j); }
  34. std::cout << '\n'; i = 0; j = 0;
  35. while (i < 5) { std::cout << i << ':' << j << ' '; g(i, j); }
  36. std::cout << '\n'; i = 0; j = 0;
  37. while (i < 5) { std::cout << i << ':' << j << ' '; h(i, j); }
  38. std::cout << '\n'; i = 0; j = 0;
  39.  
  40. for (int rep = 0; rep < 1000000; ++rep) {
  41. i = 0; j = 0;
  42. while (i < 19) { f(i, j); g(i, j); h(i, j); }
  43. }
  44. std::cout << j << '\n';
  45. }
  46.  
Success #stdin #stdout 1.12s 3456KB
stdin
Standard input is empty
stdout
0:0 1:0 1:1 2:0 2:1 2:2 3:0 3:1 3:2 3:3 4:0 4:1 4:2 4:3 4:4 
0:0 1:0 1:1 2:0 2:1 2:2 3:0 3:1 3:2 3:3 4:0 4:1 4:2 4:3 4:4 
0:0 1:0 1:1 2:0 2:1 2:2 3:0 3:1 3:2 3:3 4:0 4:1 4:2 4:3 4:4 
2