2010-11-11 2 views
0

У меня есть функция в C++ со следующей подписью:Вычисление решения уравнения в C++

float Foo(float time, float min, float curr, float beta) 

внутри функции, я хочу, чтобы определить и вернуть MAX в следующем уравнении:

time = beta + (1.0f - beta) * ((MAX - curr)/(MAX - min)) 

Чтобы проверить результаты, вы можете использовать следующие аргументы:

Foo(0.95f, 625, 800, 0.75f) 

Должно быть возвращено 1500.


На бумаге у меня есть необходимые шаги для определения MAX, но я не знаю, как это сделать в коде. Если кто-то может предоставить код для выполнения этого расчета, я был бы чрезвычайно благодарен.

0.95 = 0.75 + (1 - 0.75) * ((max - 800)/(max - 625)) 
0.95 = 0.75 + 0.25 * ((max - 800)/(max - 625)) 

0.95 - 0.75 = 0.25 * ((max - 800)/(max - 625)) 
0.2 = 0.25 * ((max - 800)/(max - 625)) 

0.2/0.25 = (max - 800)/(max - 625) 
0.8 = (max - 800)/(max - 625) 

0.8 * (max - 625) = max - 800 
(0.8 * max) - (0.8 * 625) = max - 800 
(0.8 * max) - 500 = max - 800 

((0.8 * max) - max) - 500 = -800 

((0.8 * max) - max) = -800 + 500 
((0.8 * max) - max) = -300 

-0.2 * max = -300 

max = -300/-0.2 

max = 1500 
+2

Чтобы получить этот код, начните сначала, но не заменяйте переменные номерами. Решите его точно так же, и вы получите ответ. (Или используйте символическую математическую программу, чтобы сделать это для вас.) – Cascabel

+0

Это очень похоже на вопрос о домашнем задании ... поэтому я не хочу говорить слишком много, но в основном вам нужно переставить уравнение так, чтобы оно было 'Max = ...' – thecoshman

+0

Это звучит так: «Сделай домашнее задание для меня». Замените свои номера на имена. Найдите выражение для 'max'. Составьте код. –

ответ

2
time = beta + (1.0f - beta) * ((MAX - curr)/(MAX - min)) 

давайте обозначим время с т, бета с Ь, Curr с с, мин с т и MAX с й; мы имеем

t = b + (1-b)(x-c)/(x-m) 
(x-c)/(x-m) = (t-b)/(1-b) 
(x-m)(t-b) = (x-c)(1-b) 
x(t-b) - x(1-b) = m(t-b) - c(1-b) 
x(t-1) = m(t-b) - c(1-b) 
x = (m(t-b) - c(1-b))/(t-1) 

так что ваша функция будет как этот

float Foo(float time, float min, float curr, float beta) 
{ 
    return (min*(time-beta) - curr*(1-beta))/(time-1); 
} 

Я бы также рекомендовал воздержаться от использования идентификаторов min и time, так как они могут привести к столкновениям с std::min и std::time

+4

Пожалуйста, не делайте домашнее задание людей для них. Они ничего не узнают от него. В целом, когда они окончат и получат работу, это будет бременем для коллег. –

+0

@Alf: Я не верю, что это домашнее задание. Но я могу ошибаться. –

+1

@Armen: вопрос сам по себе мертв. «Вы можете использовать ... для проверки» - это всего лишь подтверждение на 110%.Кроме того, любой, кто может настроить это изложение, не будет иметь проблемы с выполнением кодирования. Cheers –

3

На бумаге умножьте каждую часть уравнения на (MAX - min), затем перегруппируйте элементы, чтобы получить MAX=some. Бумага и карандаш - это то, что вам обычно нужно, прежде чем писать функции C++, например, в вашем вопросе.

Смежные вопросы