Алгоритмы

 

а) Общие Положения

В отличие от операционной системы, Империя Счислений действует по другому принципу: имитируя вычисления, она содержит в себе два драйвера − drive_strings и drive_values, позволяющих производить вычисления с числами неограниченных размеров. Драйвер drive_strings отвечает за хранение чисел в памяти, для этого буферизируется часть оперативной памяти и кэшируется дисковое пространство, тогда число может быть гигабайтного размера. Логическое распознавание числа, хранимого этим драйвером, производит драйвер drive_values, способный имитировать все вычисления и представлять их через 3 элементарные операции − сложение, вычитание и умножение двух цифр. Таким образом, любой файл, также как любая последовательность символов, может быть рассмотрен, как число, если конечно известна его система счисления и значение каждой цифры.

Описать алгоритмы Империи Счислений здесь совершенно не реально, ведь десятки тысячи строк исходного кода, составляющие ее, не уместились бы даже в сотни листов печатного текста. В процессе вычислений работает очень большое количество функций, поочередно рекурсивно передающих друг другу управление, максимальная степень вложенности превышает двадцать вызовов функций (в случае отладочной версии, так как финальная использует технологию встраивания). Почти все вычисления Империя Счислений может производить двумя способами: имитациями через драйверы drive_strings и drive_values, и с использованием возможностей операционной системы с принятыми в ней погрешностями и ограничениями. Алгоритм вычислений можно выбрать в опциях программы или указать в ini − файле.

 

б) Алгоритм Конвертации

Никакие ранее созданные алгоритмы конвертации чисел не устроили меня, и мне пришлось создать новый алгоритм, универсальный для всех систем счисления, для любых экспоненциальных показателей чисел и знаков. Разработка его стоила мне большого труда. Старые бета − версии программы работали по другим, менее оптимальным, алгоритмам, также разработанным мною. Изначально результат вычислялся методом полной индукции, что сильно замедляло процесс вычислений. Потом совершенствование этого метода привело к созданию нового, более оптимального  алгоритма. Настоящий же (третий) алгоритм я назвал "Экспонентальным" (производится через экспонентальный логарифм).

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

 

в) Алгоритм Деления

Разработка этого алгоритма стоила мне большого времени. Когда пришло время его разрабатывать, я оказался в тупике, я был даже не уверен реально ли вообще написать алгоритм, точно вычисляющий период числа, получающийся при делении. Задачей моей было как всегда − не просто разработка алгоритма на основе индукции, а разработка более менее оптимального алгоритма, практически способного за реальное конечное время привести к результату. Алгоритм состоит из трех основных частей: вычисление целой части результата, вычисление цифр после запятой с нахождением и просчитыванием периода и оптимизация получившегося результата. Первая часть выполняется методом подбора коэффициентов при делителе. Необходимость этого метода состоит в том, что классический алгоритм "в столбик" не описывает каким образом можно найти, к примеру, первую цифру частного (скажем, если делимое значительно больше делителя), заметьте. Второй этап производится в столбик, но не является бесконечным, так как при нахождении какой − нибудь цифры после запятой производится сравнение ее с цифрами, стоящими слева, и, если найдены равные цифры, то предполагается, что это период (с левой цифры и до правой). Далее проверяется предположение путем конвертации периода в обыкновенную дробь и сравнения этой дроби с отношением текущего делимого к делителю (текущей делитель − это то что получается при некотором количестве вычитаний из исходного делимого делителя с коэффициентом, причем при каждом таком вычитании делимое умножается на 10). Третий этап − оптимизация, максимально упрощает результат после деления.

Используются технологии uCoz