fork(8) download
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. const double goldenRatio = (1 + sqrt(5)) / 2; // "Золотое" число
  6.  
  7. // Рассматриваемая нами функция
  8. double function(double x) {
  9. return log(1 + x * x - cos(x)) - pow(M_E, sin(M_PI * x));
  10. }
  11.  
  12. int main() {
  13. double a, b; // Концы отрезка
  14. double accuracy; // Точность, с которой мы находим локальный максимум
  15. double x1, x2; // Точки, делящие текущий отрезок в отношении золотого сечения
  16. cin >> a >> b >> accuracy;
  17. while (fabs(b - a) > accuracy) {
  18. x1 = b - (b - a) / goldenRatio;
  19. x2 = a + (b - a) / goldenRatio;
  20. if (function(x1) <= function(x2)) // Условие для поиска максимума
  21. a = x1;
  22. else
  23. b = x2;
  24. } // Выполняем, пока не достигнем заданной точности
  25. cout << "(" << (a + b) / 2 << ", " << function((a + b) / 2) << ")";
  26. return 0;
  27. }
Success #stdin #stdout 0s 3416KB
stdin
3 4 0.0001
stdout
(3.61901, 2.31289)