2016-04-19 25 views
0

我有一定數量的資源'股票'。我有需要這種股票的客戶。股票分佈在其中。但是由於浮點運算,每個代理獲得的配額總和有時候會比庫存高一點。很多商品的浮點劃分

for i in range(10000): 
    nominal_demand = normalized_random(4) 
    stock = random.random() * 10 
    price = sum(nominal_demand)/stock 
    quota = nominal_demand/price 
    assert sum(quota) <= stock, (stock, nominal_demand) 
  1. 如何解決俏時尚這個問題呢?
  2. 如何在assert語句中解決這個問題,忽略「小到大」?
  3. 如何在assert語句中解決此問題,當客戶端數量(4)未知時。 (我知道這是在本例中,但在實際生產中的代碼不是這樣的。
  4. 我也有興趣在C++和用Cython解決方案
+0

最後一位客戶的位置通常會得到所有剩下的。 – SergeyA

+4

爲什麼你要標記這個問題[tag:C++]?我看不到任何相關性。您對C++ cython解決方案感興趣並不會使這些標籤有效。無論如何,你的問題無論如何都是無論如何都是論題。 –

+0

問題在C++中完全一樣,我也對C++解決方案感興趣,請參閱編輯 –

回答

1
  1. 如果你想使用浮點,我不認爲有一個「漂亮的解決方案」,總會有一個可能的舍入誤差,SergeyA給客戶分配剩餘部分的答案聽起來不錯,但由於浮點數學不可交換,所以不可靠。
  2. 定義並使用一種方法來測試近似值這可能是有用的PEPthis example implementation
    assert isclose(sum(quota), stock)
  3. 不知道我在這裏理解這個問題,但這種方法應該推廣給n個客戶。錯誤將隨着股票的規模而變化,但如果您使用相對公差,則公差應與其一起進行調整。
  4. 同樣的方法適用於C++。