0

次のシグネチャを持つ 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
4

2 に答える 2

3

紙の上で、方程式の各部分を にかけ(MAX - min)、要素を再グループ化して を取得しますMAX=some。紙と鉛筆は、質問のように C++ 関数を記述する前に通常必要なものです。

于 2010-11-11T20:15:59.967 に答える
2
time = beta + (1.0f - beta) * ((MAX - curr) / (MAX - min))

time を t、beta を b、curr を c、min を m、MAX を x で表します。我々は持っています

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およびの使用を控えることもお勧めします。timestd::minstd::time

于 2010-11-11T20:15:37.733 に答える