Часть 1. Роль систем счисления в истории компьютеров
В предисловии к книге Анри Лебега “Измерение величин” академик А.Н. Колмогоров замечает: “У математиков существует склонность, уже владея законченной математической теорией, стыдиться ее происхождения. По сравнению с кристаллической ясностью развития теории, начиная с уже готовых ее основных понятий и допущений, кажется грязным и неприятным занятием копаться в происхождении этих основных понятий и допущений. Все здание школьной алгебры и весь математический анализ могут быть воздвигнуты на понятии действительного числа без всякого упоминания об измерении конкретных величин (длин, площадей, промежутков времени и т. д.). Поэтому на разных ступенях обучения с разной степенью смелости неизменно проявляется одна и та же тенденция: возможно скорее разделаться с введением чисел и дальше уже говорить только о числах и соотношениях между ними. Против этой тенденции и протестует Лебег”.
К сожалению, нечто подобное иногда наблюдается и в компьютерной науке. Владея развитой компьютерной теорией, компьютерные специалисты иногда забывают о той роли, которую сыграли системы счисления в истории компьютеров. Ведь первые счетные приборы (абаки и арифмометры), прообразы современных компьютеров, начали создаваться задолго до возникновения алгебры логики, теории алгоритмов - и главную роль при их создании сыграли именно системы счисления. Об этом не следует забывать, прогнозируя дальнейшее развитие компьютерной техники.
В истории систем счисления выделяют несколько этапов: начальная стадия счета, непозиционные системы счисления, алфавитные системы нумерации, поместные или позиционные системы счисления. Начальная стадия счета “характеризуется изображением сосчитываемых множеств при помощи частей тела, особенно пальцев рук и ног, палочек, узлов веревки и т.д. Как подчеркивается в статье И. Г. Башмаковой. и А. П. Юшкевича “Происхождение систем счисления” (“Энциклопедия элементарной математики”, том 1, “Арифметика”, 1951 г.), “+несмотря на крайнюю примитивность этого способа изображения, он сыграл исключительную роль в развитии понятия числа”. И именно в этот начальный период было сделано одно из крупнейших открытий античной математики. Речь идет о позиционном принципе представления чисел. Как подчеркивается в упомянутой выше статье Башмаковой И.Г. и Юшкевича А.П., “первой известной нам системой счисления, основанной на поместном, или позиционном принципе, является шестидесятеричная система древних вавилонян, возникшая примерно за 2000 лет до н. э.”.
Мы для повседневных вычислений используем десятичную систему счисления, предшественницей которой является индусская десятичная система, возникшая примерно в XII-м столетии нашей эры. Известный французский математик Лаплас (1749-1827) выразил свое восхищение позиционным принципом и десятичной системой в следующих словах:
“Мысль выражать все числа девятью знаками, придавая им, кроме значения по форме, еще значение по месту, настолько проста, что именно из-за этой простоты трудно понять, насколько она удивительна. Как нелегко было прийти к этой методе, мы видим на примере величайших гениев греческой учености Архимеда и Аполлония, от которых эта мысль осталась скрытой”.
Лаплас (1749-1827)
Убежденным сторонником использования индо-арабской десятичной системы счисления в торговой практике был известный итальянский математик Леонардо Пизанский (Фибоначчи), получивший математическое образование в арабских странах. В своем сочинении “Liber abaci” (1202) он писал:
“Девять индусских знаков - суть следующие: 9, 8, 7, 6, 5, 4, 3, 2, 1. С помощью этих знаков и знака 0, который называется по-арабски zephirum, можно написать какое угодно число”.
Здесь словом “zephirum” Фибоначчи передал арабское “as-sifr”, являющееся дословным переводом индусского слова “sunya”, то есть “пустое”, служившее названием нуля. Слово “zephirum” дало начало французскому и итальянскому слову “zero” (нуль). С другой стороны, то же арабское слово “as-sifr” было передано через “ziffer”, откуда произошли французское слово “chiffre”, немецкое “ziffer”, английское “cipher” и русское “цифра”.
Леонардо Пизано Фибоначчи (1170-1228)
Что касается выбора числа 10 в качестве основания десятичной системы счисления, то существует общепринятое мнение, что оно имеет “пальцевое” происхождение. Однако не следует забывать, что в древней науке число 10 всегда несло в себе особую смысловую нагрузку. Пифагорейцы называли его четверицей или тетрактидой. Говоря словами Эмпедокла в нем - “вечно текущей природы + корень источный”. Четверица 10 = 1 + 2 + 3 + 4 считалась у пифагорейцев одной из высших ценностей и являлась “символом всей Вселенной”, так как содержала в себе четыре “основных элемента”: единицу или “монаду”, обозначающую, по Пифагору, дух, из которого проистекает весь видимый мир; двойку, или “диаду” (2 = 1 + 1), символизирующую материальный атом; тройку, или “триаду” (3 = 2 + 1), то есть символ живого мира; и наконец, четверку, или “тетраду”, (4 = 3 + 1), соединявшую живой мир с монадой и поэтому символизировала целое, то есть “видимое и невидимое”. А поскольку тетрактида 10 = 1 + 2 + 3 + 4, то она выражала собой “Все”. Таким образом, гипотеза о “гармоничном” происхождении числа 10 имеет не меньшее право на существование, как и “пальцевая”.
В современной науке с развитием компьютерной техники на первые роли выдвинулась двоичная система счисления. Ее зачатки наблюдаются у многих народов. Например, у древних египтян широкое распространение получили методы умножения и деления, основанные на принципе удвоения. Изобретение двоичного способа нумерации приписывают китайскому императору Фо Ги, жизнь которого относится к 4-му тысячелетию до новой эры. Оказывается, к открытию двоичной системы счисления имели отношение многие математики, в частности, Фибоначчи. В своей книге “Liber abaci” он сформулировал “задачу о выборе наилучшей системы весовых гирь для взвешивания грузов на рычажных весах”. В русской историко-математической литературе эта задача известна под названием Баше-Менделеева в честь французского математика 17-го века Баше де Мезириака, поместившего ее в своем “Сборнике приятных и занимательных задач” (1612 г.), и выдающегося русского химика Дмитрия Ивановича Менделеева, который к концу жизни стал директором Главной Палаты мер и весов России и интересовался этой задачей по долгу своей службы.
Известно два варианта решения задачи Баше-Менделеева. Первый предполагает, что гири разрешается класть только на одну, свободную от груза чашу весов; при этом оптимальным решением является “двоичная система гирь”: 1, 2, 4, 8, 16,+, которая при взвешивании “порождает” двоичный способ представления чисел. При втором варианте гири разрешается класть на обе чаши весов; оптимальным решением при этом является “троичная система гирь”: 1, 3, 9, 27,+, которая при взвешивании “порождает” троичную симметричную систему счисления, которая и была положена Н. П. Брусенцовым в основу троичного компьютера “Сетунь”.
Но автор двоичной арифметики в истории науки доподлинно известен: это известный немецкий математик Лейбниц (1646-1716), который в 1697 г. разработал правила двоичной арифметики. Лейбниц настолько был восхищен своим открытием, что в его честь выпустил специальную медаль, на которой были даны двоичные изображения начального ряда натуральных чисел - возможно, это был тот редкий случай в истории математики, когда математическое открытие было удостоено такой высокой почести.
Лейбниц (1646-1716)
Лейбниц, однако, не рекомендовал двоичную арифметику для практических вычислений вместо десятичной системы, но подчеркивал, что “вычисление с помощью двоек, то есть 0 и 1, в вознаграждение его длиннот является для науки основным и порождает новые открытия, которые оказываются полезными впоследствии, даже в практике чисел, а особенно в геометрии: причиной чего служит то обстоятельство, что при сведении чисел к простейшим началам, каковы 0 и 1, всюду выявляется чудесный порядок”.
Блестящие предсказания Лейбница сбылись только через два с половиной столетия, когда выдающийся американский ученый, физик и математик Джон фон Нейман предложил использовать именно двоичную систему счисления в качестве универсального способа кодирования информации в электронных компьютерах (“Принципы Джона фон Неймана”).
Джон фон Нейман (1903-1957)
Таким образом, как подчеркивают многие выдающиеся математики, открытие вавилонянами позиционного принципа, а затем индусами десятичной системы счисления, основанной на позиционном принципе, а также разработку Лейбницем двоичной арифметики по праву можно отнести к разряду действительно эпохальных математических открытий, существенно повлиявших на развитие материальной культуры, в частности, на развитие компьютерной техники.
Почему же в теории чисел и в теоретической арифметике системам счисления не уделялось того внимания, которого они несомненно заслуживали? Все дело - в традиции. В античной науке, достигшей высокого уровня развития, впервые произошло сохранившееся до наших дней разделение математики на “высшую” куда относились геометрия и теория чисел, и “логистику” - прикладную науку о технике арифметических вычислений (“школьная” арифметика), геометрических измерениях и построениях. Уже со времени Платона логистика третировалась как низшая, прикладная дисциплина, не входящая в круг образования философа и ученого. Восходящее к Платону пренебрежительное отношение к школьной арифметике и ее проблемам, а также отсутствие какой-либо достаточно серьезной потребности в создании новых систем счисления в практике вычислений, которая в течение последних столетий всецело удовлетворялась десятичной системой, а в последние десятилетия - двоичной системой (в информатике), может служить объяснением того факта, что в теории чисел системам счисления не уделялось должного внимания и в этой части она не намного ушла вперед по сравнению с периодом своего зарождения.
Ситуация резко изменилась после появления современных компьютеров. Именно в этой области опять проявился интерес к способам представления чисел и новым компьютерным арифметикам. Все дело в том, что классическая двоичная система счисления обладает рядом принципиальных недостатков, главными из которых являются: проблема представления отрицательных чисел и “нулевая” избыточность классического двоичного способа представления чисел.
Особенно неприятен второй недостаток. “Нулевая” избыточность двоичного представления означает, что в системе счисления отсутствует механизм обнаружения ошибок, которые, к сожалению, неизбежно возникают в компьютерных системах под влиянием внешних и внутренних факторов. В условиях, когда человечество все больше становится заложником компьютерной революции и все чаще полагается на компьютер при решении сложнейших задач управления ракетами, самолетами, атомными реакторами, вопрос об эффективных механизмах обнаружения ошибок выдвигается на передний план. Ясно, что компьютеры, основанные на двоичной системе счисления, не всегда могут эффективно решать эту проблему.
Чтобы преодолеть указанные недостатки двоичной системы, уже на этапе зарождения компьютерной эры был выполнен ряд проектов и сделано несколько интересных математических открытий, связанных с системами счисления. Пожалуй, наиболее интересным проектом в этом отношении является троичный компьютер “Сетунь”, разработанный в Московском университете под руководством Н. П. Брусенцова. Использование в нем так называемой троичной симметричной системы счисления для представления чисел впервые в истории компьютеров поставило знак равенства между отрицательными и положительными числами, позволив отказаться от различных “ухищрений” (обратный и дополнительный код), используемых для представления отрицательных чисел. Это обстоятельство, а также использование “троичной логики” при создании программ привело к созданию весьма совершенной архитектуры, которая и была воплощена в модели “Сетуни”. Именно “Сетунь” является наиболее ярким историческим примером, подтверждающим влияние системы счисления на архитектуру компьютера!
Однако на заре компьютерной эры было сделано еще два открытия в области позиционных способов представления чисел, которые, однако, мало известны и которые в тот период не привлекли особого внимания математиков и инженеров.
В 1939 г. бельгийский врач Эдуард Цекендорф, увлекавшийся числами Фибоначчи, опубликовал статью, посвященную так называемым “суммам Цекендорфа”. Под представлением Фибоначчи-Цекендорфа понимается следующий позиционный способ представления чисел:
где a {0, 1} - двоичная цифра i-го разряда представления; n - разрядность представления; F(i) - число Фибоначчи, задаваемое с помощью следующего рекуррентного соотношения:
Однако наиболее революционным предложением в современной теории систем счисления по праву можно считать систему счисления с иррациональным основанием, предложенную в 1957 г. американским математиком Джорджем Бергманом. Под “Тау-системой”, или системой Бергмана, понимается следующий способ представления действительного числа А:
где a - двоичные цифры, 0 или 1; i = 0, ±1, ±2, ±3; - вес i-й цифры в представлении; - основание системы счисления.
На первый взгляд может показаться, что в система Бергмана не представляет собой ничего особенного по сравнению с традиционным позиционным представлением, но это только на первый взгляд. Вся суть состоит именно в том, что основанием системы счисления является знаменитое иррациональное число
, которое является корнем следующего алгебраического уравнения: x = x + 1.
Будучи корнем указанного алгебраического уравнения, “золотая пропорция” обладает следующим математическим свойством:
где n принимает значения из следующего множества: 0, ±1, ±2, ±3 +
Именно в этом обстоятельстве (иррациональное основание ) кроется причина ряда “экзотических” свойств “системы Бергмана” (более подробно о ней можно узнать на Web-сайте “Музей Гармонии и Золотого Сечения”, (http://www.goldenmuseum.zibys.com/).
Существенно подчеркнуть, что “Тау-система” переворачивает наши традиционные представления о системах счисления, более того - традиционное соотношение между числами рациональными и иррациональными. В “Тау-системе” основанием, то есть началом счисления, является некоторое иррациональное отношение , с помощью которого, используя систему (2) можно представить все другие числа, включая натуральные, дробные и иррациональные.
Идеи Цекендорфа и Бергмана получили дальнейшее развитие в работах автора настоящей статьи. В книге “Введение в алгоритмическую теорию измерения” (1977 г.) представление Фибоначчи-Цекендорфа” было обобщено с помощью понятия р-кода Фибоначчи, основанного на р-числах Фибоначчи, и разработана арифметика Фибоначчи для таких представлений.
Под р-кодом Фибоначчи понимается следующий способ представления натурального числа N:
где a {0, 1} - двоичная цифра i-го разряда представления; n - разрядность представления; F(i) - р-число Фибоначчи, задаваемое с помощью следующей рекуррентной формулы:
где р - целое неотрицательное число, принимающее значение из множества {0, 1, 2, 3 ...}.
Заметим, что понятие “р-кода Фибоначчи” включает в себя бесконечное число представлений, так как каждому р соответствует свое представление; при этом для случая р = 0 р-код Фибоначчи вырождается в классическое двоичное представление, а для случая р = 1 - в представление Фибоначчи-Цекендорфа. При р = любое р-число Фибоначчи равно 1, а это означает, что р-код Фибоначчи сводится к так называемому “унитарному коду”:
N = 1 + 1 + + + 1
А это, в свою очередь, означает, что р-коды Фибоначчи как бы заполняют пробел между классической двоичной системой счисления и унитарным кодом, включая их в качестве частных крайних случаев.
В книге “Коды золотой пропорции” (1984 г.) с использованием так называемых обобщенных золотых пропорций была обобщена система счисления Бергмана. Такие способы представления чисел были названы кодами золотой пропорции.
Под кодами золотой пропорции понимаются следующие способы представления действительного числа А:
где a - двоичные цифры, 0 или 1; i = 0, ±1, ±2, ±3; - вес i-й цифры в представлении; - “золотая р-пропорция”, являющаяся действительным корнем следующего алгебраического уравнения:
где целое число р принимает значение из множества {0, 1, 2, 3 ...}.
Заметим, что при р = 0 уравнение золотой р-пропорции вырождается в тривиальное уравнение x = 2, и при этом = 2; при р = 1 оно вырождается в уравнение для классической золотой пропорции и корень совпадает с классической золотой пропорцией.
Будучи корнем указанного алгебраического уравнения, “золотая р-пропорция” обладает следующим математическим свойством:
где n принимает значения из следующего множества: 0, ±1, ±2, ±3 +
Заметим, что код золотой пропорции (6) является весьма широким обобщением классической двоичной системы счисления (случай р = 0) и системы Бергмана (р = 1). При р = код золотой пропорции сводится к “унитарному коду”.
Таким образом, р-коды Фибоначчи (3) и коды золотой р-пропорции (6) есть не что иное, как весьма широкое обобщение классического двоичного представления. Для представления чисел они используют те же двоичные символы 0 и 1 и по форме представления ничем не отличаются от классического двоичного кода. Различие между ними возникает только на этапе интерпретации весов двоичных разрядов. Например, одна и та же комбинация двоичных знаков 1001101 представляет в двоичной системе счисления различные числа, а именно число 45 = 2 + 2 + 2 + 2 в классической двоичной системе счисления, число 19 = 13 + 3 + 2 + 1 в коде Фибоначчи (1) и число А = + + + - в “Тау-системе” (2), где золотая пропорция. Заметим, что число А является иррациональным числом! А это означает, что в “Тау-системе” мы можем представлять некоторые иррациональные числа в виде конечной совокупности битов! В этом и состоит первый неожиданный результат, вытекающий из теории кодов золотой пропорции.
Основное преимущество кодов Фибоначчи и кодов золотой пропорции для практических применений состоит в их “естественной” избыточности, которая может быть использована для целей контроля числовых преобразований. Эта избыточность проявляет себя в свойстве “множественности” представлений одного и того же числа. Например, число 19 в коде Фибоначчи имеет и другие кодовые представления:
19 = 1001101 = 1010001 = 1010010 = 0111101
При этом различные кодовые представления одного и того же числа могут быть получены одно из другого с помощью специальных фибоначчиевых операций “свертки” (011 -> 100) и “развертки” (100 -> 011), выполняемых над кодовым изображением числа. Если над кодовым изображением выполнить все возможные “свертки”, то мы придем к специальному фибоначчиевому изображению, называемому “минимальной формой”, в которой двух единиц рядом в кодовом изображении не встречается. Если же в кодовом изображении выполнить все возможные операции “развертки”, то придем к специальному фибоначчиевому изображению, называемому “максимальной”, или “развернутой” формой, в которой рядом не встречается двух нулей.
Именно эти математические результаты стали основой для проектов создания компьютерных и измерительных систем на основе “фибоначчиевого” и “золотого” представлений.
(Окончание следует)