Вообще то, у меня вопрос не по поводу оформления кода, а о том, почему один цикл работает в 2 раза быстрее другого.
1) Вообще-то, если код нормально оформлен, то у других обычно не возникает проблем с пониманием, что он делает. Вы просите других помочь и выплёскиваете что-то неудобоваримое, что надо сначала переписать, а потом уже попытаться понять. Как минимум, это стоит сделать из уважения к собеседникам, как максимум - вам же будет проще код отлаживать.
2) Почему разница в разы? Я вижу три варианта ответа: а) В первом случае вы дергаете перемножаемые данные из двух массивов, во втором - из одного и умножаете на константу val. Обращение к памяти, особенно для больших массивов, далеко разнесенных по памяти может дорого обойтись на фоне таких простых операций, как умножения и сложения; б) ваш метод замера времени может преподнести неприятные сюрпризы и соврать и в разы, фактически замеряя не то; в) влияет что-то вне этих циклов, но вы оставляете это за пределами своего и нашего внимания.
3) Я так понимаю, вас бОльше все-таки должно интересовать не почему быстрее или медленнее, а как сделать быстрее. Для того чтобы помочь с этим надо понимать, чего вы хотите добиться - что делает ваша функция. Иногда можно выиграть в разы, поменяв алгоритм. Поэтому вас спрашивают, что вы хотите получить.