Я так понимаю, вас бОльше все-таки должно интересовать не почему быстрее или медленнее, а как сделать быстрее
нет, больше меня интересует именно почему одно быстрее другого, причём в разы, и при одинаковых условиях
Я бы согласился с тем, что проблема с памятью, и с тем, что он берёт данные из двух массивов. Но ведь во втором случае так же используется 2 массива, просто в первом варианте данные берутся из двух массивов и результат складывается в переменной, а во втором, данные хоть и берутся только из одного массива, но записываются не в одну переменную, а в разные элементы другого массива. Так, что в обоих случаях, обращение идёт к двум разнесённым в памяти массивам.
Есть ещё один аргумент против "тормозов" памяти, о котором я писал в самом начале - сначала массив заполнятся по строкам, т.е. обращение к нему шло не подряд, а через Nstr элементов. Я сделал нумерацию по столбцам, обращение стало подряд. В таких случаях обычно наблюдается многократное ускорение, во всех - но не в этом. Ускорение конечно произошло, но не более чем на 10%. Всё это вызывает у меня просто недоумение. В этом цикле и тормозить то нечему, и тем не менее это факт.
Ну, а то что в этом месте - это точно. Может, конечно, не 90% времени тратится в этом цикле, а 85% или даже 80 - сути проблемы это совсем не меняет. И уточнение этих цифр до десятых долей % мне ничем не поможет.
-- 03.04.2020, 03:39 --в одном случае pos_x только инкреметируется, а в другом - ещё и вычислятся с помощью умножения на счётчик цикла
да, это так, но как Вы сами верно заметили, разница от этого не особенно большая, а с учётом того, что эта операция выполняется во внешнем цикле - скорее всего, она вообще не оказывает сколь либо заметного влияния. А тут различия в 4 раза ...