У меня есть массив неотрицательных значений. Я хочу построить массив значений, сумма которых равна 20, так что они пропорциональны первому массиву.Выделить массив целых чисел, пропорционально компенсирующих ошибки округления
Это была бы легкая проблема, за исключением того, что я хочу, чтобы пропорциональный массив суммировал точно 20, компенсируя любую ошибку округления.
Например, массив
input = [400, 400, 0, 0, 100, 50, 50]
даст
output = [8, 8, 0, 0, 2, 1, 1]
sum(output) = 20
Однако, в большинстве случаев собираются иметь много ошибок округления, как
input = [3, 3, 3, 3, 3, 3, 18]
наивности дает
output = [1, 1, 1, 1, 1, 1, 10]
sum(output) = 16 (ouch)
Есть ли хороший способ распределить выходной массив так, чтобы он добавлял до 20 каждый раз?
Не понимаю вопроса ... что вы подразумеваете под «пропорциональным массивом» – Magnus
Зачем использовать интегральный тип, а не просто использовать тип с плавающей точкой? –
@Magnus массив, значения которого равны 20 и пропорциональны значениям в первом массиве. Вероятно, есть лучший способ сказать это. – Rob