Написать программу, при компиляции которой будет задан макрос FORMULA(x) — некоторое выражение над переменной x типа double — и числовые константы MINIMUM и MAXIMUM. Написать программу, которая в цикле вводит число y и выводит double x такое, что y == FORMULA(x). Гарантируется, что FORMULA(x) — монотонно возрастающая на отрезке [MINIMUM, MAXIMUM] функция от x (например, x² на отрезке [1, 100]), и -DBL_MAX < FORMULA(MINIMUM) ⩽ FORMULA(MAXIMUM) < DBL_MAX . Если x не принадлежит отрезку, вывести Out of interval. Конец ввода — EOF.
Указание 1. Если взять a<x и b>x, то для монотонной функции f() годится метод половинного деления: если f((a+b)/2) меньше y, то сделать a равным (a+b)/2, иначе b, и так до равенства
Указание 2. Для вещественных чисел не работает a==b, но функция nextafter() покажет, что между a и b никаких других чисел уже нет. DBL_MAX описан в float.h
Вот пример для -D"FORMULA(x)"="((x)*(x))" -D MINIMUM=1 -DMAXIMUM=100:
0 3333 6666 9999 13332
Подсказка: кроме макросов вам потребуются соответствующие #include
Out of interval 57.732140 81.645576 99.995000 Out of interval
