如何在保留总和的同时将浮点数舍入为整数?具有以伪代码写的下面的答案,伪代码将向量舍入为整数值,使得未改变的元素和舍入误差的总和最小化.我想在R中有效地实现这一点(如果可能的话,矢量化).
例如,舍入这些数字会产生不同的总数:
set.seed(1)
(v <- 10 * runif(4))
# [1] 2.655087 3.721239 5.728534 9.082078
(v <- c(v, 25 - sum(v)))
# [1] 2.655087 3.721239 5.728534 9.082078 3.813063
sum(v)
# [1] 25
sum(round(v))
# [1] 26
Run Code Online (Sandbox Code Playgroud)
从答案中复制伪代码以供参考
// Temp array with same length as fn.
tempArr = Array(fn.length)
// Calculate the expected sum.
arraySum = sum(fn)
lowerSum = 0
-- Populate temp array.
for i = 1 to fn.lengthf
tempArr[i] = { result: floor(fn[i]), // Lower …Run Code Online (Sandbox Code Playgroud)