дихотомии, то есть
дихотомии, то есть деления пополам, нам еще не однажды придется встретиться в других алгоритмах.)
С точки зрения двоичной арифметики, идея особенно плодотворна, поскольку возведение в степень 2 легко реализуется сдвигом аргумента на один бит влево, а деление на 2 - сдвигом вправо. Теперь несложно написать соответствующую процедуру.
function Power (a, m : byte) : longint;
var
_a : longint; {текущее значение основания степени}
_m : byte; {текущее значение показателя степени}
p : longint; {текущее значение накопленного
произведения}
begin
if m = 0 then
begin
Power := 1;
Exit
end;
p := 1;
_a := a;
_m := m;
while _m > 0 do
begin
if _m and 1 = 1 then p := p * _a;
_a := _a * _a;
_m := _m shr 1;
end;
Power := p
end;
Этот вариант функции вычисляет значение степени только для неотрицательных значениях аргументов. Более широкий диапазон входных значений позволит обрабатывать функция, написать которую предлагает
Упражнение #1.
Напишите
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа