我怎样才能想出一种算法来按给定的比例分割一系列数字,以便四舍五入的分割加起来等于原始数字

问题描述 投票:0回答:1

我正在尝试将一组数字拆分为比率(32%/68%),但希望有一种算法,以便四舍五入的拆分加起来等于原始数字拆分。直接的方法不能做到这一点。(22/48 vs 23/47)

Qty     32%     68%     Rounded Rounded 
10      3.2     6.8     3       7   
10      3.2     6.8     3       7   
5       1.6     3.4     2       3   
5       1.6     3.4     2       3   
10      3.2     6.8     3       7   
10      3.2     6.8     3       7   
5       1.6     3.4     2       3   
15      4.8     10.2    5       10
--------------------------------------- 
70      22.4    47.6    23      47  70
        22      48 

灵活性在于,分割需要尽可能接近目标比率(如果不精确的话)。 因此,如果四舍五入后的总数多出 1,则必须将其减去,但是从哪个数字开始呢? 原始数字为 70,分为 22.4/47.6。那么哪个比率更接近 32/68,是 22/48 还是 23/47? 如果22/48更好,那么可以从第一个中删除多余的部分 单个分裂之一的数量。 但该迷你分割应尽可能接近 32/68。看来如果要进行调整,就选择最大的数字,这样调整的影响就会最小。所以 5/10 可能是 4/10,而不是 2/3 是 1/4。

当迷你分割相加时,更重要的约束是总数应尽可能接近 32/68,并且必须生成原始数字。

有没有可能,圆角迷你分割加起来后会小于原始数量,因此不需要删除一些东西,而是需要添加一些东西?

algorithm math
1个回答
0
投票

记录误差——四舍五入的偏差量。例如,如果数字为 3.2 并且四舍五入为 3,则错误为 -.2。当误差为 1.6 并舍入为 2 时,误差为 0.4。每次舍入时,都会累积误差。当误差足够大时,调整舍入。一种简单的方法是将误差添加到实际数字上,然后对结果进行四舍五入。因此,误差为 0.6 的 3.2 为 3.8,四舍五入为 4。那么您的新误差将为 -.2(您从 0.6 开始,然后添加 -.8,留下 -.2)。但是,您也可以选择其他阈值来决定何时调整舍入,具体取决于您希望将调整的元素数量最小化的程度。

© www.soinside.com 2019 - 2024. All rights reserved.