Из-за использования PIN
и ceiling
я не вижу простого способа инвертировать вычисления. Предполагая, что bid
имеет фиксированную точность (я думаю, что две точки после точки), вы всегда можете использовать двоичный поиск (так как функции монотонны).
Редактировать: Подумав об этом еще раз, я заметил, что, взяв x = bid*1.02 + 100
, мы получаем, что окончательные затраты находятся между х + 15 (исключая) и х + 70 (включительно) (т.е. x+15 < final cost < x+70
). Учитывая размер этого диапазона (70-15=55
) и тот факт, что специальные значения (см. Примечание ниже) для bid
отличаются друг от друга больше, чем это, вы можете взять x+15 = final cost
и x+70 = final cost
, получить правильные случаи / значения использования и добавленные затраты и просто решите это уравнение (в котором больше нет ни PIN
, ни ceiling
).
Для иллюстрации, пусть конечная стоимость будет 222
. Из x+15 = 222
следует, что bid = 107/1.02 = 104.90
. Тогда мы получаем, что затраты на использование задаются bid*0.1
, а дополнительные расходы 5
. Другими словами, мы получаем final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105
и, следовательно, bid = (222-105)/1.12 = 104.46
. Поскольку это значение bid
означает, что были приняты правильные значения для использования и дополнительных затрат, мы знаем, что это решение.
Однако, если бы мы сначала посмотрели на x+70 = 222
, мы получили бы следующее. Сначала мы получаем это для этого предположения, что bid = 52/1.02 = 50.98
. Это означает, что стоимость использования составляет 10
, а дополнительные расходы 5
. Таким образом, мы получаем final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115
и, следовательно, bid = (222-115)/1.02 = 104.90
. Но если bid
равно 104.90
, то затраты на использование составляют не 10
, а bid*0.1
, поэтому это не правильное решение.
Надеюсь, я объяснил это достаточно ясно. Если нет, пожалуйста, дайте мне знать.
N.B .: Под специальными значениями я подразумеваю те, для которых изменяется функция, определяющая значения использования и добавленные затраты. Например, для стоимости использования эти значения составляют 100
и 500
: ниже 100
вы используете 10
, выше 500
вы используете 50
и между вы используете bid*0.1
.