fork(5) download
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. std::pair<double, double> div1(int num, double denom){
  5. double whole = std::floor(num / denom);
  6. double remain = std::fmod(num, denom);
  7. return {whole, remain};
  8. }
  9. std::pair<double, double> div2(int num, double denom){
  10. double floatdiv = num / denom;
  11. double whole;
  12. double remain = std::modf(floatdiv, &whole);
  13. return {whole, remain * denom};
  14. }
  15. std::pair<double, double> div3(int num, double denom){
  16. double whole = std::round(num / denom);
  17. double remain = std::remainder(num, denom);
  18. return {whole, remain};
  19. }
  20. int main() {
  21. double denom = 100.0 / 6;
  22. int divtype = 0;
  23. for(auto div: {div1, div2, div3}){
  24. std::cerr << "== Using div" << ++divtype << " for this run ==\n";
  25. for(int i = 40; i <= 60; ++i){
  26. auto res = div(i, denom);
  27. std::cerr << i << ": " << res.first << ", " << res.second << " = " << res.first * denom + res.second << "\n";
  28. }
  29. auto oldprec = std::cerr.precision(64);
  30. auto res = div(50, denom);
  31. std::cerr << 50 << ": " << res.first << ", " << res.second << " = " << res.first << " * " << denom << " + " << res.second << " = " << std::floor(res.first) * denom + res.second << "\n";
  32. std::cerr.precision(oldprec);
  33. std::cerr << "\n";
  34. }
  35. return 0;
  36. }
  37.  
Success #stdin #stdout #stderr 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
== Using div1 for this run ==
40: 2, 6.66667 = 40
41: 2, 7.66667 = 41
42: 2, 8.66667 = 42
43: 2, 9.66667 = 43
44: 2, 10.6667 = 44
45: 2, 11.6667 = 45
46: 2, 12.6667 = 46
47: 2, 13.6667 = 47
48: 2, 14.6667 = 48
49: 2, 15.6667 = 49
50: 3, 16.6667 = 66.6667
51: 3, 1 = 51
52: 3, 2 = 52
53: 3, 3 = 53
54: 3, 4 = 54
55: 3, 5 = 55
56: 3, 6 = 56
57: 3, 7 = 57
58: 3, 8 = 58
59: 3, 9 = 59
60: 3, 10 = 60
50: 3, 16.66666666666666429819088079966604709625244140625 = 3 * 16.666666666666667850904559600166976451873779296875 + 16.66666666666666429819088079966604709625244140625 = 66.666666666666657192763523198664188385009765625

== Using div2 for this run ==
40: 2, 6.66667 = 40
41: 2, 7.66667 = 41
42: 2, 8.66667 = 42
43: 2, 9.66667 = 43
44: 2, 10.6667 = 44
45: 2, 11.6667 = 45
46: 2, 12.6667 = 46
47: 2, 13.6667 = 47
48: 2, 14.6667 = 48
49: 2, 15.6667 = 49
50: 3, 0 = 50
51: 3, 1 = 51
52: 3, 2 = 52
53: 3, 3 = 53
54: 3, 4 = 54
55: 3, 5 = 55
56: 3, 6 = 56
57: 3, 7 = 57
58: 3, 8 = 58
59: 3, 9 = 59
60: 3, 10 = 60
50: 3, 0 = 3 * 16.666666666666667850904559600166976451873779296875 + 0 = 50

== Using div3 for this run ==
40: 2, 6.66667 = 40
41: 2, 7.66667 = 41
42: 3, -8 = 42
43: 3, -7 = 43
44: 3, -6 = 44
45: 3, -5 = 45
46: 3, -4 = 46
47: 3, -3 = 47
48: 3, -2 = 48
49: 3, -1 = 49
50: 3, -3.55271e-15 = 50
51: 3, 1 = 51
52: 3, 2 = 52
53: 3, 3 = 53
54: 3, 4 = 54
55: 3, 5 = 55
56: 3, 6 = 56
57: 3, 7 = 57
58: 3, 8 = 58
59: 4, -7.66667 = 59
60: 4, -6.66667 = 60
50: 3, -3.552713678800500929355621337890625e-15 = 3 * 16.666666666666667850904559600166976451873779296875 + -3.552713678800500929355621337890625e-15 = 50