Sciences of Europe # 100, (2022)_63
ПРЕДСТАВЛЕНИЕ ЧИСЛОВОЙ ИНФОРМАЦИИ — 1
Федотов В.П.
Международная Академия информационных технологий, зав. кафедрой машинного обучения Санкт-Петербург
REPRESENTATION OF NUMERICAL INFORMATION — 1
Phedotov V.
International Academy of Information Technology, Head of the Department of Machine Learning
Saint-Petersburg DOI: 10.5281/zenodo.7049732
АННОТАЦИЯ
Первая часть обзора публикаций автора и учеников, посвящённых системам счисления. ABSTRACT
The first part of the review of the author's and students' publications on number systems. Ключевые слова: системы счисления. Keywords: number systems.
Основные способы представления чисел
Только в ХХ веке содержание математики резко оторвалось от школьного курса. А на протяжении всей предыдущей истории математику считали наукой о числе. Понятие числа прошло в ходе этой истории длительную и сложную эволюцию. Параллельно развивались и способы представления чисел.
На первобытной стадии использовались лишь небольшие натуральные числа. Их представляли при помощи нужного числа пальцев, камушков (бусин) или иных подвернувшихся под руку предметов. Весьма важным на этом этапе стало возникновение абстрактных (не связанных с конкретными предметами счёта) имён числительных. В некоторых языках их нет до сих пор.
Затем предметы стали заменять их изображениями. Чаще всего единица изображалась палочкой (клином). В какой-то момент возникла идея заменить некоторое число палочек более компактным символом (пять пальцев — рука). Так был сделан первый шаг к созданию систем счисления.
Развитие геометрии (особенно в Древней Греции) создало графическую альтернативу. В конечном счёте она воплотилась в понятии числовой прямой, а также в системе координат Декарта.
Понятие системы счисления
Хотя системы счисления используются разными народами уже более пяти тысяч лет, в математике нет точного их определения.
В некоторых учебниках можно прочесть, будто важно использование цифр. На практике цифры и буквы обычно никто не путает. Но попробуйте дать формальное определение! Чем цифры принципиально отличаются от букв?
Например, цифрами в римской записи служат те же латинские буквы. С другой стороны, важно отличать запись числа цифрами от обозначения этого же числа при помощи какой-либо переменной, например, x или п.
Как правило, запись числа цифрами более краткая в сравнении с текстом. Однако, здесь тоже есть исключения: 100 и сто, 1000 и mile, 1000000000 и миллиард (billion). Наконец, текстовая запись многозначных чисел в разных языках использует словообразование по правилам каждого конкретного языка. И эти правила тоже каким-то боком связаны с системами счисления [4].
В современных информационных технологиях (в частности, в языках программирования) под алфавитом обычно понимается огромная кодовая страница, которая может включать сотни и даже миллионы разных символов. В их числе, как правило, есть и буквы (в том числе, из совершенно разных языков), и цифры, и многочисленные специальные знаки. Различие между ними чисто семантическое (смысловое).
Не претендуя на логическую педантичность, зафиксируем всё-таки наиболее важные отличительные признаки. Итак, прежде всего, мы отделяем цифры от букв. Заметим, что формально это могут быть даже одни и те же символы. Но их роль сильно различается в зависимости от контекста. Буквы складываются в слова, согласно правилам чтения в том или ином языке. Цифры же используют для записи чисел, согласно иным правилам. Именно выбор набора таких правил отличает одну систему счисления от другой. Как будет видно из примеров, многие системы счисления используют не только цифры, а ещё и несколько служебных символов (знаки числа и-или его порядка, разделители как между фрагментами в записи одного числа, так и между разными числами и пр.).
Важно заметить, что многие системы счисления непосредственно не связаны ни с одним из естественных языков. Это означает, что запись чисел по правилам системы счисления одинаково понятна их носителям и не нуждается в переводе. С другой стороны, выше было сказано, что правила
словообразования в разных языках могут быть связаны разными системами счисления.
Классификация систем счисления [12]
Есть несколько важных качеств, оценивающих достоинства разных систем счисления. Ещё до их перечисления нужно подчеркнуть, что системы счисления могут обладать этими качествами в большей или меньшей степени, но никогда в идеале. Поэтому логичнее начинать с негативной формулировки (отсутствия нужного качества).
Неуниверсальная система счисления — система счисления, которая позволяет записать лишь относительно небольшие числа, иногда только целые (либо наоборот, только меньшие единицы).
Универсальная система счисления — система счисления, которая позволяет записать любое вещественное число (конечной или бесконечной последовательностью цифр).
Ярким примером отсутствия свойства универсальности служит римская запись. При строгом соблюдении формата её можно использовать только для записи натуральных чисел от 1 до 3999. Ни большие числа, ни отрицательные, ни дроби записать невозможно.
Десятичную систему принято считать универсальной. Ещё задолго до создания компьютеров она успешно обслуживала потребности классического естествознания. Например, чтобы записать известное из школьного курса число Авогадро, потребуется 24 цифры в целой части.
Уже с возможностью представления числа п возникает проблема. Если использовать десятичную систему, то удаётся записать только приближённые значения числа п, пусть и с известной на сегодня огромной точностью. Но при этом всегда остаются «далёкие» цифры, которые пока не удалось вычислить.
Современная теоретическая информатика оперирует со столь огромными числами, что их представление в десятичной системе невозможно даже на уровне мысленной абстракции. Например, совокупная память компьютера включает все биты всех его устройств. Можно различать любые два состояния компьютера, у которых есть отличие в значении хотя бы одного бита. Тогда общее число различных состояний компьютера окажется столь огромным, что его невозможно записать в этом же компьютере, даже если использовать всю его совокупную память [11].
Непозиционная система счисления — система счисления, в которой вес цифры не зависит от ее положения.
Позиционная система счисления — система счисления, в которой вес цифры меняется с изменением положения цифры в числе, но при этом полностью определяется написанием цифры и местом, которое она занимает. В частности, это означает, что вес цифры не зависит от значений окружающих ее цифр.
Строго говоря, даже римская запись содержит элемент позиционности. Если младшая цифра записана перед старшей, то она не прибавляется, а вычитается.
Неосновная система счисления — позиционная система счисления, в которой соотношение весов соседних разрядов может меняться.
Основная система счисления — позиционная система счисления, в которой вес каждой цифры изменяется в одно и то же число раз при ее переносе из любого разряда в соседний с ним.
Основание системы счисления — отношение весов соседних разрядов основной позиционной системы счисления.
Легко понять, что в любой основной позиционной системе счисления вес разряда равен основанию системы счисления, возведённому в степень, равную номеру этого разряда. При этом разряд единиц считается нулевым, разряды целой части нумеруются вслед за ним последовательно справа налево (десятки — первый, сотни — второй, тысячи — третий и т.д.), а разряды дробной части получают соответствующие отрицательные номера (десятые доли — минус первый, сотые — минус второй, тысячные — минус третий и т.д.).
Двойная система счисления — неосновная позиционная система счисления, в которой число фактически представлено в системе счисления с большим основанием, но вместо соответствующего набора цифр используется их представление наборами знаков в системе счисления с меньшим основанием.
Традиционная система счисления — система счисления, в которой запись числа состоит из двух частей — целой и дробной. Количество цифр перед разделяющей эти части запятой (точкой) заранее не известно и может быть сколь угодно большим. Фактически запись числа образует две последовательности цифр, разбегающиеся влево и вправо от запятой.
Информационная система счисления [12] — система счисления, в которой запись числа (в отличие от традиционной) состоит из единственной последовательности цифр. При этом каждая очередная цифра (бит) уточняет значение числа (его положение на оси). Пусть несколько первых цифр указывают на то, что интересующее нас число t содержится в некотором подмножестве и числовой оси, которое, в свою очередь, разбито на несколько непересекающихся подмножеств V1, ..., V . Тогда выбор одного из к возможных значений очередной цифры указывает на одно из этих подмножеств.
Основные позиционные системы счисления имеют весьма существенный недостаток. Число цифр перед точкой, разделяющей целую и дробную части числа, заранее не известно и может быть сколь угодно большим. Если при передаче «длинного» числа произойдет срыв сеанса связи, то в отсутствие информации о порядке числа первые его цифры, сколько бы их ни было, окажутся совершенно бесполезными. Для преодоления этого недостатка были предложены информационные системы счисления. Каждая очередная цифра числа несет в них информацию, уточняющую положение точки на числовой оси.
Это становится важным, например, при параллельных вычислениях: первые цифры числа можно
передавать очередному этапу алгоритма еще задолго до того, как найдены последующие цифры. При традиционной же записи числа первые цифры вообще не несут никакой информации о величине числа до тех пор, пока неизвестен его порядок или положение разделяющей точки (однако все последующие цифры вполне соответствуют этому требованию).
Базовой (узловой) точкой системы счисления называется число [5], которое имеет в этой системе счисления конечную (по количеству цифр) запись. Минимально возможное число цифр такой записи (без учета крайних нулей и вспомогательных знаков) называется уровнем базовой точки. Например, в десятичной системе счисления: дробь 1/2=0.5 является базовой точкой первого уровня, дробь 1/4=0.25 является базовой точкой второго уровня, а дробь 1/3=0.333333... вообще не является базовой точкой.
Неинтервальная система счисления — информационная система счисления, в которой среди подмножеств числовой оси, определенных несколькими первыми цифрами записи какого-либо числа, не все являются интервалами.
Примером может служить представление натурального числа набором остатков от его деления на несколько фиксированных чисел. Подобные способы используются в теории чисел.
Интервальная система счисления [13] — информационная система счисления, в которой все подмножества числовой оси, определенные несколькими первыми цифрами записи любого числа, являются интервалами.
Интервальные системы счисления — частный случай информационных [10]. Допустим, нам известно, что интересующее нас число t содержится в некотором интервале и числовой оси. Разобьем и на два непересекающихся интервала V и W. Если нет никаких причин предпочесть один из этих интервалов другому, то сообщение о принадлежности t именно к этому интервалу несет ровно 1 бит информации.
На этом принципе и основано нахождение цифр в интервальных системах счисления. Стартовый интервал, как правило, вся числовая ось. Ее можно разбить на два луча, выходящих из одной точки в противоположные стороны. Если заранее нет никакой информации о вероятностном распределении величины ^ то в качестве точки разбиения прямой на лучи разумнее всего взять 0. В этом случае первый бит информации о числе t просто совпадет со знаком t . На втором шаге нужно разбить на два интервала выбранный на старте луч. Ясно, что один из этих интервалов будет отрезком, а второй -лучом. Если числа представляют собой результаты измерения, то за единицу измерения удобно принять расстояние между первыми двумя выбранными точками. Тогда второй бит информации о числе t совпадет со знаком логарифма t (безразлично: натурального, десятичного, двоичного или по любому другому основанию, большему 1).
Выбор последующих точек разбиения может быть произвольным. Но ясно, что правило их выбора должно быть фиксировано заранее (и не зависеть от числа Если в качестве точек разбиения выбрать корни последовательных итераций некоторой монотонной функции, то получится соответствующая итерационная система счисления [3].
Первый бит информации о числе, чаще всего, совпадает с его знаком. Он служит ответом на вопрос о сравнении числа с нулем. В качестве второго бита разумно взять знак порядка (то есть, знак логарифма; причем совершенно безразлично, идет ли речь о натуральных, десятичных, двоичных логарифмах, либо по другому основанию, большему единицы). Этот бит служит ответом на вопрос о сравнении положительного числа с 1 или отрицательного числа с -1.
В качестве последующих битов записи числа можно брать ответ на вопрос о сравнении данного числа с числами из некоторой последовательности. Проблема в том, как задать саму последовательность. Алгоритм формирования последовательности нужно выбрать заранее, хотя конкретные ее члены будут строиться уже в зависимости от числа.
Все члены всех таких последовательностей с учетом порядка, в котором они могут появиться, удобно представить в виде дерева базовых точек данной системы счисления.
Вероятностная система счисления [1] — интервальная система счисления, представляющая собой оптимальный способ сжатия информации о значениях случайной величины Х с фиксированным распределением вероятностей Ф(Х)=Р{х<Х}.
В случае непрерывности функция Ф(Х) взаимно однозначно отображает числовую ось на интервал (0;1). Обратное отображение маркирует числовую ось. Конкретный способ записи чисел из интервала (0;1) играет здесь лишь второстепенную роль. Частными случаями являются известные специалистам по статистике медианы, квартили, де-цили и иные точки деления распределений.
Способ представления основан на известном методе деления пополам (на 10 или иное число частей), примененном к интервалу [0;1] всевозможных значений Ф(Х). Запись выбранного числа в такой системе счисления фактически представляет собой последовательность двоичных (десятичных или иных) цифр дробной части квантиля распределения Ф(Х), соответствующего этому числу.
С чисто формальной точки зрения здесь можно обнаружить взаимно однозначное (биективное) соответствие. Во-первых, для каждой такой системы счисления можно построить вероятностное распределение, соответствующее ей в этом смысле. Во-вторых, наоборот, каждому распределению Ф(Х) отвечает «своя» система счисления. Но, разумеется, далеко не все такие системы обладают «хорошими» свойствами. Поэтому, прежде всего, нужно потребовать, чтобы Ф(Х) была непрерывной и имела плотность, отличную от нуля почти везде на числовой оси.
Если Ф(Х) центрировано, то есть его медиана совпадает с нулем, то первая цифра записи числа в
соответствующей Ф(Х) системе счисления имеет смысл его знака. Часто Ф(Х) еще и симметрично, то есть Ф(-Х)=1-Ф(Х). В этом случае запись противоположных чисел отличается друг от друга только знаком (первым битом).
Если, кроме того, Ф(Х) нормировано, то есть квартили распределения Ф(Х) совпадают с -1 и +1, то второй бит записи в этой системе счисления имеет смысл знака порядка. Серьезным усилением этого свойства может служить симметрия Ф(Х) относительно логарифмирования, то есть Ф(1/Х)=3/2-Ф(Х) для Х>0.
Перечисление примеров следует начать с далеко не самого простого, но весьма актуального для практических приложений. Это система счисления, связанная с нормальным распределением Гаусса. Наверное, ее нужно назвать нормальной.
А с технической точки зрения наиболее интересны такие вероятностные системы счисления, которые одновременно являются и итерационными системами счисления. Это означает существование такой функции g(x), корни итераций g(g(x)), g(g(g(x))), ... которой совпадают с квантилями Ф(Х), отвечающими «коротким» (с данным числом цифр) двоичным (десятичным или иным) дробям (узловым точкам выбранной системы счисления).
В качестве не слишком стандартного такого примера можно привести золотую систему счисления [6], для которой Ф(Х) - распределение Коши, а g(x)=x-(1/x)—2ctg(2arctgx).
Так как в роли Ф(Х) может оказаться любое вероятностное распределение, то его конкретный вид и специфические свойства в принципе не подчинены никаким условиям, кроме самых общих. Иное дело, если речь идет о распределении Ф(Х), связанном с определенным типом систем счисления. В несколько иных терминах эта задача уже была рассмотрена для башенных систем счисления [2]. В частности, там были обнаружены относительно редкие геометрические свойства графика Ф(Х).
Если на график «смотреть издали», то он похож на «лесенку» (график ступенчатой функции), причем ее большие ступени чередуются с малыми. Однако, если затем «присмотреться повнимательнее», то есть увеличить масштаб изображения, то участки графика, прежде казавшиеся почти прямолинейными, распадаются в серию невысоких ступеней, которые, в свою очередь, распадутся на еще более мелкие при очередном увеличении масштаба. Для башенной системы счисления с основанием d=2 удалось также заметить, что наиболее длинные почти горизонтальные участки графика Ф(Х) сосредоточены вблизи значений этой функции, крат-
п
ных дробям со знаменателем вида 3 (причем, чем меньше п, тем крупнее соответствующие ступени).
Здесь можно увидеть далеко идущую аналогию с самоподобием и фракталами. Отдельные фрагменты графика подобны друг другу, причем с этой точки зрения строение графика идентично многим широко известным фрактальным кривым. Более того, и совокупность узловых точек башенной системы счисления представляет собой фрактал на числовой прямой.
Следующий сюжет - операции (как над самими случайными величинами, так и над их вероятностными распределениями). Они приводят к практически необозримому семейству новых операций: как над самими системами счисления, так и над числами, записанными с их помощью. Здесь важно различать два аспекта. С одной стороны, именно вероятностные системы счисления наиболее удобны для представления серии значений случайной величины с известным распределением. С другой, вероятностная система счисления сама пригодна в качестве одного из способов задания этой случайной величины. Но хотя по смыслу эти два контекста кажутся весьма далекими друг от друга, соответствующие операции приведут к одному и тому же результату, независимо от его конкретной трактовки.
Итерационная система счисления — интервальная система счисления, в которой в качестве точек разбиения (границ интервалов) выбираются корни последовательных итераций некоторой монотонной функции.
Обозначим через M множество функций y=f(x) со следующими свойствами:
1) областью определения f(x) является вся числовая ось,
2) f(x) строго монотонно возрастает,
3) областью значений f(x) является полупрямая x>0.
Через K обозначим множество функций g(x), обратных функциям из M. Эти функции также обладают свойством 2) и, кроме того, свойствами:
4) областью определения g(x) является полупрямая x>0,
5) областью значений g(x) является вся числовая ось.
Наконец, удобно рассмотреть множество G, состоящее из четных функций, определенных при всех x>0, сужения которых на полуось x>0 являются функциями из K.
Зафиксируем теперь функцию f(x) из M и соответствующую ей g(x) из G. Для записи произвольного вещественного числа в итерационной системе счисления, связанной с этими функциями, будут использоваться всего три символа: N, O и P, средний из которых играет роль нуля, а крайние - отрицательной (Negative) и положительной (Positive) единиц. Построение самой записи полностью повторяет конструкцию для башенных систем счисления. Более того, башенные системы счисления являются частным случаем итерационных: там в роли f(x) выступает показательная функция.
Как и там, для произвольного x сначала составляется последовательность знаков чисел x, g(x), g(g(x)), g(g(g(x))) и т.д. Затем модифицируем знаки, в зависимости от четности числа предшествующих минусов. Это и будет запись в итерационной системе счисления.
Так как выбранные для модификации знаков латинские буквы следуют друг за другом по алфавиту, то представления чисел в итерационной системе счисления можно рассматривать как слова, составленные из этих трех букв, и сравнивать
положение слов друг относительно друга в принятом в словарях лексикографическом порядке. При этом окажется, что чем меньше x, тем раньше соответствующее слово стоит в словаре.
Башенная система счисления [8] — итерационная система счисления, в которой каждый очередной бит в записи числа имеет смысл знака логарифма от абсолютной величины мантиссы, полученной на предыдущем шаге.
Вслед за общеизвестными действиями над числами - сложением, умножением и возведением в степень, каждое из которых является итерацией предыдущего, четвертый член этой последовательности бинарных операций получил название башни. В отличие от традиционно рассматриваемых башен, в которых все показатели степени равны друг другу и положительны, рассмотрим башни со знакопеременными (но равными по абсолютной величине) показателями.
Оказывается, что, если зафиксировать такой показатель и произвольно выбирать последовательность знаков, то каждое вещественное число однозначно представляется в виде соответствующей башни (конечной - заканчивающейся нулем, либо бесконечной). Тем самым возникает совершенно новый тип систем счисления: показатель башни играет роль основания системы счисления, а знаки -цифр.
Алгоритм представления числа в башенной системе счисления весьма прост [9]. Первый знак -это знак самого числа. Затем, на каждом последующем шаге, если число не равно нулю, то его нужно заменить логарифмом (по фиксированному основанию - основанию башни, обозначим его d) от абсолютной величины числа. Очередной знак - знак этого логарифма. Алгоритм обратного преобразования также не сложен и сводится к серии операций возведения в степень.
Этому процессу можно придать следующий смысл. С точки зрения «здравого смысла» вещественное число с вероятностью 50% положительно, либо отрицательно. Поэтому информация о знаке числа составляет в точности 1 бит. Следующий бит - информация о знаке логарифма от абсолютной величины числа и т.д. Таким образом, знаки на каждом шаге несут этот «информационный» смысл.
Оказывается, что лучше фиксировать не сами знаки, а несколько их модифицировать. Чтобы не возникло путаницы, для модифицированных знаков используем другие обозначения - латинские буквы P и N (от слов positive и negative соответственно). Кроме того, введем третий знак - букву O (для фиксации особого случая, когда на каком-либо шаге процесс закончится появлением нуля, логарифмировать который уже невозможно; ясно, что этот знак может появиться только в самом конце записи).
Модификация происходит следующим образом. В качестве первого знака башенного представления числа x используем P, если это число положительно, и N, если оно отрицательно. Если же x=0, то его башенное представление сводится к O. Начиная со следующего шага, учитываем четность числа
минусов, уже замененных буквами. Каждый новый минус инвертирует все последующие знаки. Таким образом, если еще не было минусов, замененных буквами, либо их число четно, то буквы, как и на первом шаге, выбираются в соответствии с их смыслом. Если же число использованных минусов нечетно, то выбираются противоположные соответствующим знакам буквы.
Целью такой модификации является достижение монотонности соответствия между точками числовой прямой и их башенными представлениями. Выбранные для модификации знаков латинские буквы непосредственно следуют друг за другом в латинском алфавите. Башенные представления чисел можно рассматривать как слова, составленные из этих трех букв, и сравнивать положение слов друг относительно друга в принятом в словарях лексикографическом порядке. Оказывается, что чем меньше x, тем раньше соответствующее слово стоит в словаре.
Если речь идет об интервальных системах счисления, то их базовые точки естественным образом (с учетом как неравенств между ними, так и вхождений записи одного числа в качестве подстроки в запись другого числа) выстраиваются в двоичное дерево. Вершиной дерева (и единственной на нулевом уровне базовой точкой) служит число, записываемое одной лишь цифрой O (в любой башенной системе счисления это 0). На первом уровне лежат два числа - NO и PO (в любой башенной системе счисления это -1 и 1). На втором уровне лежат четыре числа - NNO, NPO, PNO, PPO (они равны -d, -1/d, 1/d и d, где через d обозначено основание башенной системы счисления). На третьем уровне лежат восемь чисел - NNNO, NNPO, NPNO, NPPO, PNNO, PNPO, PPNO и PPPO (равные соответственно -dd, -d1/d -1/d1/d -1/dd, 1/dd, 1/d1/d, d1/d и dd ). Аналогично, на каждом последующем уровне число базовых точек удваивается (на k-ом уровне имеем 2k точек). Запись каждого из этих чисел содержит k+1 цифру. Последней цифрой записи является O, а k предыдущих цифр могут быть любой последовательностью цифр N и P.
Обозначим башенное представление числа x через B(x) и найдем его в простейших случаях. Ясно, что всегда (при любом d) справедливы равенства B(0)=0, B(1)=PO и B(-1)=NO .
Далее, для примера рассмотрим случай d=2. Имеем B(2)=PPO,
B(-2)=NNO, B(1/2)=PNO, B(-1/2)=NPO, B(4)=PPPO, B(-4)=NNNO, B(1/4)=PNNO, B(-1/4)=NPPO, B(16)=PPPPO, B(65536)=PPPPPO и т.д.
Последующие вычисления показывают, что, с одной стороны, точными башенными числами (заканчивающимися знаком O) могут быть как дроби, так и иррациональные числа, а, с другой стороны, некоторые целые числа (например x=3 при d=2) не являются точными башенными числами. Более того, в случае любого целого основания башни, целые числа крайне редко будут представляться конечной цепочкой знаков. Поэтому башенные системы счисления никак не предназначены для представления целых чисел, а для теоретических
исследований наиболее важным является случай d=e~2,718... .
Зато, в сравнении с основными позиционными системами счисления, башенные позволяют гораздо более эффективно сворачивать информацию о вещественном числе. Выше уже сказано, что каждый бит можно естественным образом интерпретировать как выбор одной из двух равновероятных возможностей для знака числа или очередного логарифма. Кроме того, нет необходимости разбивать запись вещественного числа на две части (мантиссу и порядок). Наконец, снимаются ограничения на представление как очень больших, так и очень малых по абсолютной величине чисел. Поэтому создание микропроцессоров, основанных на представлении вещественных чисел в башенных системах счисления, может резко повысить производительность компьютеров в их наиболее слабом сегодня месте - операциях «с плавающей точкой».
Разумеется, арифметические действия с башенным представлением чисел более трудоемки, чем традиционные. Однако это препятствие нужно будет преодолеть только один раз - на этапе проектирования и создания микропроцессоров, базирующихся на таких вычислениях. Сами же вычисления будут проходить в быстрых регистрах, чего пользователь просто не заметит. В качестве аналогии здесь вполне уместен пример с логарифмической линейкой: достаточно было один раз научиться ее градуировать, чтобы затем на протяжении нескольких столетий она оставалась одним из наиболее удобных вычислительных устройств.
Определенным неудобством предложенной формы записи являются возникающие трудности с ее графическим представлением. Чтобы получить возможность строить графики, можно рассмотреть функцию распределения Р(х), отвечающую описанной выше «вероятностной интерпретации». Центрирование и перенормировка F(x)=4P(x)-2 дают более удобную для исследования функцию: она четна, монотонна, а уравнение F(x)=x при d=2 имеет 7 корней: х=-1, -1/2, -1/4, 0, 1/4, 1/2, 1 .
В случае башенных систем счисления множество базовых точек имеет довольно интересную геометрию. Оно обладает обоими атрибутами фракталов: самоподобием и дробной размерностью. Причем оба свойства относятся не только к множеству базовых точек, но и продолжаются на связи между ними (иерархию дерева и неравенства).
Перечисление основных систем счисления [12]
Единичная система счисления. Простейшая, но абсолютно неудобная система счисления. Основана на единственной цифре - единице (палочке). Позволяет записывать только натуральные числа. Чтобы представить число в этой системе счисления нужно записать столько палочек, каково само число. Использовалась нецивилизованными племенами, потребности которых в счете, как правило, не выходили за рамки первого десятка. Чисто формально единичную систему счисления можно отне-
сти к числу основных (с основанием 1). Но, в отличие от остальных основных систем счисления, считать ее позиционной можно лишь с очень сильной натяжкой, а универсальной она вообще не является (в ней нельзя представить ноль, дроби и отрицательные числа).
Двоичная система счисления. В настоящий момент - наиболее употребительная в информатике, вычислительной технике и смежных отраслях система счисления. Использует две цифры - 0 и 1, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной части.
Троичная система счисления. Использует три цифры - 0, 1 и 2, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. В более далекой перспективе просматривается возможность перехода компьютерной отрасли на троичную систему счисления, так как она позволяет более эффективно сворачивать числовую информацию (как показал Джон фон Нейман, это следует из того, что число 3 ближе, чем 2, к основанию e натуральных логарифмов).
Уравновешенная троичная система счисления. В отличие от обычной троичной системы счисления, вместо цифры 2 использует другую цифру -со значением -1. Это позволяет отказаться от особого обозначения для знака числа, так как знак числа определяется знаком его первой цифры. Кроме того, для этих цифр упрощаются таблицы сложения и умножения [7]. Для удобства и большей выразительности вместо цифр чаще пишутся буквы: -1=N (negative), 0=O (внешнее сходство), 1=P (positive). Так как получились три подряд идущие буквы алфавита, то переход от значения цифры к ее коду (обозначению) или обратно осуществляется одной общей арифметической операцией (не требует логических операций и анализа). Среди первых электронных вычислительных машин была и московская «Сетунь», арифметическое устройство которой базировалось на таком представлении чисел.
Система счисления с основанием 4. Использует четыре цифры - 0, 1, 2 и 3, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. О практическом использовании этой системы счисления пока ничего не известно. Однако перспектива есть по двум причинам. Во-первых, аналогичная 8 и 16 связь с двоичной системой, что позволяет легко переводить числа из любой из этих систем в любую другую. Во-вторых, наличие именно 4 базовых аминокислот, ставших своеобразным алфавитом быстро развивающейся генетики.
Система счисления с основанием 7. Семь дней недели, семь нот, семь чудес Света, семь цветов радуги (хотя нормальный глаз видит их там только шесть, не разделяя оттенков синего и голубого) и многочисленные другие примеры указывают на то, что и это число служило разрядной единицей. А название праздника «пятидесятница», как
и пришедший из древнееврейского языка «юбилей»
- это вовсе не половина от ста, а число, следующее за 49 - второй разрядной единицей системы счисления с основанием 7.
Восьмеричная система счисления. Использует восемь цифр - 0, 1, 2, 3, 4, 5, 6, и 7, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Широко использовалась в программировании в 1950-70-ые гг. К настоящему времени практически полностью вытеснена шестнадцате-ричной системой счисления, однако функции перевода числа из десятичной системы в восьмеричную и обратно сохраняются в микрокалькуляторах и многих языках программирования.
Десятичная система счисления. Использует десять обычных цифр - 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Существует массовое заблуждение, будто именно десятичная система счисления является наиболее употребительным способом записи чисел. Между тем, более внимательный анализ правил чтения и записи чисел приводит к другому выводу: система счисления, которой мы обычно пользуемся, фактически является двойной, так как имеет основания - 10 и 1000. В частности, в русском языке известны названия только для первых семи разрядов десятичной системы счисления ( 1 - единица, 10 - десяток, 100 - сотня, 1000 - тысяча, 10000 - тьма, 100000 - легион, 1000000 - миллион ), но предпоследние два из них (легион и тьма) давно вышли из употребления, а соседние с ними (миллион и тысяча) - названия классов, а не только разрядов. Итак, фактически в русском языке остались лишь два самостоятельных названия для десятичных разрядов: десяток и сотня. В других языках
- аналогичная ситуация.
Одиннадцатеричная система счисления употребляется в языке для устного счета народом маори - коренным населением Новой Зеландии.
Двенадцатеричная система счисления. На ее широкое использование в прошлом явно указывают названия числительных во многих языках, а также сохранившиеся в ряде стран способы отсчета времени, денег и соотношения между некоторыми единицами измерения. Год состоит из 12 месяцев, а половина суток состоит из 12 часов. В русском языке счет часто идет дюжинами, чуть реже гроссами (по 144=122), но в старину использовалось и слово для 1728=123. В английском языке есть особые (а не образованные по общему правилу) слова eleven (11) и twelve (12). Английский фунт состоит из 12 шиллингов.
Шестнадцатеричная система счисления. Использует шестнадцать цифр - 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 в их обычном смысле, а затем A=10, B=11, C=12, D=13, E=14, F=15 . Также использует символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Внедрена американской корпорацией IBM. Широко используется в программировании для
IBM-совместимых компьютеров. С другой стороны, в некоторых языках сохранились и следы использования этой системы счисления в прошлом. Например, в романских языках (испанском, французском и др.) числительные от 11 до 16 образуются по одному правилу, а от 17 до 19 - по другому. А в русском языке известен пуд, равный 16 килограммам.
Уравновешенная девятнадцатеричная система счисления. Использует девятнадцать цифр -0, 1, 2, 3, 4, 5, 6, 7, 8 и 9, а также символы «+» и «-» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Так как запись знаков внутри цифр достаточно неудобна, то плюс при положительных цифрах не пишут вообще, а отрицательные цифры вместо минуса над-черкивают. При таком подходе таблицы сложения и умножения в этой системе счисления повторяют те же таблицы для обычной десятичной системы, но с учетом знаков цифр (в частности, сложение заменяется вычитанием, а при умножении знак произведения зависит от четности числа отрицательных множителей). Так как 192=361, то двух таких цифр достаточно для указания 360 направлений, измеряемых целым числом градусов.
Двадцатеричная система счисления. Во французском языке способ образования числительных от 80 до 99 явно указывает на употребление этой системы счисления в прошлом. Например, quatre-vingt-dix (90) в буквальном переводе означает «четыре по двадцать и десять». Не столь сильно выражены следы ее использования в других языках. Однако в большинстве европейских языков, как и в русском, числительные до 20 и после 20 образуются по разным правилам. В русском языке можно заметить также разные правила образования числительных, кратных ста, до 400=202 и после. Английский шиллинг состоит из 20 пенсов.
Система счисления с основанием 32. О практическом использовании этой системы счисления пока ничего не известно. Однако перспектива есть по двум причинам. Во-первых, аналогичная 8 и 16 связь с двоичной системой, что позволяет легко переводить числа из любой из этих систем в любую другую. Во-вторых, в русском языке (если не различать «е» и «ё») как раз 32 буквы.
Система счисления с основанием 36. Так как 36=10+26, то 36 - последнее основание, до которого можно «дотянуть» обозначение цифр буквами латинского алфавита по правилу, действующему для шестнадцатеричной системы счисления.
Система счисления с основанием 40. Совершенно особое слово «сорок» и часто используемое в русском языке выражение «сорок сороков» явно указывают на употребление в прошлом и этой системы счисления. Числительные, обозначающие десятки, до 40 и после 40 образуются по разным правилам. Это же число 40 является соотношением между русскими единицами веса - пудом (16кг) и фунтом (400г).
Шестидесятеричная система счисления до сих пор сохранилась в измерении углов и времени. Угол равностороннего треугольника (а в древности
за основу брался именно он, так как его построить легче, чем прямой или развернутый) делится на 60 градусов. Градус, как и час, делится на 60 минут, а минута - на 60 секунд (и не важно, о чем здесь идет речь - о времени или углах). На шестидесятерич-ную систему счисления указывает и способ образования числительных от 60 до 79 во французском языке. Например, soixante-dix-nef (79) можно перевести как «шестьдесят и девятнадцать».
Тысячная система счисления должна была бы использовать тысячу различных цифр. Наверное, такое возможно в Китае, имеющем тысячи иероглифов. Но подавляющее большинство европейцев не имеет навыка удерживать в голове и различать столь большое количество различных знаков. И тем не менее, именно тысячная система счисления лежит в основе образования числительных во всех европейских языках. А вместо тысячи цифр используется их представление в десятичной системе, что в конечном счете приводит к двойной системе счисления: десятично-тысячной. Чтобы не путать разряды двух разных систем счисления, разряды тысячной системы счисления называют классами. Первые из них - единица, тысяча, миллион, миллиард. Так как большие числа употребляются сравнительно редко, то принятые в разных языках названия для последующих классов оказались в конфликте друг с другом. В одних языках (включая русский) слово «биллион» используется для обозначения 1000 миллиардов, а в других - как синоним самого миллиарда. Но зато дальше «полная ясность»: 1000 биллионов называется триллионом, 1000 триллионов называется квадриллионом, 1000 квадриллионов называется квинтиллионом, 1000 квинтиллионов называется секстиллионом, 1000 секстиллионов называется септиллионом, 1000 септиллионов называется окталлионом, 1000 окталли-онов называется ноналлионом, 1000 ноналлионов называется дециллионом, 1000 дециллионов называется ундециллионом и т.д.
Примеры двойных систем счисления
Двоично-восьмеричная система счисления. Если двоичную запись числа разбить на триады (тройки цифр) и вставить между ними пробелы, то получится двоично-восьмеричное представление числа. Так как 23=8, то после замены каждой триады на восьмеричную цифру, равную значению этой триады, получится представление числа в восьмеричной системе счисления. Тем самым, двоично-восьмеричная система счисления становится промежуточным этапом перевода чисел из двоичной системы в восьмеричную и обратно. Простота алгоритма перевода, а также близость чисел 8 и 10 послужили причинами широкого распространения восьмеричной и двоично-восьмеричной систем счисления в программировании в 1950-70-ые годы.
Двоично-десятичная система счисления. Десятичные цифры от 0 до 9 заменяются представляющими их двоичными тетрадами: 0=0000, 1=0001, 2=0010, 3=0011, 4=0100, 5=0101, 6=0110, 7=0111, 8=1000 и 9=1001. Такая запись очень часто используется как промежуточный этап перевода числа из десятичной системы в двоичную или обратно. Так
как 10 не является точной степенью 2, то используются не все 16 тетрад, а алгоритмы арифметических операций над многозначными числами здесь более сложны, чем в основных системах счисления. И тем не менее, двоично-десятичная система счисления применяется даже на этом уровне во многих микрокалькуляторах и некоторых компьютерах (в частности, «Ямаха» стандарта MSX).
Двоично-шестнадцатеричная система счисления. Так как 24=16, то двоично-шестнадцатерич-ная система счисления используется аналогично двоично-восьмеричной, как промежуточный этап при переводе чисел из двоичной системы в шестна-дцатеричную и обратно.
Байтовая (2-256) «система счисления». Содержимое файла в известном смысле не зависит от его типа и предназначения. С точки зрения внутренней структуры файл представляет собой конечную последовательность байтов. Каждый байт - это 8 битов, которые в двоичной системе счисления можно прочитать как целое число от 0 до 255. Каждое такое число (код) можно рассматривать как цифру в системе счисления с основанием 256. Так как файл представляет собой единую последовательность байтов (и в отличие от традиционной записи числа не разделен на целую и дробную части), то возможны два варианта прочтения файла, как числа. Во-первых, можно считать файл целым числом. Во-вторых, можно, напротив, считать целую часть нулевой (как и в записи в формате с фиксированной запятой). Каждый из этих двух подходов имеет свои плюсы и минусы. Явное преимущество второго состоит в том, что при записи в конец файла его числовое значение будет меняться в некотором смысле не очень значительно. Например, в случае текстовых файлов и при условии, что коды букв алфавита идут в порядке возрастания, именно во втором случае числовые значения файлов будут согласованы с положением этих текстов в словаре (в алфавитном порядке), тогда как в первом случае больший номер достанется файлу с более длинным текстом.
Десятично-тысячная система счисления. Система счисления, которой мы обычно пользуемся, фактически является двойной и имеет основания 10 и 1000. Это проявляется как в записи «длинных» чисел с пробелами (в англоязычном формате - запятыми) между классами (тройками разрядов), так и в правилах чтения. Число читается по классам (т.е. разрядам тысячной системы счисления) и лишь внутри класса - по десятичным разрядам. Алгоритмы перевода между основными и двойными системами Прямое суммирование
В случае любой системы счисления значение числа можно получить, умножив каждую цифру на вес её разряда и сложив все полученные произведения. Для основных систем счисления вес разряда равен основанию системы счисления, возведённому в степень, равную номеру разряда.
Для примера ограничимся переводом в десятичную систему двоичного числа 110101,011. Единицы целой части стоят здесь в нулевом, втором,
четвёртом и пятом разрядах. Их веса — 1, 4, 16 и 32. Единицы дробной части стоят во втором и третьем (отрицательных) разрядах. Их веса — 0,25 и 0,125. Сумма всех перечисленных весов — 53,375.
Схема Горнера Прямое суммирование крайне неудобно в случае систем счисления с большими основаниями. Даже если заранее составить таблицу степеней оснований и их произведений на цифры, придётся суммировать несколько многозначных чисел. Более удобным признано последовательное умножение на основание системы счисления с добавлением очередной цифры на каждом шаге счёта.
Для примера переведём в десятичную систему число, записанной в 16-чной системе счисления как ЛВСБЕР. Для начала вспомним, что буквами от А до Б в 16-чной системе счисления обозначены цифры со значениями от 10 до 15. Их нужно последовательно умножать на 16, добавляя на каждом шаге следующую цифру.
Последовательно получаем: 1016+11=171, 171-16+12=2748, 2748-16+13=43981, 43981-16+14=703710, 703710^16+15=11259375. Перевод дробных частей выполняется аналогично, начиная с крайней (последней) цифры. Разница только в том, что вместо умножения выполняется деление. Во многих случаях оно может привести к появлению бесконечных (периодических) дробей.
Как и в случае прямого суммирования, схему Горнера можно применять для перевода в любую систему счисления. Важно, что вычисления тогда нужно выполнять по её правилам.
Например, при переводе в 8-чную систему счисления десятичное 10 запишется как 12, а 100 как 144. Значит, перевод десятичного 123 даст: 1 144+2 12+3= 144+24+3 = 173.
Последовательное деление с остатком В последнем примере вычисления проводились в 8-чной системе счисления. На практике это очень неудобно (из-за отсутствия нужного навыка или подходящих вычислительных устройств) и чревато ошибками. Всегда есть возможность воспользоваться другим алгоритмом, чтобы провести вычисления в десятичной (или иной удобной) системе счисления. В частности, перевод числа в любую систему счисления можно получить, последовательно разделив с остатком на её основание.
Ограничимся примером того же десятичного 123. Делим его на 8. На первом шаге получаем частное 15 и остаток 3. На втором шаге делим 15 на 8 и получаем частное 1 и остаток 7. На третьем шаге делим 1 на 8 и получаем частное 0 и остаток 1. Как только получено частное 0, дальнейшее деление уже не имеет смысла (оно даст незначащие нули в начале записи). Остаётся лишь выписать в обратном порядке все полученные остатки: 173.
В случае перевода дробных частей вместо деления последовательно выполняется умножение. Целая часть произведения даёт очередную нужную
цифру. Она фиксируется и отбрасывается, а оставшаяся (меньшая 1) дробная часть умножается ещё раз. К сожалению, этот процесс может оказаться бесконечным (периодическим).
Использование двойных систем
В случае двойных систем никаких специальных правил не нужно. Но важно заметить, что представление в двойных системах заметно облегчает перевод в тех случаях, когда основания систем счисления оказываются точными степенями с общим основанием.
Для примера переведём число, записанное в 16-чной системе счисления как ABCDEF, в 8-чную систему. Заметим, что 16=24, а 8=23. Эта связь позволяет использовать двоичную запись в качестве удобного промежуточного результата.
Сначала запишем ABCDEF в двоично-шестна-дцатеричной системе. Для этого каждую шестна-дцатеричную цифру заменим её четырёхбитовым двоичным кодом («тетрадой»): 1010 1011 1100 1101 1110 1111.
Теперь, чтобы получить двоичную запись, достаточно просто устранить пробелы между тетрадами: 101010111100110111101111.
А чтобы получить двоично-восьмеричную запись, пробелы нужно вставить по-другому — между триадами (тройками двоичных цифр). Вставлять их нужно с конца записи (отсчитывая по три цифры справа налево). Получим: 101 010 111 100 110 111 101 111.
Теперь остаётся заменить каждую триаду соответствующей восьмеричной цифрой: 52746757.
Двоичные и троичные коды, связанные с кирпичной кладкой
Задача о нахождении и перечислении разбиений (целочисленного) параллелепипеда на меньшие (равные друг другу) имеет обширную библиографию, но все еще не решена. Наиболее очевидным ее "практическим приложением" является кладка стены из кирпичей. Придерживаясь "строительной" терминологии, рассмотрим простейший вариант: разбиение прямоугольника mxn ("слоя стены") на "кирпичи" 1х2.
Основные этапы формализации задачи:
1) упорядочение кирпичей "методом северозападного угла",
2) два ракурса кирпича кодируются цифрами 0 ("ложок") и 1 ("тычок"),
3) лексикографическое упорядочение разбиений в соответствии с сопоставленными им двоичными кодами,
4) реализация алгоритмов кодирования и декодирования.
Процесс выкладывания "длинного и узкого" слоя приводит к необходимости классифицировать "обрывы частично построенной стены". Так как кирпичи "правильно" занумерованы (п. 1), то в каждом ряду выступ не превышает 2 (длины кирпича). Поэтому каждому обрыву сопоставляется троичный код (из цифр 0, 1, 2). Множество всех таких кодов с фиксированным числом цифр (равным толщине стены) представляет собой некоторый граф, вершины которого соединены ребрами двух цветов
(соответствующих двум ракурсам очередного кирпича). Этот граф распадается в несколько компонент связности. Анализируя принадлежность вершин графа к этим компонентам, можно дать ответ на вопрос, преобразуется или нет один обрыв в другой путем добавления нескольких кирпичей.
На практике каменщик периодически повторяет одну и ту же комбинацию кирпичей. Использование предложенных здесь кодов позволяет значительно облегчить ее запоминание, так как вместо сложных геометрических образов достаточно удерживать в голове сравнительно короткую последовательность из нулей и единиц. Весьма перспективно использование этих способов кодирования и при обучении технологии в училищах строительного профиля.
Литература
1. Баранова Н.В. Вероятностные системы счисления. // Межд. конф. по мягким вычислениям и измерениям SCM-2003. СПб, 2003.
2. Баранова Н.В. Почти ступенчатость представления вещественных чисел в башенных системах счисления. // 5-я Межд. Конф. молодых учёных памяти С.Н. Бернштейна. - Санкт-Петербург, 1999.
3. Баранова Н.В., Федотов В.П. Итерационные системы счисления. // Актуальные проблемы современной науки. Ч. 1. - Самара, 2001, с. 21.
4. Заде Л.А. Понятие лингвистической переменной и его применение к принятию приближенных решений. - М.: Мир, 1976.- 167 с.
5. Кноп К.А. Недвоичная система счисления. // Домашний компьютер, 2001, N8.
6. Кравченко А.А., Кравченко С.П. Золотая система счисления. // Актуальные проблемы современной науки. Ч. 1. - Самара, 2001. - с. 38.
7. Кравченко Ю.А. Информационная уравновешенная троичная система счисления. // Актуальные проблемы современной науки. Ч. 1. - Самара, 2002. - с. 98.
8. Федотов В.П. Башенные системы счисления. - В сб. «Информационные технологии в образовании. К 80-летию РГПУ им. Герцена». СПб, 1998.
9. Федотов В.П. Логарифмическая тригонометрия. - В сб. «Наука сегодня: теория и практика». -Вологда: ООО «Маркер», 2017 - ISBN 978-5906850-59-1 - с. 7-9.
10. Федотов В.П. Новые системы счисления как альтернатива интервальным вычислениям. // Межд. конф. по мягким вычислениям и измерениям SCM-2003. СПб, 2003.
11. Федотов В.П. О новых системах счисления и их преподавании. // Межд. конф. по мягким вычислениям и измерениям SCM-2005. СПб, 2005.
12. Федотова М.В. Информационные системы счисления. // Межд. конф. «Интел-Юниор, 2001». М., МИФИ, 2001.
13. Федотова М.В., Федотов В.П. Интервальные системы счисления. // Актуальные проблемы современной науки. Ч. 1. - Самара, 2001, с. 55.