2010-11-11 54 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 2010-11-11 20:13:02

+0

這聽起來很像家庭工作問題...所以我不想說太多,但基本上你需要重新排列方程,以便它是'Max = ...' – thecoshman 2010-11-11 20:13:47

+0

這聽起來像是「爲我做作業」。用你的名字替換你的號碼。查找'max'的表達式。編碼。 – 2010-11-11 20:15:54

回答

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

讓我們表示時間與T,β用b,CURR其中c,分鐘,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); 
} 

我也將使用標識符mintime建議制止,因爲它們可能會導致衝突與std::minstd::time

+4

請不要爲他們做人的功課。他們沒有從中學到任何東西。一般來說,當他們畢業並找到工作時,將會成爲同事的負擔。 – 2010-11-11 20:17:54

+0

@Alf:我不相信這是作業。但我可能是錯的 – 2010-11-11 20:19:16

+1

@阿門:問題本身就是死亡的贈品。 「您可以使用...檢查」僅僅是110%的確認。呃,另外,任何能夠建立這個博覽會的人在編碼時都沒有問題。乾杯 – 2010-11-11 20:20:21

3

在紙上乘以(MAX - min)上的公式的每個部分,然後重新組合元素以得到MAX=some。 在你的問題中編寫C++函數之前,紙和鉛筆是你通常需要的。