История изменений
Исправление alysnix, (текущая версия) :
ты общие подвыражения вынеси сначала ручками
res[sc*i + k] op2 a[scr*i + j] * b[sc*j + k];
вот тут в цикле изменятся только k, тогда как(если б компилятор не умел их выносить за тебя) - sc * i, a[scr * i+j], sc * j - не меняются и они бы вычислялись каждый раз. они и будут безрадостно вычисляться каждый раз в дебаг моде, в которой ты и будешь отлаживаться в основном. все что внутри цикла вычисляется и не меняется от итерации к итерации называется общим подвыражением и эти вычисления выносятся за пределы цикла, вычисляясь там, где они меняются. и не будет такого месива из индексов.
это
res[sc*i + k] op2 a[scr*i + j] * b[sc*j + k];
эквивалентно этому
res[A+k] op2 B * b[C+k]
проще выглядит? быстрее считается? да.
Исправление alysnix, :
ты общие подвыражения вынеси сначала ручками
res[sc*i + k] op2 a[scr*i + j] * b[sc*j + k];
вот тут в цикле изменятся только k, тогда как(если б компилятор не умел их выносить за тебя) - sc * i, a[scr * i+j], sc * j - не меняются и они бы вычислялись каждый раз. они и будут безрадостно вычисляться каждый раз в дебаг моде, в которой ты и будешь отлаживаться в основном. все что внутри цикла вычисляется и не меняется от итерации к итерации называется общим подвыражением и эти вычисления выносятся за пределы цикла, вычисляясь там, где они меняются. и не будет такого месива из индексов.
Исходная версия alysnix, :
ты общие подвыражения вынеси сначала ручками
res[sc*i + k] op2 a[scr*i + j] * b[sc*j + k];
вот тут в цикле изменятся только k, тогда как(если б компилятор не умел их выносить за тебя) - sci, a[scr*i+j], scj - не меняются и они бы вычислялись каждый раз. они и будут безрадостно вычисляться каждый раз в дебаг моде, в которой ты и будешь отлаживаться в основном. все что внутри цикла вычисляется и не меняется от итерации к итерации называется общим подвыражением и эти вычисления выносятся за пределы цикла, вычисляясь там, где они меняются. и не будет такого месива из индексов.