fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. template<
  8. typename Double,
  9. typename Func,
  10. typename = std::enable_if_t<std::is_floating_point<Double>::value>
  11. >
  12. Double binEq(Double left, Double right, Double eps, Func f)
  13. {
  14. using std::swap;
  15. Double x = left;
  16. if (left > right)
  17. {
  18. swap(left,right);
  19. }
  20. Double fl = f(left), fr = f(right);
  21. if (fl*fr > 0) throw runtime_error("Wrong range");
  22.  
  23. while ( right - left > eps )
  24. {
  25. x = (left + right)/Double(2.0);
  26.  
  27. (fl * f(x) < 0 ? right : left) = x;
  28. }
  29.  
  30. return x;
  31. }
  32.  
  33. class Progress
  34. {
  35. double sum, b1;
  36. int n;
  37. public:
  38. double operator()(double q) { return sum*(q-1) - b1*(pow(q,n)-1); }
  39. Progress(double sum, double b1, int n):sum(sum),b1(b1),n(n){}
  40. };
  41.  
  42. int main()
  43. {
  44. cout << setprecision(12) << binEq(1.001,10.0,1e-13,Progress(210,10,10)) << endl;
  45. }
  46.  
Success #stdin #stdout 0.01s 5548KB
stdin
Standard input is empty
stdout
1.15689683871