Berechnen einer Gleichung Lösung in C ++
Frage
Ich habe eine Funktion in C ++ mit der folgenden Signatur:
float Foo(float time, float min, float curr, float beta)
Innerhalb der Funktion mag ich MAX in der folgenden Gleichung bestimmen und zurück:
time = beta + (1.0f - beta) * ((MAX - curr) / (MAX - min))
Um die Ergebnisse zu testen, können Sie die folgenden Argumente verwenden:
Foo(0.95f, 625, 800, 0.75f)
Es sollte 1500 zurück.
Auf dem Papier habe ich die notwendigen Schritte MAX, um zu bestimmen, aber ich weiß nicht, wie das Arbeiten in Code zu erhalten. Wenn jemand den Code zur Verfügung stellen kann diese Berechnung auszuführen, wäre ich sehr dankbar.
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
Lösung
time = beta + (1.0f - beta) * ((MAX - curr) / (MAX - min))
Lassen Sie uns bezeichnen Zeit mit t, Beta mit b, Curr mit c, min mit m, und MAX mit x; wir haben
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)
so Ihre Funktion wird so sein
float Foo(float time, float min, float curr, float beta)
{
return (min*(time-beta) - curr*(1-beta))/(time-1);
}
würde ich auch von der Nutzung der Identifikatoren min
und time
Verzicht empfehlen, weil sie Konflikte mit std::min
verursachen und std::time
Andere Tipps
Auf dem Papier mehrfach jedes Teil der Gleichung auf (MAX - min)
, dann Elemente neu gruppiert MAX=some
zu erhalten.
Das Papier und der Bleistift ist, was Sie benötigen in der Regel vor dem C ++ Funktionen wie in Ihrer Frage schreiben.