Создание собственной системы счисления — это увлекательное упражнение, лежащее на стыке математики, лингвистики и конлангинга (искусственного создания языков). Любая система исчисления решает одну базовую задачу: представить бесконечное множество чисел с помощью ограниченного набора символов и правил. Понимание этого принципа открывает дверь к проектированию систем, которые могут быть позиционными или аддитивными, десятичными или двенадцатеричными, а даже полностью нелинейными.

История знает десятки уникальных подходов: вавилоняне использовали шестеричную систему с позиционным принципом, майя — двадцатеричную с символом нуля, а инки кодировали числа узлами на квипу. Современные энтузиасты создают системы для вымышленных миров, криптографических задач или просто для интеллектуального удовольствия. Главное — чётко определить, какие свойства должны быть у вашей системы, прежде чем приступать к дизайну символов.

Определение целей и ограничений

Прежде чем рисовать глифы, ответьте на вопрос: зачем нужна эта система? Для художественного мира достаточно эстетичной и логичной структуры. Если цель — обучение или демонстрация математических концепций, приоритетом станет наглядность. Криптографические задачи накладывают требования к энтропии и устойчивости к анализу. Чёткое техническое задание сэкономит часы переделок.

Определите базу (радикс) — количество уникальных цифр. Десятичная (10) привычна, но двенадцатеричная (12) делится на 2, 3, 4, 6 без остатка, что упрощает дроби. Шестнадцатеричная (16) удобна для информатики. Нестандартные базы вроде 7, 12 или 20 придают системе экзотичность, но усложняют перевод в привычные форматы.

Выберите тип записи: позиционную (значение цифры зависит от разряда), аддитивную (сумма значений символов), гибридную или знаковую. Позиционные системы компактны для больших чисел, аддитивные — интуитивны для малых. Римская система аддитивно-вычитания, китайская стержневая — позиционная с пустым разрядом.

⚠️ Внимание: не смешивайте принципы разных типов без строгих правил. Смешанная система без формализованного алгоритма перевода станет неработоспособной для вычислений.
📊 Какую базу вы бы выбрали для своей системы счисления?
Десятичную (10) — привычную
Двенадцатеричную (12) — удобную для дробей
Шестнадцатеричную (16) — для IT-задач
Нестандартную (7, 20, 60) — для уникальности

Проектирование набора символов

Символы (глифы) должны быть различимыми при быстром чтении, легко воспроизводимыми от руки и пригодными для печати. Избегайте пар, похожих при повороте или отражении: 6/9, b/d, p/q. Хорошая практика — нарисовать 20–30 эскизов и отобрать те, что проходят тест на узнаваемость при размере 8 пт.

Для баз выше 10 нужны дополнительные знаки. Традиция информатики использует латинские буквы A–F, но для авторской системы лучше изобрести уникальные глифы. Можно взять за основу исторические алфавиты (руны, грузинский мхедрюли, тифинаг) или сгенерировать формы процедурно. Назначьте каждому символу уникальное имя — это упростит обучение и устную речь.

Разработайте порядок сортировки и правила составных чисел. В позиционных системах порядок разрядов фиксирован (старшие слева). В аддитивных — символы группируются по убыванию значения. Зафиксируйте направление письма: слева направо, справа налево, буστροфедон или вертикальное. Несовпадение направления с базовым языком текста создаёт когнитивную нагрузку.

  • 🔤 Глифы должны масштабироваться без потери узнаваемости
  • 🖋️ Проверьте написание от руки: за 2 секунды на символ
  • 🖨️ Подготовьте векторные исходники (SVG) для типографики
  • 🔢 Зарезервируйте коды в Private Use Area Юникода (U+E000–U+F8FF)
💡

Создайте шрифт в FontForge или Glyphs — это позволит тестировать систему в любом текстовом редакторе и браузере без ручного рисования каждого числа.

Арифметические правила и алгоритмы

Система мертва без определённых операций. Минимум: сложение, вычитание, умножение, деление. Для позиционных систем напишите таблицы сложения и умножения для одной цифры (размер база × база). В двенадцатеричной таблица 144 ячейки — выполнимая задача. Для базы 60 (как у шумеров) таблицы огромны, поэтому использовали вспомогательные таблички.

Опишите алгоритм переноса разряда. В десятичной: 9 + 1 = 10 (ноль в разряде, единица в следующий). В вашей системе правило аналогично, но порог равен базе. Для вычитания определите заимствование. Умножение в столбик требует таблицы умножения и правил сдвига. Деление уголком — самый сложный алгоритм; для нестандартных баз удобнее переводить в десятичную, делить, возвращать результат.

Не забывайте про ноль. Позиционная система без нуля неработоспособна: не отличить 101 от 11. Майя изобрели нуль независимо, вавилоняне — оставили пробел (позже специальный знак). Аддитивные системы (римская) обходятся без нуля, но не могут записать пустой разряд. Решите: будет ли у вас отдельный глиф нуля или комбинация других символов.

⚠️ Внимание: если база нечётная, сбалансированная тринарная система (цифры -1, 0, 1) позволяет избежать знака минус. Это элегантное решение для вычислительных архитектур.
БазаТипНольПример записи 2026Сложность таблиц
10ПозиционнаяОтдельный глиф2026Низкая
12ПозиционнаяОтдельный глиф1204₁₂Средняя
20Позиционная (майя)Символ ракушки5·20² + 1·20 + 4Высокая
60Позиционная (вавилон)Пробел / знак33·60 + 44Очень высокая
2Позиционная (двоичная)011111101000Минимальная

Дробные и отрицательные числа

Целые числа — только половина задачи. Для дробей в позиционных системах используется разделитель (запятая или точка). Правило: первый разряд после разделителя — база⁻¹, второй — база⁻² и так далее. В двенадцатеричной 0;6 равно половине (6/12 = 0,5). Периодические дроби зависят от базы: 1/3 в десятичной бесконечна (0,333…), в двенадцатеричной конечна (0;4).

Отрицательные числа записывают знаком минус или в дополнительном коде (для компьютеров). В сбалансированных системах (тринарной, пятинарной) знак встроен в цифры: 1̅ означает −1. Это устраняет необходимость в отдельном знаке и упрощает схемы сумматоров. Для ручной арифметики знак минус привычнее.

Рассмотрите научную нотацию для очень больших и малых чисел. Формат: мантисса × база^экспонента. Экспоненту удобно записывать в той же системе. Мантиссу нормируют: одна ненулевая цифра до разделителя. Это стандарт для инженерных расчётов и плавающей запятой в процессорах.

☑️ Минимальный набор арифметических правил

Выполнено: 0 / 5

Лексика и фонетика: как проговаривать числа

Система счисления не существует в вакууме — её нужно произносить. Придумайте корни для цифр 0–(база−1). Для составных чисел нужны морфемы разрядов: «десять», «сто», «тысяча» или их аналоги. В двенадцатеричной системе dozenal-энтузиасты предлагают: do (12), gro (144), mo (1728). Короткие уникальные корни ускоряют речь.

Правила склонения и согласования зависят от грамматики базового языка. Если система для конланга, встройте числительные в его морфологию: роды, падежи, классы существительных. Для международного использования сделайте корни моносиллабическими и фонетически различимыми: избегайте пар do/to, gro/kro.

Подумайте над порядком слов в числительных. В английском: «twenty-four» (разряд → единица), в немецком: «vierundzwanzig» (единица → разряд), в китайском: «» (разряд → единица). Выберите один порядок и следуйте ему строго. Несоответствие порядка записи и произношения — источник ошибок.

  • 🔊 Запишите аудио-эталон всех базовых числительных
  • 📝 Составьте таблицу склонения для 1–10 в основных падежах
  • 🗣️ Протестируйте на носителях: «прочитайте 347, 5020, 1/4»
  • 📐 Добавьте суффиксы для порядковых (1-й, 2-й) и кратных (удвоенный, утроенный)
Пример двенадцатеричной лексики (система Dozenal)

0 — zen, 1 — one, 2 — two, 3 — three, 4 — four, 5 — five, 6 — six, 7 — seven, 8 — eight, 9 — nine, ᘔ — dek, Ɛ — el. 10₁₂ — do, 100₁₂ — gro, 1000₁₂ — mo. 2026 = 1204₁₂ = «one mo two gro four»

Кодирование и цифровая реализация

Чтобы система работала в компьютерах, нужен стандарт кодирования. Самый простой путь — назначить каждому глифу код в Private Use Area (PUA) Юникода: U+E000…U+F8FF. Это позволяет использовать символы в любом современном ОС, браузере, редакторе без установки шрифта (если шрифт встроен в веб-страницу через @font-face).

Напишите конвертер: int → custom_string и custom_string → int. Для позиционных систем алгоритм стандартный: деление с остатком для кодирования, полином Горнера для декодирования. Для аддитивных — жадный алгоритм: вычитать максимально возможные значения символов. Опубликуйте библиотеку на npm/PyPI/GitHub с открытой лицензией.

Рассмотрите ввод с клавиатуры. Раскладка может быть фонетической (цифры на клавиши цифр, дополнительные — на буквы) или модальной (переключатель режима). Для мобильных — кастомная клавиатура или долгое нажатие на цифры. Доступность (a11y): скринридеры должны проговаривать числа корректно — добавьте ARIA-метки или кастомный TTS-плагин.

⚠️ Внимание: не используйте PUA для обмена данными между разными системами — коды там нестандартизированы. Для межсистемного обмена всегда конвертируйте в десятичную или стандартный формат (JSON, XML, Protocol Buffers).
💡

Позиционная система с базой >10 требует минимум: уникальные глифы для 0..база-1, разделитель дробей, знак минуса, алгоритм конвертации в/из десятичной, шрифт и клавиатура.

Тестирование и документирование

Проведите юзабилити-тестирование: попросите 5–10 человек выучить систему за 15 минут и решить 10 арифметических задач. Замеряйте время, ошибки, когнитивную нагрузку (опрос NASA-TLX). Сравните с десятичной базой. Слабые места: запутанные глифы, нетривиальные правила переноса, отсутствие интуитивных дробей.

Напишите спецификацию (RFC-стиль): формальное определение алфавита, грамматики чисел (EBNF), арифметических алгоритмов, кодировки, правил сортировки. Приложите таблицы сложения/умножения, примеры перевода, словарь числительных. Версионируйте спецификацию: v1.0, v1.1 — это позволит развивать систему без разрыва совместимости.

Создайте reference implementation на популярном языке (Python, TypeScript, Rust). Покройте тестами: свойства ассоциативности, коммутативности, обратимости операций. Опубликуйте пакет с документацией. Если система для конланга — добавьте в вики проекта, сделайте интерактивный песочницу (CodePen, JSFiddle) для онлайн-экспериментов.

  • 🧪 Unit-тесты: 100% покрытие конвертера и арифметики
  • 📖 Документация на английском + языке системы (если конланг)
  • 🌐 Демо-страница: ввод → мгновенный перевод в десятичную
  • 📦 Пакетный менеджер: `pip install your-numeral-system`
💡

Используйте property-based testing (hypothesis в Python, fast-check в JS) — он сам найдёт крайние случаи вроде переполнения, некорректного переноса, ошибок округления дробей.

Применение: от искусства до инженерии

Авторские системы счисления находят применение в самых разных областях. В конлангинге они придают глубину вымышленным культурам: клингоны используют десятичную, эльфы Толкина — двенадцатеричную (по подсказке лингвистов). В криптографии нестандартные базы используются для обфускации данных и стеганографии. В образовании — для демонстрации абстрактности понятия числа и свойств позиционных систем.

Инженерное применение: сбалансированная тринарная (база 3, цифры −1, 0, 1) реализовывалась в советском компьютере «Сетунь» (1959). Она даёт минимальную среднюю длину кода и натуральное представление знака. Современные исследования квантовых компьютеров рассматривают кутриты (тройственные кубиты) — ваша система может стать основой для квантового ассемблера.

Художественные проекты: визуальные поэмы, где числа кодируют цвет, форму, звук. Музыкальные системы: 12-тонная равновеликая темперировка — по сути, двенадцатеричная логарифмическая шкала. Можно придумать систему для микротоновой музыки с базой 19, 22, 31, 53 — они дают более чистые интервалы.

Исторический кейс

система «Сетунь» (база 3, сбалансированная)Тринарный код: T = -1, 0 = 0, 1 = 1. Число 7 = 1T1 (1·9 + (-1)·3 + 1·1 = 7). Преимущества: нет знака числа, округление = усечение, экономия элементов (log₂3 ≈ 1.58 бит на трит). Проект закрыт из-за доминирования двоичной промышленности.

FAQ: частые вопросы создателей систем счисления

Можно ли сделать систему без нуля?

Да, аддитивные системы (римская, греческая, иврит) работают без нуля. Но позиционная система без нуля не может однозначно записать числа с пустыми разрядами (101 vs 11). Вавилоняне сначала оставляли пробел, позже ввели специальный символ-разделитель.

Какую базу выбрать для максимального удобства дробей?

Двенадцатеричная (база 12) делится на 2, 3, 4, 6. Дробь 1/3 = 0;4, 1/4 = 0;3, 1/6 = 0;2 — все конечные. Шестьдесятеричная (база 60) ещё лучше (делители: 2,3,4,5,6,10,12,15,20,30), но требует 60 уникальных глифов.

Как записать отрицательные числа без знака минус?

Используйте сбалансированную систему: цифры от −⌊база/2⌋ до +⌊база/2⌋. Для базы 3: −1, 0, 1 (обозначаются T, 0, 1). Для базы 10: −5…+4. Знак числа определяется старшей ненулевой цифрой. Это аппаратно эффективно.

Нужно ли регистрировать систему в Юникоде?

Для частного использования достаточно PUA (U+E000–U+F8FF). Официальное включение в Юникод требует доказательства широкого использования в живом сообществе, исторической значимости или стандартизации (ISO). Процесс занимает годы.

Как научить ИИ понимать мою систему?

Добавьте в промпт-инженерную спецификацию: таблицу символов, правила арифметики, 20 примеров перевода. Дообучите (fine-tune) небольшую модель (LoRA) на датасете пар «число в вашей системе ↔ десятичное». Для LLM достаточно few-shot примеров в контексте.

Создание системы счисления — это инженерное искусство в чистом виде. Вы балансируете между математической строгостью, когнитивной эргономикой, эстетикой символов и технической реализуемостью. Начните с минимально рабочего прототипа: 10–20 глифов, конвертер на Python, страница-демо. Итерируйте. Лучшие системы (как десятеричная, двоичная, двенадцатеричная) выжили не потому, что были идеальны с первого раза, а потому что их улучшали поколения пользователей. Ваша система может стать следующим шагом в этой эволюции.

💡

Главный принцип: система счисления — это интерфейс между абстрактным числом и человеком/машиной. Успех измеряется скоростью обучения, низкой ошибкой записи и удобством арифметики, а не красотой глифов.