相关疑难解决方法(0)

如何在保留总和的同时将浮点数舍入为整数?

假设我有一个浮点数数组,按排序(让我们说升序)排序,其总和已知是一个整数N.我希望将这些数字"舍入"为整数,同时保持其总和不变.换句话说,我正在寻找一种算法,将浮点数数组(称之为 fn)转换为整数数组(称之为in),这样:

  1. 两个数组的长度相同
  2. 整数数组的总和是 N
  3. 每个浮点数fn[i]与其对应的整数之间的差值in[i]小于1(或者如果你真的必须等于1)
  4. 假设浮点数按排序顺序(fn[i] <= fn[i+1]),整数也将按排序顺序(in[i] <= in[i+1])

鉴于满足这四个条件,sum((in[i] - fn[i])^2)最好将舍入方差()最小化的算法,但这并不是什么大问题.

例子:

[0.02, 0.03, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14]
    => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[0.1, 0.3, 0.4, 0.4, 0.8]
    => [0, 0, 0, 1, 1]
[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
    => [0, 0, 0, …

language-agnostic algorithm rounding

51
推荐指数
4
解决办法
9717
查看次数

分配一个按比例补偿舍入误差的整数数组

我有一组非负值.我想构建一个值为20的值数组,以便它们与第一个数组成比例.

这将是一个简单的问题,除了我希望比例数组总和精确到20,补偿任何舍入误差.

例如,数组

input = [400, 400, 0, 0, 100, 50, 50]
Run Code Online (Sandbox Code Playgroud)

会屈服

output = [8, 8, 0, 0, 2, 1, 1]
sum(output) = 20
Run Code Online (Sandbox Code Playgroud)

但是,大多数情况都会有很多舍入错误,比如

input = [3, 3, 3, 3, 3, 3, 18]
Run Code Online (Sandbox Code Playgroud)

天真的收益率

output = [1, 1, 1, 1, 1, 1, 10]
sum(output) = 16  (ouch)
Run Code Online (Sandbox Code Playgroud)

是否有一种分配输出数组的好方法,每次最多可以增加20个?

algorithm math discrete-mathematics

7
推荐指数
2
解决办法
2156
查看次数

四舍五入浮动,同时保持总和相等

我有一个总计为整数的浮点数列表。由于种种原因,我必须使用for循环x 进行迭代,x是列表中的每个浮点数,但是由于range()函数的参数必须是整数,因此每个浮点数必须取整。但是,我希望循环的总数保持等于原始浮点数的总和,通常不将其总计为四舍五入的总和。您将如何解决这个问题?谢谢。

python

2
推荐指数
2
解决办法
933
查看次数