Page 47

ПРО

№13 (апрель) 2011

граммист

АЛГОРИТМЫ (55-7*7).

Следующим

шагом

будет

пере-

3. Вместо физического разделения разрядов

образом, получим следующее состояние групп

границу, конечно, помнить следует, чтобы

мещение разряда из группы в группу. Таким 66 и все, вторая группа пуста.

можно организовать работу с одним делимым, сохранить

принцип

получения

одного

старшего разряда от деления, однако для этого достаточно будет одной переменной.

В результате получим остаток от деления 3 (69-7*9).

Дальнейшая

можна потому, что:

работа

цикла

невоз-

а) вторая группа пуста (наступит пункт 6.6 приведенного выше алгоритма);

б) 3 меньше 7 (это глобальное условие цикла)

4. Сам наш алгоритм несовершенен, за счет операции угадывания числа.

Итак, покровы сорваны, но теперь осталось добавить

алгоритма:

несколько

слов

в

оправдание

В результате получено: 1956 div 7 = 279 и 3 в

1. Это наглядный процесс создания подобных

часть числа).

операций

остатке (которую можно развить в дробную

операция

и

физическое

неоптимизирована,

перемещение

ее

разрядов

между двумя группами (это всегда медленно), и неудачная реализация пункта 6.8. И самое главное

это

вообще

процесс

делимого на две группы разрядов.

разбития

1. Физическое перемещение разряда из числа в число требует от нас погружаться на другой уровень

абстракции,

проводить

работу

с

байтовыми последовательностями. Все это не

способствует работе с сотнями и тысячами разрядов делимого числа.

2. Следует пересмотреть пункт 6.8, чтобы

вообще избежать цикла. Для этого требуется вычисление

Перемещение

общего

разрядов

числа

разрядов.

группой

будет

намного быстрей, чем организация цикла со сравнением

длинных

чисел

в

качестве

условия выхода из него (тем более что выше

уже была раскрыта тайна сравнения чисел, где опять же идет обращение к разрядам в байтовой последовательности).

процесс

математических

циклического

чисел). Поняв работу данной операции, вы

работу можно ускорить. Проблем несколько: это

Большинство

есть

применения действий к разрядам числа (или

Что не так в нашей операции mod Данная

операций.

сможете ее перестроить под свои нужды самостоятельно.

2. Избавление от всех четырех пунктов приведет к значительному усложнению алгоритма, что

совсем

материала.

не

Это

способствует

некий

баланс

усвоению

между

простотой и эффективностью (который сильно

смещен в сторону простоты). Кроме того, данный

алгоритм

работает

так

же,

вопрос,

который

как

производит деление человек. Между прочим, есть

еще

один

был

специально оставлен на десерт – это наше

деление на нуль. Вообще-то для операции mod

деление на нуль невозможно (поскольку это не совсем математическая функция), то есть операция

с

неподходящими

параметрами

должна приводить к исключению. Однако у нас

будет

существовать

две

полноценные

операции деления, одна из которых деление

на нуль допускает (пусть и с оговорками на

точность результата). Поэтому, на мой взгляд, не совсем справедливо не иметь операцию

деления нацело, не имеющую право делить на нуль.

Делается

это

просто

оберткой

над

нашей операцией деления нацело, которая

47

PROgrammist, №13  

Official editorial layout

PROgrammist, №13  

Official editorial layout

Advertisement