2010-02-18 70 views
2

我有下面的C公式幫助清理/求解方程

bucket = (hash - _min) * ((_capacity-1)/range()); 

我需要重新安排公式返回_capacity而不是鬥(我有其他變量除了_capacity)什麼。例如

96 = (926234929-805306368) * ((x -1) /1249540730) 
836 = (1852139639-805306368) * ((x -1) /1249540730) 

正如你可以看到它是一個相當簡單的公式,我需要的只是左邊的x。但我的代數很生鏽,所以任何幫助表示讚賞。

+0

將公式寫在一張紙上,並解決它爲x,然後開始編程。 – 2010-02-18 23:03:17

+1

對雙方都做同樣的事情...... – 2010-02-18 23:03:54

+0

是不是有一個專門用於數學的stackexchange網站?我們應該把鏈接放在這裏。 – 2010-02-18 23:44:36

回答

8
capacity = (range() * bucket)/(hash - _min) + 1; 

bucket = (hash - _min) * ((_capacity - 1)/range()); // start 
bucket = ((hash - _min) * (_capacity - 1))/range(); // rearrange 
range() * bucket = (hash - _min) * (_capacity - 1); // multiply by range 
(range() * bucket)/(hash - _min) = _capacity - 1; // divide by (hash - _min) 
(range() * bucket)/(hash - _min) + 1 = _capacity; // add 1 
capacity = (range() * bucket)/(hash - _min) + 1; // rearrange 
+0

你忍住了我。 – Nicole 2010-02-18 23:04:17

+0

非常好,謝謝 – 2010-02-18 23:14:29

+0

我有我的老代數課的倒敘。 – 2010-02-19 00:02:07

2
_capacity = 1 + bucket/(hash - _min) * range(); 

前提條件是hash可以不再等於_min

+0

true ..但即使在第一種情況下,您只能得到0作爲答案..但是,那好於DIVIDE_ZERO錯誤 – ShoeLace 2010-02-18 23:15:55

+0

如果'hash'等於'_min',那麼在第一個eq'bucket'中也將是0這會使這個等式成爲0/0。這讓我想知道......爲什麼電腦不夠智能,不能認識到0/0不是錯誤,它只是0?任何在一種形式中有效的方程應該以任何其他形式有效,如果該形式是真的相等的話。 – Nicole 2010-02-18 23:32:18

+0

@Renesis,因爲有時0/0 = 1.認真。 http://www.codeproject.com/KB/recipes/float_point.aspx(後面的第三段「擔心加法和減法不是乘法和除法」) – mctylr 2010-02-18 23:38:48