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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top