Написал программу реализующую метод Гаусса для трехдиагональной матрицы.
В ней есть участок кода(обратный ход)
Код:
d=y2[n]=f1[n]/b1[n];
for (i=n-1; i>=0; i--)
{
d = (f1[i]-c[i]*d)/b1[i];
y2[i] = d;
}
если деление в нем поменять на умножение:
Код:
d=y2[n]=f1[n]/b1[n];
for (i=n-1; i>=0; i--)
{
d = (f1[i]-c[i]*d)*b1[i];//Здесь
y2[i] = d;
}
то время работы этого куска возрастает в 7-8 раз.
Посмотрел в дизассемблере
Код:
//вариант с умножением------------------------------------------------------------
.text:00401358 loc_401358: ; CODE XREF: _main+168j
.text:00401358 fmul qword ptr [eax+409550h]
.text:0040135E sub eax, 8
.text:00401361 cmp eax, 0FFFFFCE8h
.text:00401366 fsubr qword ptr [eax+40A1F8h]
.text:0040136C fmul qword ptr [eax+409ED0h] //отличие
.text:00401372 fst qword ptr [eax+40A520h]
.text:00401378 jge short loc_401358
//вариант с делением---------------------------------------------------------------
.text:00401358 loc_401358: ; CODE XREF: _main+168j
.text:00401358 fmul qword ptr [eax+409550h]
.text:0040135E sub eax, 8
.text:00401361 cmp eax, 0FFFFFCE8h
.text:00401366 fsubr qword ptr [eax+40A1F8h]
.text:0040136C fdiv qword ptr [eax+409ED0h] //отличие
.text:00401372 fst qword ptr [eax+40A520h]
.text:00401378 jge short loc_401358
Подскажите, пожалуйста, почему происходит увеличение времени выполнения.
P.S. n=100 но сам цикл выполняется сотни тысяч раз.