我在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
答案 0 :(得分:3)
在纸上将(MAX - min)
上的等式的每个部分相乘,然后重新组合元素以获得MAX=some
。
在你编写C ++函数之前,你通常需要使用纸和铅笔。
答案 1 :(得分:2)
time = beta + (1.0f - beta) * ((MAX - curr) / (MAX - min))
让我们用t表示时间,用b表示beta,用c表示curr,用m表示min,用x表示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
冲突