В данной теме я хотел бы предложить к обсуждению одну идею, которую пока еще не сумел довести до завершенного вида (сумел бы - писал бы скорее в математический журнал). А именно я хотел бы подискутировать о системах счисления. Возможно, мое изложение будет довольно сумбурным, но это именно потому, что идея еще пока не воплощена в полной мере. Здесь будет много идей, но совсем мало доказанный фактов, увы.
Обычно мы пользуемся десятичной системой счисления, в информатике в ходу двоичная, восьмеричная или шестнадцатеричная. У всех этих систем общим является то место, что они являются степенными. В них числа раскладываются по степеням основания:
,
где
- основание системы счисления, а
- некие цифры из заранее зафиксированного набора. Обычно, это цифры в порядке возрастания от нуля до
, но иногда бывают и более сложные варианты, как, например, в знакопеременных системах счисления. По сути своей это разложение числа в степенной ряд (иногда бесконечный для периодичных и иррациональных дробей) с коэффициентами из конечного множества цифр. Данное положение дел настолько вошло в обиход, что стало рутинным и не вызывает лишних вопросов. Однако всегда ли данный подход к репрезентации чисел оптимален? Мне кажется нет.
Наиболее очевидна слабость данного подхода обнаруживается в вопросах, связанных с разделением рациональных чисел от иррациональных. В этой сфере до сих пор не предложена никакого общего подхода, и к каждому конкретному числу требуется подбирать свой уникальный ключик, а к некоторым числа, вроде постоянной Эйлера-Маскерони
никаких подходов не придумано вовсе. Одна из причин возникающих трудностей заключается в том, что рациональные числа зачастую являются именно бесконечными пусть и периодичными десятичными дробями, а потому сколько знаков после запятой не вычисляй при прочих равных - это не решает проблему. Все это можно красноречиво проиллюстрировать:
На запись такого простого числа как одна треть у нас неожиданно ушло бесконечно много разрядов. По сути пытаясь понять является ли число гамма (например) рациональным или нет, мы желаем проверить конечна ли его запись или бесконечная в десятичной системе счисления, а затем если все-таки бесконечна, то периодична ли она или нет? Если первое данного поста не касается, то второе - вызывает лично у меня недоумение:
"Зачем мы по сути пользуемся степенным базисом, пытаясь исследовать числа на периодичность?"
Ведь, если бы речь шла о периодических функциях, то мы совершенно точно захотели бы использовать гармонические ряды, которые иногда оказываются много полезнее рядов аналитических. Отсюда рождается шальная мысль:
"А не попробовать ли нам построить позиционную систему счисления (то есть такую систему счисления цифры-символы, которой имели бы разный вес в зависимости от позиции), которая при этом основывалась бы не на разложении по степеням некоторого основания, а на разложении по "гармоникам" - периодичным дробям с разными периодами?"
Сначала данная мысль упирается в ту сложность, что все в полной мере периодичные дроби должны быть меньше единицы (ведь целая часть всегда конечна, и потому априори не периодична). С одной стороны можно чисто формально ввести в базис и обратные к периодичным дробям, но с другой стороны это скорее всего не потребуется. Ведь, как известно гармонический ряд расходится:
На самом деле расходится даже ряд из обратных простых, а как, известно, почти все они в любой степенной системе счисления (за исключением тех, что входят в основание системы счисления) являются бесконечной периодической дробью. А потому суммированием одних только периодичных дробей меньших единицы можно получить сколь угодно большое число. А если разрешить произвольную расстановку знаков в гармоническом ряде, то можно получить условно сходящийся ряд суммы, которого можно устремить вообще куда угодно при правильном порядке суммирования. На языке гипотетической гармонической системы счисления это, наверное, означает, что при правильной расстановке знаков-цифр (знаки в данном случае априори удобно представлять как плюсы, минусы или нули - берем тот или иной период с плюсом или минусом или выбрасываем) в правильном порядке можно получить любое число. В такой системе счисления периодичные дроби должны даваться конечной суммой, а не периодичные (конечные дроби и иррациональные) должны быть бесконечной суммой. Таким образом если такую систему получится составить, то любое рациональное число будет конечным либо в ней, либо в обычной степенной.
Но это все рассуждения довольно отвлеченные. Надо что-то более конкретное для начала. Если не можешь построить в общем случае: начни с конкретных примеров, которые более менее понятны. Для простоты будем рассматривать числа в двоичной системе счисления. О построении нашей воображаемой системы счисления можно думать как о смене базиса, а как мы меняем базисы? Верно, мы выражаем старые базисные вектора по новым. Так что давайте попробуем разложить, например, одну десятую в двоичной системе счисления в бесконечную сумму периодичных дробей:
Я какое-то время думал над тем, как следует организовать данный процесс и в итоге пришел к выводу о том, что про это удобнее всего думать как о бесконечном сложении-вычитании в столбик (и я покажу, что бесконечное число разрядов - не проблема при правильном подходе). Итак, в качестве отправной точки возьмем число:
На первом шаге нашей задачей является удаление единицы в разряде сотых, этого можно добиться вычтя одну сотую в периоде:
Отлично! Теперь начинается самое интересное. Далее нам нужно вычесть единицы из третьего разряда, для этого у нас есть только один единственный инструмент: вычитание
. Однако в данном случае не все так просто. Ниже с помощью матрицы (это условность для создания двухмерной формулы) я попытаюсь это передать. Строки матрицы - это дробные части наших чисел. Первая строка - это уменьшое, а вторая - вычитаемое
Здесь видно, что из-за разницы в длине периода возникает ситуация, когда из нулевых разрядов вычитаются единицы, что вызовет снос разрядов и внесет хаос. Постараемся ликвидировать эту проблему: добавим дополнительное слагаемое с длиной периода
, которое уберет лишние единицы из вычитаемого, а потом заодно вычтем еще одно слагаемое с длиной периода
, которое уберет мусорные единицы из числителя на своей длине, которые не нашли себе уничтожения:
Такое вычитание уже легко делается в столбик и его ответ указан в последней строке. Данный процесс можно продолжать бесконечно: на следующей итерации нужно взять число с длиной периода в семь разрядов, на конец у которого будет единица. Длины периодов в шесть и семь разрядов пересекутся на сорока двух разрядах. Там следует сформировать два новых слагаемых: первое с плюсом, а второе с минусом. В первом в разряде стоит единица тогда и только тогда, когда наверху из нуля вычитается единица, а во втором наоборот тогда и только тогда, когда из единицы вычитается нуль за исключением самой первой единицы (той самой желанной одной десятой). Ясно, что этот процесс сходится причем довольно быстро (на первом шаге мы имеем
разряд, потом
, потом
, потом
, и вообще все это дело идет по логике
. Проблема в том, что я пока не придумал как это записать на языке формул, а не вот такой вот поразрядной инструкции. Для сорока двух разрядов это выглядит уже как-то вот так:
https://sun9-53.userapi.com/c855616/v855616290/259083/XnzuAz9KbqI.jpg