2016-04-19 5 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. 「little to much」を無視して、assert文でこれをどのように解決できますか?
  3. クライアントの数(4)がわからない場合、どのようにしてassert文でこれを解決できますか? (あなたは浮動小数点を使用したい場合は、私は考えていない
+0

最終的に立っている顧客は、通常、すべてが残っています。 – SergeyA

+4

この質問にタグを付ける理由[タグ:C++]?私は関連性を見ることができません。あなたがC++のcythonソリューションに興味があるということは、これらのタグを有効にしません。とにかくあなたの質問は話題になっています。 –

+0

問題はC++ではまったく同じですが、私はC++ソリューションにも興味があります。編集 –

答えて

1
  1. 私はそれが一例である知っているが、実際の生産コードではそうではありません。
  2. 私はまた、C++に興味とcythonソリューション残りの部分を顧客に割り当てるという答えは良いですが、浮動小数点演算は可換ではないため、信頼性がありません
  3. 近似をテストする方法を定義して使用してくださいこのPEPthis example implementationが有用かもしれません。
    assert isclose(sum(quota), stock)
  4. 私はここでの懸念を理解していますが、このアプローチはn個のクライアントに一般化すべきです。誤差は在庫の大きさに比例しますが、相対許容誤差を使用する場合は許容誤差もそれに合わせて調整してください。
  5. C++にも同じアプローチが適用されます。
関連する問題