Обмен значений в переменных.Для увеличения скорости работы программы при обмене значениями двух чисел
a и
b вместо конструкции
Код
{1}
a := a + b;
b := a - b;
a := a - b;
или конструкции
Код
{2}
a := a xor b;
b := a xor b;
a := a xor b;
желательно использовать буферную переменную:
Код
{3}
T := a;
a := b;
b := T;
Тестируем скорость выполнения операции обмена:
Код
const
n = 25000;
var
tm, tm1: longint;
i, j: longint;
a, b, T: word;
begin
writeln('n = ', n, ' * ', n);
a := 1; b := 12;
{----- With plus/minus -----}
tm1:= MemL[$0040:$006c];
for i := 1 to n do
for j := 1 to n do
begin
a := a + b; b := a - b; a := a - b;
end;
tm:= MemL[$0040:$006c];
tm:=tm-tm1;
writeln('#1: ',tm);
a := 1; b := 12;
{----- With xor -----}
tm1:= MemL[$0040:$006c];
for i := 1 to n do
for j := 1 to n do
begin
a := a xor b; b := a xor b; a := a xor b;
end;
tm:= MemL[$0040:$006c];
tm:=tm-tm1;
writeln('#2: ',tm);
a := 1; b := 12;
{----- With T -----}
tm1:= MemL[$0040:$006c];
for i := 1 to n do
for j := 1 to n do
begin
t := a; a := b; b := t;
end;
tm:= MemL[$0040:$006c];
tm:=tm-tm1;
writeln('#3: ',tm);
end.
Результаты тестирования:
Цитата
n = 10000 * 10000 (100,000,000 обменов)
#1: 29
#2: 29
#3: 15
n = 12000 * 12000 (144,000,000 обменов)
#1: 41
#2: 42
#3: 22
n = 15000 * 15000 (225,000,000 обменов)
#1: 64
#2: 65
#3: 38
n = 25000 * 25000 (625,000,000 обменов)
#1: 182
#2: 180
#3: 98
n = 45000 * 45000 (2,025,000,000 обменов)
#1: 584
#2: 574
#3: 318