Поскольку я вижу, что вы очень обеспокоены производительностью: если вы можете кодировать на ассемблере, то для каждого элемента массива вы можете вычесть элемент из нуля (или сделать какой-то похожий трюк, который установит флаг переноса, если элемент было положительным), а затем выполнить инструкцию «АЦП» (или аналогичную) с нулевым операндом. ADC - это инструкция, которую предлагают почти все процессоры, и она означает «Добавить с переносом». Это добавит операнд плюс значение флага переноса ЦП в аккумулятор. Таким образом, если бы элемент был положительным, то вычитание из нуля установило бы флаг переноса, что означает, что аккумулятор будет увеличиваться; в противном случае флаг переноса будет сброшен, поэтому накопитель не будет увеличиваться. Я не думаю, что это может быть быстрее, чем это.
РЕДАКТИРОВАТЬ: о, и, неужели люди проголосуют за вопрос, пожалуйста, укажите, почему вы голосуете вниз? Потому что, понимаете, если нет, то получается, что такие люди, как я, вынуждены отменить ваше отрицательное голосование своим повышением.