好的,这就是问题所在。
假设我有一个给定的值:2000;
我有以下占位符
ph1 -> 15% of the total
ph2 -> 10% of the total
ph3 -> 25% of the total
ph4 -> 10% of the total
ph5 -> 30% of the total
ph6 -> 10% of the total
然而,每个值在任何方向上都可能浮动0.1%。我必须将delta分配给剩余的占位符。 “花费”总数必须最接近2000马克(最大变化0.1%)。我可以使用任何算法吗?
谢谢你们
答案 0 :(得分:0)
如果你跟踪剩余总量的百分比,那么应该很容易通过计算每个后面条目所代表的余数的百分比来按比例分配你的错误(“delta”)。
PH = [.15,.10,.25,.10,.30,.10]
Sum = 2000
remainder= 1.0
#recalculation after event `i` consumes `amount`
pctConsumed = amount/Sum
delta = PH[i]- pctConsumed
remainder-= PH[i]
for (i+=1;i<PH.size;i+=1)
PH[i]+= delta * PH[i]/remainder
remainder += delta