Константин Рыжов - 100 великих изобретений
Вычислительные машины Паскаля и Лейбница, так же как и некоторые другие, появившиеся в XVIII столетии, не получили широкого распространения. Они были сложны, дороги, да и общественная потребность в подобных машинах была еще не очень острой. Однако по мере развития производства и общества такая потребность стала ощущаться все больше и больше, особенно при составлении различных математических таблиц. Повсеместное распространение в Европе конца XVIII — начала XIX века получили арифметические, тригонометрические и логарифмические таблицы; банки и ссудные конторы применяли таблицы процентов, а страховые компании — таблицы смертности. Но совершенно исключительное значение (в особенности для Англии — «великой морской державы») имели астрономические и навигационные таблицы. Предсказания астрономов относительно положения небесных тел были в то время единственным средством, позволявшим морякам определять местонахождение их кораблей в открытом море. Эти таблицы входили в «Морской календарь», который выходил ежегодно. Каждое издание требовало огромного труда десятков и сотен счетчиков. Незачем говорить, как важно было избежать при составлении этих таблиц ошибок. Но ошибки все равно были. Сотни и даже тысячи неверных данных содержали также самые распространенные таблицы — логарифмические. Издатели этих таблиц были вынуждены содержать специальный штат корректоров, проверявших полученные вычисления. Но и это не спасало от ошибок.
Положение было настолько серьезным, что английское правительство — первое в мире — озаботилось о создании специальной вычислительной машины для составления подобных таблиц. Разработка машины (ее называют разностной) была поручена известному английскому математику и изобретателю Чарльзу Бэббиджу. В 1822 году была изготовлена действующая модель. Поскольку значение изобретения Бэббиджа, а также значение разработанного им способа машинных вычислений очень велики, следует подробнее остановиться на устройстве разностной машины.
Рассмотрим прежде на простом примере метод, предложенный Бэббиджем для составления таблиц. Допустим, требуется вычислить таблицу четвертых степеней членов натурального ряда 1, 2, 3…
Пусть такая таблица уже вычислена для некоторых членов ряда в колонке 1 — и полученные значения занесены в колонку 2. Вычтем из каждого последующего значения предыдущее. Получится последовательное значение первых разностей (колонка 3). Проделав ту же операцию с первыми разностями, получим вторые разности (колонка 4), третьи (колонка 5) и, наконец, четвертые (колонка 6). При этом четвертые разности оказываются постоянными: колонка 6 состоит из одного и того же числа 24. И это не случайность, а следствие важной теоремы: если функция (в данном случае это функция y(x)=x4, где x принадлежит множеству натуральных чисел) есть многочлен n-й степени, то в таблице с постоянным шагом его n-е разности будут постоянны.
Теперь легко догадаться, что получить требуемую таблицу можно исходя из первой строки с помощью сложения. Например, чтобы продолжить начатую таблицу еще на одну строку, нужно выполнить сложения:
156+24=180
590+180=770
1695+770=2465
4096+2465=6561
В разностной машине Бэббиджа применялись те же десятичные счетные колеса, что и у Паскаля. Для изображения числа использовались регистры, состоящие из набора таких колес. Каждой колонке таблицы, кроме 1, содержащей ряд натуральных чисел, соответствовал свой регистр; всего в машине их было семь, поскольку предполагалось вычислять функции с постоянными шестыми разностями. Каждый регистр состоял из 18 цифровых колес по числу разрядов изображаемого числа и нескольких дополнительных, используемых как счетчик числа оборотов для других вспомогательных целей.
Если все регистры машины хранили значения, соответствующие последней строке нашей таблицы, то для получения очередного значения функции в колонке 2 необходимо было последовательно выполнить число сложений, равное числу сложений имеющихся разностей. Сложение в разностной машине происходило в два этапа. Регистры, содержащие слагаемые, сдвигались так, чтобы произошло зацепление зубцов счетных колес. После этого колеса одного из регистров вращались в обратном направлении, пока каждое из них не доходило до нуля. Этот этап назывался фазой сложения. По окончании этого этапа в каждом разряде второго регистра получалась сумма цифр данного разряда, но пока еще без учета возможных переносов из разряда в разряд. Перенос происходил на следующем этапе, который назывался фазой переноса, и выполнялся так. При переходе каждого колеса в фазе сложения от 9 к 0 в этом разряде освобождалась специальная защелка. В фазе переноса все защелки возвращались на место специальными рычагами, которые одновременно поворачивали колесо следующего старшего разряда на один шаг. Каждый такой поворот мог в свою очередь вызвать в каком-то из разрядов переход от 9 к 0 и, значит, освобождение защелки, которая снова возвращалась на место, сделав перенос в следующий разряд. Таким образом, возвращение защелок на место происходило последовательно, начиная с младшего разряда регистра. Такая система получила название сложения с последовательным переносом. Все остальные арифметические операции выполнялись посредством сложения. При вычитании счетные колеса вращались в противоположную сторону (в отличие от машины Паскаля, разностная машина Бэббиджа позволяла это делать). Умножение сводилось к последовательному сложению, а деление — к последовательному вычитанию.
Описанный способ можно было применять не только для вычисления многочленов, но и других функций, например, логарифмических или тригонометрических, хотя в отличие от многочленов они не имеют строго постоянных старших разностей. Однако все эти функции можно представить (разложить) в виде бесконечного ряда, то есть многочлена простого вида, и свести вычисление их значений в любой точке к задаче, которую мы уже рассмотрели. Например, sin x и cos x можно представить в виде бесконечных многочленов:
sin x = x — x3/3! + x5/5! -… + (-1)n • x2n+1/(2n+1)! +…
cos x = 1 — x2/2! + x4/4! -… + (-1)n • x2n/(2n)! +…
Эти разложения истинны для всех значений функции от 0 до p/4 (p/4=3, 14/4=0, 785) с очень большой точностью. Для значений x, которые больше p/4, разложение имеет другой вид, но на каждом из этих участков тригонометрическая функция может быть представлена в виде какого-то многочлена. Количество пар слагаемых ряда, которые принимаются в расчет при вычислениях, зависит от точности, которую желают получить. Если, к примеру, требования к точности невелики, можно ограничиться двумя-четырьмя первыми слагаемыми ряда, а остальные отбросить. Но можно взять больше слагаемых и вычислить значение функции в любой точке с какой угодно точностью. (Заметим, что 2!=1•2=2; 3!=1•2•3=6; 4!=1•2•3•4=24 и т.д.) Так вычисление значений любой функции сводилось Бэббиджем к одной простой арифметической операции — сложению. Причем при переходе от одного участка функции к другому, когда требовалось сменить значение разности, разностная машина сама давала звонок (он звонил после выполнения определенного числа шагов вычисления).
Уже одно создание разностной машины обеспечило бы Бэббиджу почетное место в истории вычислительной техники. Однако он не остановился на этом и начал разрабатывать конструкцию гораздо более сложной — аналитической машины, которая стала прямой предшественницей всех современных ЭВМ. В чем же заключалась ее особенность? Дело в том, что разностная машина, по существу, оставалась еще только сложным арифмометром и требовала для своей работы постоянного присутствия человека, который держал в своей голове всю схему (программу) расчетов и направлял действия машины по тому или иному пути. Понятно, что это обстоятельство являлось определенным тормозом при выполнении расчетов. Около 1834 года Бэббиджу пришла в голову мысль: «Нельзя ли создать машину, которая была бы универсальным вычислителем, то есть выполняла бы все действия без вмешательства человека и в зависимости от полученного на определенном этапе решения сама выбирала бы дальнейший путь вычисления?»
По существу это означало создание программно-управляемой машины. Та программа, которая до этого находилась в голове оператора, теперь должна была быть разложена на совокупность простых и ясных команд, которые бы заранее вводились в машину и управляли ее работой. Никто и никогда еще не пытался создать подобной вычислительной машины, хотя сама идея программно-управляемых устройств уже была в то время реализована. В 1804 году французский изобретатель Жозеф Жаккар придумал ткацкий станок с программным управлением. Принцип его работы сводился к следующему. Ткань, как известно, представляет собой переплетение взаимно перпендикулярных нитей. Переплетение это осуществляется на ткацком станке, в котором нити основы (продольные) продеты через глазки — отверстия в проволочных петлях, а поперечные продергиваются через эту основу в определенном порядке при помощи челнока. При самом простом переплетении петли через одну поднимаются, соответственно приподнимаются и продетые через них нити основы. Между поднятыми и оставшимися на месте нитями образуется промежуток, в который челнок протягивает за собой нить утка (поперечную). После чего поднятые петли опускаются, а остальные приподнимаются. При более сложном узоре переплетения нити следовало приподнимать в других различных комбинациях. Опусканием и подниманием нитей основы вручную занимался ткач, что обычно отнимало много времени. После 30-летней настойчивой работы Жаккар изобрел механизм, позволявший автоматизировать движение петель в соответствии с заданным законом при помощи набора картонных карт с пробитыми в них отверстиями — перфокарт. В станке Жаккара глазки были связаны с длинными иглами, упирающимися в перфокарту. Встречая отверстия, иглы продвигались вверх, в результате чего связанные с ними глазки приподнимались. Если же иглы упирались в карты в том месте, где отверстий нет, они оставались на месте, удерживая так же связанные с ними глазки. Таким образом, промежуток для челнока, а тем самым и узор переплетения нитей определялся набором отверстий на соответствующих управляющих картах.