На самом деле, если вы выполняете суммирование для больших N, добавление в порядке от наименьшего к наибольшему не лучший способ - вы все равно можете попасть в ситуацию, когда добавляемые вами числа слишком малы относительно сумма для получения точного результата.
Посмотрите на проблему следующим образом: у вас есть N суммирования, независимо от порядка, и вы хотите иметь наименьшую общую ошибку. Таким образом, вы должны быть в состоянии получить наименьшую общую ошибку, минимизировав ошибку каждого суммирования - и вы минимизируете ошибку в суммировании, добавляя значения как можно ближе друг к другу, насколько это возможно. Я считаю, что следуя этой цепочке логики, вы получите двоичное дерево частичных сумм:
Sum[0,i] = value[i]
Sum[1,i/2] = Sum[0,i] + Sum[0,i+1]
Sum[j+1,i/2] = Sum[j,i] + Sum[j,i+1]
и так далее, пока не дойдете до одного ответа.
Конечно, когда N не является степенью двойки, на каждом этапе у вас останутся остатки, которые нужно перенести в суммирование на следующем этапе.
(Поля StackOverflow, конечно, слишком малы, чтобы включать в себя доказательство того, что это оптимально. Отчасти потому, что я не нашел времени, чтобы доказать это. Но он работает для любого N, даже большого, как все дополнения складывают значения почти одинаковой величины. Ну, все, кроме log (N) из них в худшем случае не степени 2, и это ничтожно мало по сравнению с N.)