LINUX.ORG.RU

История изменений

Исправление 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 - не меняются и они бы вычислялись каждый раз. они и будут безрадостно вычисляться каждый раз в дебаг моде, в которой ты и будешь отлаживаться в основном. все что внутри цикла вычисляется и не меняется от итерации к итерации называется общим подвыражением и эти вычисления выносятся за пределы цикла, вычисляясь там, где они меняются. и не будет такого месива из индексов.