T. 7, № 1. С. 3–7.

Информатика и вычислительная техника

2022

Научная статья

УДК 004.42

pdf-версия статьи

Павлов
Максим Павлович

бакалавриат, Петрозаводский государственный университет
(Петрозаводск, Российская Федерация),
maksim_pavlov_2003@list.ru

Разработка компьютерного приложения для вычислений в системах счисления

Научный руководитель:
Крышень Михаил Александрович
Статья поступила: 29.03.2022;
Принята к публикации: 31.03.2022;
Размещена в сети: 05.04.2022.
Аннотация. В статье рассматривается процесс создания компьютерного приложения для работы в системах счисления. Приоритетное внимание уделяется большим и трудоёмким вычислениям. Автор предлагает конкретную реализацию алгоритма перевода и обработки чисел. Проводится их тестирование на точность, скорость, объём максимальных входных данных. В результате исследований создаётся компьютерное приложение с графическим интерфейсом, которое может производить вычислительные операции с числами, значительно превышающими машинные типы данных. Оно может быть использовано в дальнейшем для оптимизации хранения и передачи числовых последовательностей. Рассматриваются будущие сферы применения систем счисления на практике.
Ключевые слова: приложение, системы счисления, представление чисел, применение систем счисления, цепной код, числовая последовательность, хранение и обработка данных

Для цитирования: Павлов М. П. Разработка компьютерного приложения для вычислений в системах счисления // StudArctic forum. 2022. T. 7, № 1. С. 3–7.

Тема «Системы счисления» входит в школьную программу по информатике и начинает изучаться уже с 8 класса. Она включает в себя трудоёмкие вычислительные операции, на проверку которых вручную уходит много времени. Но до сих пор не рассматривалась тема длинной арифметики и перевода большой числовой последовательности в системах счисления. Эти идеи активно используются в  криптографии, математике [Будкина], финансах, вычислении общеизвестных трансцендентных чисел с высокой точностью, высококачественном изображении фракталов. Программа, позволяющая производить вычисления и переводы над длинными числовыми последовательностями в системах счисления, может быть полезна для особого круга прикладных задач, когда обычные калькуляторы уже не смогут справляться с объёмом входных данных.

На данный момент существует несколько решений. Первое – длинная арифметика языков программирования Python, Java и других. Они позволяют быстро и эффективно вести подсчёты больших числовых последовательностей, но не поддерживают переводы в системы счисления, превышающие 36. Ещё одним решением является калькулятор командной строки GNU bc. Он позволяет использовать длинную арифметику с возможностью поразрядного вывода в произвольные системы счисления. Однако полученный в системе счисления большей 36 результат повторно  использовать не получится: максимальная система счисления входных данных (ibase) не может превышать 36.

Основная цель данной статьи – создать решение, стремящееся совместить быстроту и эффективность длинной арифметики Python с работой в системах счисления больше тридцатишестиричной калькулятора GNU bc.

Главные задачи исследования: на примере данного приложения изучить возможности языка программирования Python; выявить практические сферы применения систем счисления; рассмотреть возможные трудности и нюансы создания приложения.

Для разработки был выбран высокоуровневый язык программирования Python, который позволит: быстро и качественно написать, объединить алгоритмы и элементы кода; создать графический интерфейс программы (в проекте использовалась python библиотека tkinter); собрать проект в исполняемый (exe) файл, готовый к отправке пользователям (при сборке использовалась программа PyInstaller); сохранится возможность добавления новых функций или замены существующих на аналоги, написанные на низкоуровневом языке (например, С++).

Основной экран приложения (Рисунок 1) должен содержать: поля ввода первого и второго числа; списки систем счисления первого, второго числа и результата; кнопки математических операций с введёнными числами (сложение, вычитание, умножение, деление), перевода первого числа, экран вывода результатов. Поля ввода/вывода могут считать последовательность любой длины. Также поддерживается перемещение вправо/влево по введённым данным.

 Рисунок 1. Экран приложения. 

Для организации работы приложения, упрощения дальнейших улучшений и поддержания программного кода была создана модульная архитектура ПО (Рисунок 2). Она включает 5 основных частей, реализующих математические операции (сложение, умножение, деление, разность и перевод первого числа). Каждый модуль базируется на трёх основных алгоритмах: перевод целой части числа, дробной части в десятичную систему счисления и  обратно.

Математические операции осуществляться по одному типовому алгоритму. Введённое число преобразовывается в строковую переменную. По наличию точки определяется наличие дробной части. Строка разбивается на две части: целую и дробную (при наличии). Обе части переводятся в десятичную систему счисления. Определение представления текстовых символов (отличных от цифр) осуществляется с помощью ASCII (разность номера текущего символа в таблице и символа «0») для более приятного восприятия символьного результата. Это позволяет расширить системы счисления дальше тридцатишестиричной (в данной реализации предельная система счисления 93). После символов английского алфавита будут использованы соответствующие символы ASCII (используются лишь однобайтовые символы основной латиницы, начиная с символа «0» и заканчивая «~»). Первый диапазон символов – цифры ASCII (номера 48-57), второй – буквы латинского алфавита в верхнем регистре (65-90), третий – символы и знаки препинания (91-96), четвертый – буквы латиницы в нижнем регистре (97-122), пятый –  оставшиеся однобайтовые символы (32-47, 58-64, 123-126). Разбиение ASCII на такие диапазоны и связь их порядковых номеров с основанием системы счисления обусловлена уже устоявшимися обозначениями. Аналогичные операции производятся и со вторым числом. Затем над целым и дробными частями осуществляются математические операции, обе части результата переводятся в нужную систему счисления и выводятся пользователю. Такой способ реализации основан на общепринятых правилах перевода в системах счисления (совпадает с «ручным» переводом), что позволяет проконтролировать основные этапы вычисления.

В дополнение основным реализованы 2 модуля, которые раскрывают историю систем счисления, правила математических операций (Информация) и знакомят пользователя с программой (Инструкция). Итоговая программа состоит из 12 модулей, 1016 строк программного кода, из которых 37 пустых и 30 - комментарии.

Рисунок 2. Архитектура работы приложения. 

Рассмотрим предельные данные, с которыми может работать алгоритм. Так как ввод организован через текстовое поле, то программа может считать данные достаточно большого объёма. Единственным ограничением будет объём оперативной и постоянной памяти на компьютере. Алгоритм перевода работает лишь со строковыми представлениями, что позволяет обрабатывать данные без потерь точности (целочисленные типы используются лишь для работы с конкретными элементами строк, хранения их длинны). А для записи чисел в разрядах используются символы таблицы ASCII, чтобы рассматривать большие 36 системы счисления. Сложность вычислений возрастает с каждым новым символом, так как результат перевода равен , где j – количество чисел в исходном, i – разряд,  a – цифра в i-ом разряде, b – система счисления результата.

При тестировании алгоритма перевода была написан код, который вводил данные в программу из файла input.txt и записывал результаты в файл output.txt, также фиксируя время работы программы. Для конкретности и определённости сравнения полученных результатов с эталоном все символы файла input.txt состоят из символов «Z» (соответствует числу 35)  и переводятся из тридцатишестиричной системы счисления в десятичную. Результаты работы алгоритма стоит считать верными. Объём символов вывода входит в правильный диапазон, определенный количеством чисел в большей степени числа (N = [a * lg(b)] +1, где N – количество цифр, a – степень, b – возводимое в степень число). Проанализировав результат, можно сделать вывод - последние цифры верны.  Время работы приемлемое для такого количества вычислительных операций.

Таблица 1. Результаты тестирования алгоритма.

Число символов «Z»

в input.txt

Время работы алгоритма с выводом результата, сек. Кол-во символов в файле output.txt Результат аналитической и ручной проверки.
1 0,109 – 0,114 2 Совпадает с результатом, полученным вручную.
10 0,108 – 0,113 16
100 0,113 – 0,119 156
1000 0,116 – 0,121 15557 Кол-во символов результата входит в верный диапазон, последние цифры совпадают с полученными аналитически.
10000 1,1 – 1,2 15564
100000 356 155631
200000 2061,9 311261
300000 5819,1 466891

  

Данная программа может использоваться как для проверки небольших вычислений, сделанных вручную, так и для длинной арифметики с высокой точностью в различных системах счисления (включая привычную десятичную). Возможно дальнейшее добавление дополнительных функций, реализующих другие математические операции (возведение в степень, вычисление факториала числа и другие), поддержание работы приложения, его оптимизация (например, перевод алгоритма работы на низкоуровневый язык) и увеличение максимальной поддерживаемой системы счисления, путём использования диапазонов символов Unicode.

Системы счисления активно использовались на этапах зарождения ЭВМ, телеграфии (кодирование букв и чисел последовательностью нулей и единиц), создания штрих-кодов [Гашков]. Но в наши дни одна из главных сфер применения данного приложения – кодирование (сжатие) числовой последовательности (например, цепного кода). «…Любую упорядоченную последовательность можно представить в виде ряда упорядоченных множеств и для любого упорядоченного множества можно создать свою позиционную систему счисления…» [Лебедева : 21]  Рационально использовать данный алгоритм и для отправки данных, так как при передаче данных используются другие системы счисления (например, кодирование base64), когда есть дополнительные ограничения на то, какие значения могут иметь передаваемые байты (например, это должны быть только печатные символы ASCII). Предположим, есть последовательность из 15565 десятичных чисел в текстовом формате (файл output.txt в результате перевода 10000 «Z»). Результат перевода данной последовательности из десятичной в восьмидесятеричную систему счисления составил 8179 символов, а с помощью base64 - 20755 символов. Гораздо больше исходного файла, так как три восьмерки битов сводятся к четырем шестеркам в виде символов ASCII. Но данный подход всегда менее эффективен, чем использование двоичного формата.


Список литературы

Будкина И. М. Научному прогрессу - творчество молодых: материалы XV международной молодежной научной конференции по естественнонаучным и техническим дисциплинам (Йошкар-Ола, 17-18 апреля 2020 года): в 2 ч. / редкол.: Д. В. Иванов [и др.]. / И. М. Будкина, А. М. Кораблев // Системы счисления. Йошкар-Ола: Поволжский государственный технологический университет, 2020. Ч. 1. С. 14—16.

Гашков С. Б. Системы счисления и их применение. Москва : МЦНМО, 2004. 52 с.

Лебедева А. В. Система счисления рядов упорядоченных множеств // Математика и математическое моделирование: сборник материалов XII всероссийской молодежной научно-инновационной школы. Саратов: Интерконтакт, 2018. С. 21—22.



Просмотров: 1654; Скачиваний: 463;