Умножение
Предположим теперь, что мы пытаемся умножить эту дробь на 10 — сначала путем непосредственного умножения, которое дает ответ 3.3, а потом путем девяти последовательных операций сложения, которые дали бы последовательность результатов: 0.66, 0.99,1.3 (в этот момент мы теряем третий разряд, поскольку наша ЭВМ может запоминать только два разряда), 1.6, 1.9, 2.2, 2.5, 2.8, 3.1.
С точки зрения чистой математики, предполагающей всеобщую точность, оба метода дадут одинаковый ответ, но, поскольку в машинном алгоритме таится возможность появления погрешности округлений, при сложении получается менее точный результат, чем при умножении. Задача разработчика алгоритма и состоит в том, чтобы убедиться, что в используемом им методе учитывается точность хранения вещественных чисел (если она соответствует требованиям), или (й это более предпочтительно) в том, чтобы развить метод с целью всегда получать ответ с максимально возможной для данной ЭВМ точностью. Конечно, реальные ЭВМ работают с большей, чем два значащих разряда, точностью, но принципиального значения это не имеет.
Алгоритмы второго класса предназначены для не численных процессов. Для них возможно доказательство конечности и в общем виде, но часто более существенным является то, как быстро алгоритм завершается и сколько шагов необходимо для завершения процесса.
Одной из наиболее тщательно исследованных задач такого типа является сортировка данных в возрастающем порядке. В процессе ее исследования было разработано великое множество различных алгоритмов сортировки; для каждого метода должно было бы существовать (и для большинства существует) доказательство конечности, но основным предметом исследований было определение того, насколько быстро может быть выполнено задание для заданного объема данных. Вопрос это непростой, поскольку для некоторых алгоритмов сортировки время обработки зависит от характера данных, например от того, упорядочены ли они каким-либо образом.
Ход выполнения алгоритма. В предыдущих подразделах рассматривались свойства алгоритмов, которые можно назвать статическими. В самом деле, ведь при разработке алгоритмов важно убедиться, что их свойства постоянны во всех случаях выполнения алгоритмов. Этот подраздел посвящен динамике алгоритмов, т. е. тем свойствам, которые изменяются в процессе выполнения.
Выполнение алгоритма состоит в переходе от предыдущего шага к последующему путем последовательного выполнения каждой из составляющих шаг инструкций. Однако неоднократно и довольно часто будут встречаться инструкции, прерывающие этот упорядоченный последовательный ход выполнения. В алгоритме умножения шаг 6 содержит инструкцию перейти к шагу 4, которая при /, меньшем N, вызывает именно такое прерывание. В этих инструкциях можно отметить два важных момента:
1) они прерывают нормальный ход от предыдущего шага к последующему;
2) они делают это только тогда, когда выполняется некоторое условие. Второй момент наиболее существен — именно благодаря такому условному выполнению инструкций появляется возможность изменять режим работы алгоритма в процессе его выполнения.
Очень удобным способом иллюстрации динамики работы алгоритма является представление каждой инструкции в виде точки линии. Тогда выполнение алгоритма можно представить как движение вдоль этой линии, во время которого выполняется каждая встреченная инструкция. Преимущество такого представления состоит в том, что оно позволяет с первого взгляда увидеть все возможные пути, которые могут встретиться в процессе выполнения. Блок-схемы, которые используется многими программистами для иллюстрации алгоритмов, являются всего лишь более детализированной формой такого представления.

