У нас есть стоимость C, которая должна быть отнесена к отделам 1..n. Другое вычисление производит долю для каждого отдела, это число от 0 до 1, с более чем 5 десятичными разрядами. Сумма всех долей департамента равна 1, но они не обязательно равны.
Цель состоит в том, чтобы вычислить точные доллары и центы для выставления счетов каждому отделу. Сумма счета должна ТОЧНО соответствовать стоимости C, она не может быть меньше или меньше нескольких копеек. Кроме того, доля каждого департамента не должна требовать дробных копеек. Кроме того, хотя несправедливо просто сбрасывать остаток в последний отдел, нет необходимости возвращаться к предыдущим временным рамкам. Обратите внимание, что простое округление доли каждого департамента до копейки почти всегда приводит к превышению / уменьшению нескольких пенни.
Пример грубого упрощения: C = 33,34, 4 отдела, каждый с долей 0,2500. Потому что 33,34 * 0,25 = 8,335, поэтому вы можете видеть, что два департамента должны платить 8,33, а два должны платить 8,34. Одно правильное назначение: d1 = 8,33, d2 = 8,34, d3 = 8,33, d4 = 8,34. Если вы округлите, каждый отдел платит 8,34, что приводит к переизбытку 0,02 доллара. Если вы умножите это на гораздо большее количество отделов и еще больше затрат, вы получите 100 долларовых расхождений.
Я хочу сделать это за 1 проход, то есть я не хочу циклически проходить, обнаруживать, что я выключен на 0,02, затем снова зацикливаться и настраивать значения до тех пор, пока он не будет правильным. Я хочу сделать это за 1 проход. Я также хотел бы знать, есть ли у этого алгоритма имя.