许多货物的浮点划分

时间:2016-04-19 15:57:30

标签: python c++ floating-point cython

我有一定数量的资源'股票'。我有客户要求这个库存。 股票分配给他们。但由于浮点运算, 每个代理商获得的配额总和有时略高于股票。

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. 如何在断言语句中解决这个问题,忽略“少到多少”?
  3. 当客户端数量(4)未知时,如何在assert语句中解决此问题。 (我知道它在示例中,但在实际的生产代码中却不是。
  4. 我也对C ++和cython解决方案感兴趣

1 个答案:

答案 0 :(得分:1)

  1. 如果你想使用浮点数,我认为没有“漂亮的解决方案”。总会有潜在的舍入误差。 SergeyA的答案是将剩余部分分配给客户听起来不错但不可靠,因为浮点数学不是可交换的。
  2. 定义并使用方法测试近似相等性。这PEPthis example implementation可能很有用 assert isclose(sum(quota), stock)
  3. 我不确定我是否理解这里的问题,但这种方法应该推广给n个客户。该误差将随着库存的大小而变化,但如果使用相对公差,则公差应随之缩放。
  4. 同样的方法适用于C ++。