/
Текст
'оглавление ~ . Стр. Предисловие..................................... .... 3 Введение . -......................................... 5 Глава первая Системы счисления с натуральным основанием . . . . 15 § 1.1. Общие свойства систем ...................... 15 § 1.2. Формы представления чисел в машине ....... 30 § 1.3. Кодирование отрицательных чисел ........ 41 • § 1.4. Сложение чисел в естественной форме.......... § 1.5. Сложение чисел в полулогарифмической форме и 47 в избыточных системах счисления.............. 65 § 1.6. Умножение чисел............................. 80 .§ 1.7. Деление чисел.............................. 92 § 1.8. Оценка точности вычислений .................101 § 1.9. Оценки для систем счисления с натуральным осно- ванием ............................................103 Глава вторая Двоичные системы счисления .................... . 119 § 2.1. Двоичная система с цифрами {0,1}.......... 119 § 2.2. Умножение в двоичной системе................127 § 2.3. Деление и извлечение квадратного корня в дво- ичной системе.......................................137 , $ 2.4. Двоичные системы счисления с цифрами {—1,1} и {—1, 0, 1}.........................................147 Глава третья Другие системы счисления с натуральным основанием 156 § 3.1. Троичные системы счисления ............... 156 § 3.2. Системы счисления с основаниями 2* . . ..... 163 Глава четвертая Системы счисления с основанием, не являющимся на- туральным числом . .......... ...... 174 §4,1. Системы-счисления с отрицательным целым осно- 2Q* 307
ванием . ..................................174 § 4.2. Системы счисления с комплексным основанием . . 193 § 4.3. Арифметические операции с комплексными чис- лами .................. . .................. 200 § 4.4. Алгоритмы кодирования и декодирования в систе- мах счисления с комплексным основанием.............214 Глава пятая ' * Системы счисления, построенные по принципу весомо- значности разрядов .............. ... 223 § 5.1. Общие определения...................223 § 5.2. Двоично-десятичное кодирование......229 :§ 5.3. Код прямого замещения и его свойства ..... 249 ;§ 5.4. Другие двоично-десятичные коды..". . 258 Глава шестая Код в остатках .......... ......... ... 271 § 6.1. Общие определения ................ '271 § 6.2. Представление чисел в коде в остатках . . ... 278 § 6.3. Выполнение операций в код в остатках ... 291 Литература............ . . . . . 298
р едисловие Содержание этой книги' представляет собой . рас- ширенный курс лекций, которые читались автором для студентов, специализирующихся по вычислитель- ной технике, в Московском энергетическом институте. Причиной, побудившей автора написать настоящее пособие, явилось отсутствие какой-либо монографии или пособия, содержание которых соответствовало бы материалу; сообщаемому на лекциях по курсу «Ариф- метические и логические основы ВМДД» в его первой части. Известные книги М. А. Карцева и-Р. Ричардса, несмотря не целый ряд достоинств’, не содержат всего необходимого материала и не могут быть эф- фективно использованы при подготовке студентов. Учитывая возможность использования настоящей книги специалистами по проектированию вычислитель- ных машин, автор в ряде случаев включил в нее раз- делы, которые обычно не излагаются в стандартном курсе для студентов. Это относится, например, к чет- вертой главе или к § 5.2. При написании книги автор широко использовал отечественную и зарубежную литературу. При этом, в отдельных случаях заимствовались доказательства или примеры. Ссылок на эти заимствования в тексте ' не делалось. Однако все работы, которые были ис- пользованы автором, приведены в первой части списка литературы, указанного в конце пособия. Во второй части этого списка указана дополнительная литера- тура, -которая либо незначительно использовалась в настоящем пособии, либо вообще не нашла отра- жения в книге, хотя вопросы, которым она посвящена, , близки к кругу проблем, рассматриваемых автором. 3
Ппи чтении книги от читателя практически не тоебуется никаких знаний, выходящих за пределы обычного школьного уровня, и лишь в отдельных случаях используются знания, превышающие этот уровень. Как правило, предполагается, что читатель не знаком с устройством вычислительных машин, так как курс «Арифметические и логические основы ВМДД» по существующей программе читается прак- тически до курса по ВМДД. Однако в некоторых слу- чаях сделано исключение и'для понимания материала требуется некоторое знакомство со структурой ариф- метических устройств вычислительных машин. В этих случаях приводятся краткие пояснения, достаточные для понимания материалов на формальном уровне. Основной курс состоит из следующего: глава пер- вая (кроме § 1.8), вторая и третья главы; § 5.1, 5.3, 5.4 пятой главы; § 6.1 -и частично два других пара- графа шестой главы. Текст, напечатанный мелким шрифтом, можно опускать без ущерба для понимания дальнейшего. В написании книги принимал участие С. И. Хмель- ник, которым написаны § 4.2, 4.3 и 4.4. Общая редак- ция этих параграфов проведена автором основного текста. С целью уменьшения объема книги в ней остались незатронутыми многие важные вопросы, связанные с повышением скорости выполнения основных опера- ций, помехоустойчивого кодирования' и производства операций при таком кодировании, и целый ряд других вопросов, важность которых вполне сознается автором. Учитывая, что KHnta по подобным вопросам .появ- ляется в таком объеме впервые, автор понимает, что в ней могут быть обнаружены недостаточно точные формулировки и результаты, а также слабые в мето- дическом отношении рассуждения и примеры. Поэтому автор заранее, благодарит всех читателей, которые выскажут свои замечания о содержании книги. Автор
« ... О бедствиях послушайте людей. Они как дети были глупые. Я наделил их мыслью и сознаньем,.. Для них я выдумал науку чисел, Из наук важнейшую...» (Эсхил. «Прометей прикованный») ВВЕДЕНИЕ Системой счисления, или нумерацией, называется совокупность приемов и правил для- наименования и обозначения чисел. Принципы построения систем счисления могут быть весьма различными и во вве- дении мы дадим некоторую классификацию систем, счисления, удобную с точки зрения прикладных во- просов, которым посвящена эта книга. Будем предполагать, что имеется конечный- алфа- вит А = {<24, а2, ... , ап\, элементы которого могут ис- пользоваться при записи чисел в данной системе счисления. Элементы А будем называть цифрами. Каждой цифре в записи числа однозначно сопостав- ляется количество, выражаемое этой цифрой. Это ко- личество мы будем называть количественным эквива- лентом данной цифры. Если at есть цифра, записанная в данном месте в записи числа, то («,) означает количественный эквивалент, который мы ей сопостав- ляем. Разобьем все системы счисления на два класса. Определение 0.1. Система счисления назы- вается непозиционной, если каждой цифре at в любом месте в записи числа однозначным образом сопостав- лен некоторый количественный эквивалент (<7Z). Таким образом, для непозиционных систем счисле- ния местоположение цифры в записи числа не играет никакой роли. В любом случае этой цифре сопостав- ляется одинаковое количество. 5
Определение 0.2. Система счисления называет- ся позиционной, если количественный _ эквивалент, сопоставляемый всем цифрам из А,- . зависит не только от вида этой цифры, но и от ее местополо- жения в записи числа. Как следует из вышеприведенных определений, непозиционные и позиционные системы счисления представляют собой два крайних случая. В принципе возможны .частично-позиционные системы, в кото- рых для одного множества цифр количественный эквивалент однозначен, а для другого множества ' цифр он зависит от их местоположения в записи числа. Для определения количественного эквивалента пол- ной записи числа в данной системе счисления вво- дится функция («г), •••> («„)]» - аргументами которой являются количественные экви- «валенты цифр, входящих в запись данного числа. Для большинства существующих систем счисления функция F есть функция десятичного сложения. В этом случае для нахождения количественного экви- валента данного числа необходимо просуммировать по правилам десятичной системы все количественные эквиваленты цифр, входящих в запись этого числа. Пример 0Л. Для обычной десятичной системы счисления мы имеем Д = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Для числа 756,7 количественный эквивалент вычис- ляется следующим образом. Цифрам этого числа сопоставлены соответственно следующие количествен- ные эквиваленты: для левой цифры 7 (7) = 700, для пятерки (5) = 50, для шестерки (6) = 6 и, наконец, для правой цифры 7 (7) = 0,7. Применяя принцип сло- жения,' получим количественный эквивалент числа (756,7) = 756,7. Читателя не должно смущать, что в силу установившейся традиции и удобства в деся- тичной системе само число и запись количественного эквивалента этого числа совпадают. 6
в некоторых системах счисления функция F мо- жет быть отлична от десятичного сложения, может быть неоднозначной и определяться комбинацией расположения цифр в записи числа. Пример 0.2. Для системы счисления, известной под названием римской нумерации, функции F может быть либо функцией сложения, либо функцией вычитания. Для этой системы A = {I, V, X, L, С, М}. Для числа CCXXXIX количественный эквивалент вычисляется следующим образом: (С) = 100, (X) = 10 (I) =Л незави- симо от местоположения цифр в записи числа. Однако для' подсчета эквивалента всего числа необходимо количественный эквивалент I вычесть из суммы коли- чественных эквивалентов, сопоставляемых остальным цифрам в записи числа. Поэтому (ССХХХ1Х) = 239. В этом примере мы рассматривали римскую нуме- рацию как непозиционную систему счисления. Можно было бы рассматривать ее как позиционную систему счисления, в которой каждая цифра соответствует в зависимости от своего местоположения в записи числа- положительным или- отрицательным количест- венным эквивалентам. .. Кроме систем счисления, в которых функция F является функцией алгебраического сложения, извест- ны еще мультипликативные системы счисления, в ко- торых количественный эквивалент числа получается путем перемножения количественных эквивалентов цифр этого числа. Исторически вначале появились непозиционные системы счисления. На рис. 0.1 показаны- примеры таких систем. Общим недостатком непозиционных систем счисления является трудность записи в таких системах больших чисел. Либо эти записи слишком громоздки, либо алфавит цифр весьма велик. Напри- мер, в системе счисления первобытного периода для изображения количества, равного 20000, потребова- лось бы изобразить двадцать тысяч одинаковых сим- волов, что сделало бы запись этого числа абсолютно ненаглядной. Если же для каждого нового количества, которое изображается’ имеющимися цифрами, -«слиш- ком длинно» вводить новый символ-цифру, то алфа- вит цифр начнет быстро расти и для случая неогра- ниченного множества чисел придется иметь либо
Египетские Js Лз 11 5 апизипм -пнпф Сирийские 6 Лальмирские 7 Греческие Геробианобы 8 Римские 9 иеро- глифы tlepamu' ческие 2 Аемоти- । ческие LJ 1 s ,1 1 » 1 I 1 1 1 2 co ч ч »т II F II II II 3 wo U4 V т«т III Fl III III III ч oau “Ч И;у \||| FF Illi 1111 IV,- 5 Mfl it 1 1 W II III —» У г V 6 ODO 110 Z nun 1— 'У гч VI 7 0000 101 —-V Mil III p— "У ГН VII 8 0050 case -а— »т и huh FH^ ту пи VIII 9 cue cos 009 А in in in pp-i пну гни IX to Я л А < -> 7 Э л X tt on 1Л 1А о i_’ П £1 XI 15 fRjOOO hD3 1л • HUI—» -2 ’□ йГ XV 20 Л << о 3 дл XX 30 Л <<< 70 Г>3 длд XXX w Шй *- <<< < УН OO 33 дддд XL 50 (ЙЙ 1 1 04 44 -ЧН 700 033 pt L 60 дай fiscm 11 Т ООО 333 РД LX to у ч -'VHH 7000 0333 РЛД LXX 80 №S№ (Mt® fil 7 oooo 3333 РДДЛ LXXX SO и «а® а 1 '«< 70000 03333 рдлдд XC WO <5 . —* pl T О’ н C 200 <=£ >> —-* РП I" О'* НН CC ООО нннн CD 500 у ’’Л- Г)У г D 1000 ? д А <»► 5Б~' X M WOOD (f <<»* м 103 & W г IO5 Q Рис. 0.1
Ки тайские Цифры Ка- рошти 4 Цифры аитепО 6 Цифры племени Файн 1 Старые Комер- 'ческие 2 Науч- ные 3 0 О О 4^^. 1 — I I — - « 2 — II II II — - * 3 — l»l III III • ... 4. и * IIII X - • . ... 5 У Hill IX М • • — 6 — т их 1:1- 7 -t — и ?• hl-- 8 Л 1JT X X • -]?. S л. тпт ? ::1:: ЛГДХ ' 10 4- + IO ? сС:о< 0 15 t V я 0:: Z-. J. 20 ft t ио •3 е Р 30 + !’Г + ню Ро 40 + л t НПО X PF 50 + г IIIIIO 2П РРО' 60 + t то т РРР 10 -t + ? по РРРО 80 Л + пю РРРР - SO к 4- я + - НПО fWPo 100 в V IOO XI '7 1 __ 200 й я s ноо' ?п 1 400 Е ё ₽ IIIIOO 1 500 Я Б IIIIIOO 76 1J 1 woo „ Г -г IOOO 1 ш 14000 Л +- пооо а V 10000 fa 7? IOOOO Рис.-0.2
бесконечные записи чисел, либо бесконечный алфа- вит А*. В вычислительной технике непозиционные системы практически не нашли применения, хотя в ряде устройств автоматики и телемеханики используется так называемый унитарный код, который по существу совпадает с системой счисления первобытного периода. Роль цифры в унитарном коде может играть, напри- мер, импульс'*и число в нем записывается с помощью такого числа передаваемых импульсов, которое в сумме дает количественный эквивалент передаваемого числа. В дальнейшем мы будем рассматривать только по- зиционные системы счисления. На рис. 0.2 показаны •примеры таких систем. Мы будем предполагать, что все числа .записываются в виде лцнейно упорядочен- ной последовательности цифр. Для наглядности можно предположить, что в нашем распоряжении имеется бесконечная в обе -стороны лента, разделенная на клетки. В каждую клетку ленты можно записать не * более одной цифры.' Л юбую конечную последователь- ность клеток ленты, состоящую только из клеток, заполненных цифрами из А, и такую, что слева и спра- ва от этой последовательности клетки ленты пусты, мы и будем называть линейно упорядоченной записью числа. -Подчеркнем, что в этих рассуждениях мы раз- личаем цифру «ноль» из А, имеющую количественный эквивалент, равный нулю, от пустой клетки ленты, которая отмечена специальным «пустым символом», не являющимся цифрой из А. В силу этого, записи чисел в десятичной системе-счисления 0,5; 00,5; 0,5000 и т. д. для нас различны, хотя их количественный эквива- лент, получаемый по принципу сложения количествен- ных эквивалентов цифр этих чисел, конечно, одинаков. Перенумеруем теперь клетки ленты, занятые за- писью . числа. Для возможности такой нумерации используем специальный символ «,», с помощью ко- торого будем указывать начало отсчета. Этот символ ставится всегда на границе двух клеток ленты. Влево от него клетки ленты нумеруются в порядке возра- * Отметим, что в десятичной системе счисления-' мы в прин- ципе всегда можем осуществить конечную запись любого числа, пользуясь для этой записи всего десятью цифрами. 10 . .
стания натурального ряда чисел О, 1, 2,... (нумерация идет справа налево), а справа от него клетки ленты нумеруются целыми отрицательными числами — 1, — 2, ... (слева направо). Тогда каждой цифре в записи числа однозначно сопоставляется целое положитель- ное или отрицательное число или нуль. Это число называется номером разряда в записи числа. Для обозначения‘места в записи числа, соответ- ствующего разряду с номером I, введем обозначе- ние [ ]z. Тогда запись («Д- означает, что в i-м разряде числа записана цифра а,-, а запись [(о,)], означает, что в r-м разряде числа имеется количественный эквива- лент, равный (ау). Обозначение ([(«;)],) можно рас- сматривать как символ, характеризующий значение количественного эквивалента, сопоставляемого цифре ajt если она записана в i-м разряде числа. Определение 0.3. Весом i-го разряда для дан- ной системы счисления называется отношение . ([(«/Ж) Pi (К«/)]о) ’ если значение этого отношения постоянно для всех цифр из А. В соотношении (0.1) внизу стоит количественный эквивалент ау-, сопоставляемый этой цифре, если она стоит в нулевом разряде. Эти количественные экви- валенты считаются всегда заданными. Соотношение (0.1) становится неопределенным при ([(ау)]о) = 0. Так как при этом Pi может быть любым числом, то поло- жим его равным тому значению, которое получается при aJt отличной от нуля. Знание веса разряда позволяет вычислять коли- чественный эквивалент цифры в данном разряде, ибо ([(«Д) = (К^)1о)л- Определение 0.4. Система счисления, для ко- торой каждый разряд имеет вес, называется весомо- значной. Весомозначные системы существенно проще невесо- мозначных. Для полного их задания достаточно задать алфавит А, алфавит весов разрядов Р = {ръ р2, ... } (вообще говоря, бесконечный) и указать количествен- ные эквиваленты а}- цифр из А для нулевого (или 11 J0.1)
какого-либо другого) разряда. Правда, необходимо еще задать функцию F, но, как мы уже условились, если это специально не оговаривается, то под F всегда понимается функция десятичного сложения. При таком задании системы счисления с помощью соотношения (0.1) можно получить значение количественного экви- валента в любом разряде записи числа и для любой цифры из А. Примером весомозначной системы счисления может служить китайский счет пятками по два. При этом два пятка дают единицу соседнего разряда с большим номером-, а пять единиц, этого разряда дают одну -единицу следующего по старшинству. Таким образом, в этой системе счисления р9Ь,, = 2-10fe, a p9i,= 10fe для любого (& = 0,. ± 1, - ± 2, ...). Основной трудностью, связанной с использованием весомозна,чных систем, является необходимость зада- ния бесконечного алфавита весов Р. Так как простое перечисление этого алфавита невозможно, то необхо- димо ввести некоторое правило, с помощью которого’ можно было бы вычислять вес очередного разряда, если некоторое количество весов уже известно, или задавать- значение веса' некоторого разряда в виде функции от его номера. В общем виде оба эти спо- соба задания могут быть выражены с помощью соот- ношения А=/(Л-1А-2> - , 0- (0-2) Большинство систем счисления весомозначного типа устроено так, ч’Гобы функция f из (0.2) была бы по возможности более простой. Определение 0.5. Если для всех разрядов весомозначной системы счисления имеет место равен- ство Pt = ' (0.3) то система счисления называется естественной систе- мой счисления, а величина S называется основанием системы счисления. К естественным системам счисления принадлежит большинство из существующих в настоящее время систем счисления. В частности, естественной системой является и наша обычная десятичная система. При 12
S == 1 мы получаем непозиционные системы, так как в этом случае веса всех разрядов одинаковы и имеют место равенства ([(«;)];) = <[(«у-)1о) Для любых цифр из д и любого I. Естественная система полностью задается алфавитом А, количественными эквивален- тами цифр в любом фиксированном разряде (обычно в нулевом) и значением 5. Из соотношений (0.2) и (0.3) при этом вытекает, что ([(«7)L) = ([(«7)lo)sz. Рис. 073 13
Степени 5 играют в естественной системе счисления роль весов разрядов. Нулевому разряду сопостав- ляется 5° = 1. В зависимости от вида 5 естественные системы счисления распадаются на системы с натуральным, целым отрицательным, дробным основаниями. Рас- сматриваются и такие системы счисления, у которых основание является комплексным .числом. На рис. .0.3 показана классификация систем счисления. В первых четырех главах книги рассматриваются различные типы естественных систем счисления. В пятой главе излагаются некоторые результаты, связанные с весо- позначными системами, которые не .являются естест- венными. /Наконец, в шестой главе рассматривается один специальный класс систем счисления, которые не являются весомозначными. В заключение введения отметим, что запись неко- торого количества в определенной системе счисления будем в дальнейшем называть кодом числа. При этом запись означает код числа (количества) х в системе счисления Для естественных систем счисления с основанием 5 код числа х в этой системе записывается как(х)5. Там, где это не приводит к не- доразумению, -запись [(fly)]o будет заменяться за- писью’ (aj).
Глава первая СИСТЕМЫ СЧИСЛЕНИЯ С НАТУРАЛЬНЫМ ОСНОВАНИЕМ § 1.1. Общие свойства систем •Для задания системы с натуральным основанием 5 необходимо задать алфавит цифр А — {ар а2,... ап\, каждому элементу которого сопоставить его коли- чественный эквивалент в нулевом разряде. Алфавит весов специально задавать нет необходимости, так как этот алфавит всегда имеет вид Р={ ... , $*, S*~\..., S1, 1, S-1,... , S~k, ...}. Код любого числа в системе счисления с натуральным основанием имеет следующий вид: —ОО 2 *= S 1(«Ж (1.1) х=4-оо Таким образом, каждый код числа можно рассматри- вать как бесконечный ряд по степеням 5. - Естественно ввести некоторые очевидные требо- вания к рассматривающимся системам счисления. 1. Однозначность. Каждому числу х должен соответствовать единственный код, и наоборот. 2. Конечность. Каждому .целому числу х дол- жен сопоставляться код конечной длины. 3. Эффективность. Существует алгоритм, с помощью которого за конечное число шагов воз- можен переход от кода числа (для конечного кода) к самому числу. При переходе от числа к его коду для целого числа должен существовать алгоритм, реализующий этот переход за конечное- число шагов. Для дробного числа х должен существовать алгоритм, 15
который за -конечное число шагов дает код ^исла х, отличающегося от числа х не более, чем на заданную величину погрешности. Мы будем рассматривать, в основном, системы счисления, обладающие этими тремя свойствами. И лишь в исключительных случаях будут рассматри- ваться системы, не обладающие свойством однознач- ности или конечности. Определение. 1.1. Системы счисления с нату- ральным основанием 5, удовлетворяющие требованиям конечности и эффективности, но не удовлетворяющие требованию однозначного кодирования хотя бы для одного числа х, называются избыточными,. Определение 1.2. Системы счисления, удов- летворяющие требованиям однозначности, конечности и эффективности, называются каноническими. /Рассмотрим вначале канонические системы. Пусть цифрам из множества А сопоставлены, в нулевом раз- ряде только положительные целые количественные- эквиваленты. В этом случае из соотношения (1.1) вы- текает, что все числа х, коды которых могут быть получены в данной канонической системе счисления, являются положительными. Для получения кода числа, соответствующего количеству нуль, необходимо иметь среди А цифру 0, которой сопоставлено количество нуль. В силу конечности представления для целого числа имеем 1 = [(a,)]ft. Sk + .... + + ... + W-C Это означает, что для представления числа, рав- ного единице, мы можем использовать либо цифру с количественным эквивалентом, равным единице (в этом случае число единица будет представляться как ... 01,00...), либо цифру вида S+m (тогда число единица будет представляться как ... 0,0 ... 0S'"0 ... , где Sm стоит в разряде с ве&ом S~m. Однако второй способ представления единицы по сравнению с первым способом не дает ничего принципиально нового, так как в этом случае можно просто переместить запятую так, чтобы разряд с весом S~m стал нулевым разря- дом (другими словами, умножить веса всех разрядов 16
Ha Sm). После этого цифра S’n будет играть роль обычной единицы и дре рассуждения для такой системы счисления будут аналогичны рассуждениям относительно обычной цифры 1 и исходной системы счисления. Покажем,- что другого способа представления еди- ницы в рассматриваемых системах счисления не су- ществует. Для этого надо только показать, что ника- кая комбинация цифр в, разрядах, имеющих веса с отрицательными степенями 5, не может дать при суммировании единицы. Предположим противное. Пусть [(^•5^ + [(«y)U-S^+ ... +[(й.)Ц.5^ = 1. Если kq есть максимальная степень, то sk<i или ь ъ —Ъ, ъ S 9 * + ... + 1(а,)Ц . Но при произвольном 5 это равенство невозможно. Аналогичным образом можно показать, что среди^ цифр должны быть цифры, соответствующие коли- чественным эквивалентам 2, 3, ..., 5—1. Цифра, имею- щая количественный эквивалент, равный 5, уже не нужна, так как ее появление делает систему избы- точной. В самом деле, если среди цифр с эквивален- тами 0, 1, 2,... , 5—1 появится еще цифра с эквива- лентом 5, то число х = 5т можно представить двумя способами: или как 10 ... 0,0 ... , или как ... 0Ь, 0 ... , где в первой записи единица стоит в разряде с номе- ром т, а во второй записи цифра Ь, имеющая коли- чественный эквивалент 5"г, стоит в нулевом разряде записи числа. Итак, мы получили, что в качестве множества цифр неизбыточной системы счисления можно взять цифры с количественными эквивалентами 0, 1,2,... , 5 — 1. Вместо этого набора можно брать любой набор, в котором каждая цифра приведенного множества цифр умножена на одну и ту же степень основания 5. Б-79.-2 17
Как уже отмечалось выше, такая операция приводит просто к перемещению начала отсчета на разрядной - сетке. Теперь покажем, что введенного множества цифр достаточно для точного представления любого целого числа. Теорема 1.1; Набор цифр О, 1, 2,... , 5—1 позво- ляет в системе счисления с натуральным основанием S выражать конечным образом любое целое положи- тельное число. Доказательство будем вести по индукции. Мы уже убедились, что введенные нами цифры поз-, воляют выразить 5 чисел О, 1, 2,... ,5—1. Предпо- ложим теперь, что с их помощью можно выразить некоторое натуральное число N, и докажем, что в этом случае натуральное число 7V+1 также пред- ставляется в системе счисления с данными цифрами конечным образом. Пусть число N выражается как + ... + [(«,)]0-5°- Рассмотрим два случая. [(ау)]0<5 —1; в этом случае число N + 1 будет выражаться как ; JV+ 1 [Ш-г5*-1 + - + [(“;) + Mo-S0-' Во втором случае (предполагая для общности, что [(«7)1о = = -. = Щ)1т-1 = 5-1) оно будет вы- ражаться как] 7V+1 = [Ш-5А + ..; + [(«,) + lU^'” +... + 0-5°. Если теперь предположить, что цифрам из А сопо- ставлены только отрицательные целые числа, то все наши вышеприведенные рассуждения окажутся вер- ными и для этого случая. Только в этом случае нужно говорить не о представлении положительных целых чисел,, а о представлении отрицательных целых чисел. Что же касается представления дробей, то при требовании конечного представления с заданной сте- пенью точности е можно всегда найти такое число разрядов п справа от запятой, что S" < е < (5 — 1) 5-”+1 в этом числе разрядов представление любой дроби будет иметь точность, не меньшую, чем е. 18
Определение 1.3. Канонические системы счис- ления, у которых все количественные эквиваленты цифр только положительны или только отрицательны, называются смещенными системами счисления. Смещенные системы счисления получили весьма широкое распространение и в повседневной практике и в вычислительных машинах. Теперь будем предполагать, что среди количест- венных эквивалентов цифр есть как положительные эквиваленты, так и отрицательные эквиваленты. Для таких систем снова обязательно наличие нуля среди цифр системы, так как при натуральном основании невозможно в конечном виде представить число нуль. Пусть вначале основание системы счисления S=2/?+l есть нечетное число. Возьмем набор количественных эквивалентов цифр вдда {—/?, — /? + 1, ... , -^1, О, 1, ... , R} и покажем, что с помощью этого набора цифр можно выразить любое целое число конечным образом. Теорема 1.2. Для системы с нечетным натураль- ным основанием 5 = 2/? 4- 1 набор цифр с количест- венными эквивалентами { —R, —/?+1, ... , — 1, О, 1, ..., позволяет представить любое целое число в конечном виде. Доказательство. Покажем, что с помощью данных цифр возможно выразить все количественные эквиваленты, соответствующие цифрам смещенных систем для данного основания 5. Это следует из сле- дующих равенств: /? + 1 = 1.S1 + (-/?)• S° = 2/? + 1 -/?, ,/? + 2 = 1-S1 + (- R + 1)-S° = 2R + 1 - R + 1, 2R = 1 -S1 + (- 1)-S° = 2R + 1 - 1, _/? _ 1 = (_ 1).£1 + #.S° = _ 2# - 1 + Я, -/?-2 = (-l)-S1 + (/?+ l)-5°= —2/?—1 4-7?-1, -2/? = (-l)-51 + l’S°= — 2/?— 1 + 1.. Нужно показать, что выбранная нами система цифр не является неизбыточной. Справедливость этого ут- верждения следует из того, что все введенные нами цифры используются при доказательстве справедли- .2* 19
вости теоремы 1.2 и устранение любой из них делает теорему 1.2 неверной. Определение 1.4. Системы счисления с нечет* ным натуральным основанием 5 = 2/? 4=1 и цифрами { —/?, —/?+ 1,..., 0,... , /?} называются симметрич- ными системами счисления. Симметричные системы счисления распространены не так широко, как смещенные системы, хотя по ряду характеристик они явно предпочтительнее смещенных систем. Достаточно указать, что при том же коли- честве цифр, что и в смещенной системе, п©- одному и тому же основанию 5 симметричная система пред- ставляет все целые числа, а смещенная система — только числа одного знака. Если система счисления такова, что ее основание является четным числом, to построение симметричной канонической системы становится невозможным. В самом деле, пусть 5 = 2/?. Тогда, если предполо- жить, что задана симметричная система, то из того,, •что при этом задано множество цифр R, /? + 1,... , —1, 0, 1,..., /?}, следует, что для числа х =/? /? = /?• 5° и /?= 1-5’ +(-/?)•5° = 2/?-/?. Это свидетельствует о нарушении требования одно- -значности представления, и рассматриваемая система не является канонической. Таким образом, при четном основании симметрич- ная система счисления построена быть не может. Определение 1:5. Системы счисления с нату- ральным основанием и цифрами {— Q, —Q + 1, ... , О,..., Т\, где а общее число цифр равно 5, называются кососимметричными системами счисления. По своим свойствам кососимметричные системы занимают промежуточное место между симметричными и смещенными системами. Однако кососимметричные системы по целому ряду своих свойств мало эффек- тивны для использования в вычислительных машинах. Подробнее этот вопрос будет рассмотрен нами в § 1.4. Рассмотрим вопрос о диапазоне представления чисел, если число разрядов, используемых для записи числа, фиксировано и равно п. Не теряя общности, можно предполагать, что эти п разрядов имеют но- •20
мера 0, 1-,, п— 1. Если мы имеем систему счисле- ния с основанием S, то при неизбыточном представ- лении в каждом разряде может использоваться одна из S различных цифр. Тогда общее количество раз- личных комбинаций цифр, которое можно получить в п разрядах, равно Sn. В силу однозначного пред- ставления чисел, это соответствует тому, что в п разрядах может быть записано S“ различных чисел. Если рассматриваемая система является смещен- ной, то с помощью п разрядов в ней можно предста- вить все целые числа одного знака (положительные или отрицательные) из диапазона (0, Sn — 1} или {О, — S"+l}. При симметричной системе и ос- новании S = диапазон’ представления есть | — п(1 + S'1-1), — — д(1 + 5"-1) j . Наконец, для ко- (2 2 J сосимметричных систем с Q неотрицательными экви- валентами и 5 — Q отрицательными эквивалентами цифр диапазон представления есть {(Q—1)" —1Г — (S —Q)"—1}. Рассмотрим теперь проблему перевода записи числа х из одной канонической системы счисления в дру- гую. В начале будем предполагать, что рассматри- ваются смещенные системы счисления. При этом, не теряя общности, можно предположить, что цифрами такой системы являются 0, 1, 2, ... , S — 1. Сначала рассмотрим перевод для случая целых чисел. Пусть целое число х представляется в системе счисления с основанием S как Ws= [(aj)]k-Sk + [(оЛ-Г^”1 + + L(«,)lo- Это представление будем считать известным. Задача состоит в определении на основе этого представле- ния числа х в системе счисления с основанием (^= к^к-я"1 + -я"1-1 -r1+кед>- - Неизвестными здесь являются параметр т и.значения цифр в разрядах от нулевого до /д-го. Будем предполагать также, что и K^)L от- • личны от нуля. Так как оба выражения для (x)s.и (x)R имеют один 21
и тот же количественный эквивалент, то [(й./)]й S* + К^/Яй-гЗ* V+ ... + K^Oli-S1 + + ИЯо = №-Ят + +... + н-ВД'^ + КМо- Разделим обе части этого равенства на R по правилам деления в системе счисления с основанием S. Тогда +КЙЛ-ГПГ + - + *7+ - ++кед»-,-а"-2+ f\ • ' +- + [ед + [(Ъ)]о“- /\ Остаток от этого деления совпадает с цифрой {(^)]0. Отбросим слева и справа остатки от деления. Тогда получим , &)s = К^)1 S* + Й)Ь -s^1 +... + [ц.)]г 54 [Ц.)]о « k—1 и + K^)L-r^“2 + - + [(^)]р где х есть число, равное частному от деления х на R. Приравняем эти разложения ' I4)k-Sft~ + I4)L -51-1 + ... + [(аД-51 + k k—1 + [Й)]о = + [4)L-r#m-2 +... + [(^h- Снова делим обе части этого равенства на R по правилам деления в системе счисления с основанием 5 ей Qk—1 01 [(Ч~ т+1(^й~ + - +1(* т+ Й К Й—1 К + [ЦЯо-v = + КШ-гЯт~3 + - + К + [ад+[(Мгт-- Остаток от деления совпадает с [(^Ж. Далее повторяем процесс деления вновь получен- ного частного на R и т. д. 22
Из этих рассуждений вытекают следующие пра- вила перевода целого числа из записи в системе счисления с основанием S в систему счисления с ос- нованием R. 1. Разделить (л)5 на R до получения остатка. Остаток запомнить. 2. Проверить, не равно ли частное нулю. Если не равно, то принять его за новое число и вернуться к пункту 1. 3. Если частное равно нулю, то выписать все по- лученные остатки от деления в порядке, обратном порядку их получения. Полученная запись есть . Пример 1.1. Перевести число (л)10 = 2574 в шесте- ричную систему. _2574 | 6 __429 I 6 О 426 71 I 6 ’ * 3 ~ 66 11 I 6 5____L. 1 L£ 5 О (х6> = 15 530. Для проверки 'правильности результата воспользу- емся соотношением (1.1): 1-64 + 5-63 + 5-62 + 3-61 + 0-6° = 2574. Пример 1.2. Перевести число (x)i0 = 421 в систему счисления с основанием 15. - . . В пятнадцатиричной системе кроме десяти обыч- ных цифр необходимы еще цифры с количественными эквивзлентами, равными 10, 11, 12, 13 и 14. Обозна- чим эти цифры как а, ₽, 7, 8, е. 421 ] 15 28 I 15 4 “15 f ] 15 13 0 у (Л)15 = 1&1' В рассмотренном алгоритме перевода записи целого числа из системы счисления с основанием S в систему счисления с основанием R требуется уметь произво- дить деление в системе с основанием S. Можно предложить другой алгоритм перевода, при котором отпадает необходимость проведения операций по пра- 23
вилам исходной системы и все операции проводятся по правилам системы с основанием R. Пусть некоторое число <^>5 = + ... + [(^)]-s1+[(^.)]0 уже переведено в систему счисления с основанием R + [(^)L-r^1 + - +J(Hr^ + [(По- требуется перевести в эту систему запись числа <*)5 = [Ш-^+1 + [(^Ж-1 •£* + - + [(Иг52+ + [(<$ + [(«/)]о- Для осуществления этого проделаем следующие операции в системе счисления с основанием R * {[(М»^+ [(Нт_1-/г-1+...+ [(Н1-/?1[(Но}-/?+[(Ио [(н„г_1-/?,п-1+-+ [(Нг^+кп]}-^-/?) Ш-)Ь-Ят+ KHm-i-^1+...+ +[(И- .То, что стоит в скобках, есть (%)s, и, следовательно, полученное нами выражение есть (х)Л. В приведенном , алгоритме перевода отсутствует . операция деления, которая весьма плохо реализуется в вычислительных машинах. Пример 1.3. Перевести (х)10= 1975 в двоичную систему счисления с цифрами 0, 1. Перевод начинаем со старшей цифры исходного числа. Так как она равна единице, то имеем (1)2 = = (1)10. Применяя наш алгоритм, получим 1 (1)2 = (1)10 10 умножение на 2 -+1001 <1001>2 = <9)10 1000 умножение 1 на 8 , 1 пгги л умножение на 2 Ш J} <11>2 = <3)10 10011000 Уложение 100110 на 8 11000001 умножение на 2 110000010 <Ю1>2 = (5)10 101 умножение 110000010 на 8 +• 11000001000 11110001111 24 4
Окончательный ответ: (%)2 = 11110001111. ' Предложенный способ перевода пригоден, если Рассмотрим теперь проблему перевода дробных чисел. В отличие от перевода целых чисел при пере- воде дробей нельзя говорить о точном переводе, так как если даже S-ичная дробь представляется в виде конечного представления, то нет никакой уверенности, что /?-ичное ее представление будет конечным. В связи с этим задачу перевода дробей ставят, как задачу аппроксимации исходной S-ичной дроби /?-ичной дробью с заданной точностью е. Величину е удобно задавать в виде отрицательной степени 7?. Пусть х есть правильная S-ичная дробь и -S-1 + + ... + КМ-й*^ Если ее требуется перевести в /?-ичную дробь с точностью R~m, то (^=КМ-гГ + КМ-2-/?"2 + ... + При этом [(«Р1-Х-5-1 + [Ц)]_2-5-2 + ... + [Ц)]_а.5-а - КМ-1 +к КМ-2-Я-2 +... + [(М-«-Я"т- Это равенство осуществляется' с заданной точ- ностью перевода. ‘Умножим {x)s [на R по правилам - умножения чисел в системе счисления с основанием S- Тогда [(М-1-5-1^ + K%)]_2-s-M +... + КМ-г^М - КМ-1 + КМ-2-я~\+ - + КМ-игЯ-^1. Целая часть полученного произведения совпадает с [(M-п ~ Пусть х есть дробная часть числа xR. Тогда, если <^= КМ-г^1 + KM-2-S"2 + - + КМ * * —k I то KM-2-S-2 + - + КМ = —k = КМ-2-Я’1 + КМ-з^“2 + - + KM-m^-m+1> 25
'и для определения цифры [(&7)]_2 достаточно произвести умножение (л)5 на R и отделить . целую часть полу- ченного произведения й т. д. Исходя из вышесказанного, получаем правила перевода дробных чисел из одной системы счис- ления, в другую в следующей форме. 1. Умножить (x)s на R по правилам умножения в системе счисления с основанием 5. Целую часть результата умножения отделить и запомнить. 2.4 Принять дробную часть результата за исходное число, вернуться к пункту 1. . 3. Если точность перевода есть Т?"'7, то число повторений пункта 1 равно q. После q умножений на *R выписываются все найденные целые части в порядке их получения. Полученная запись есть-(х)Л. Пример 1.4. Перевести (%)10 = 0,24 в пятиричную систему счисления с точностью 5-4. В соответствии с найденным алгоритмом перевода производим умножение на 5 по правилам умножения *в десятичной системе счисления: 0,24X5=1,2; 0,2X5= 1,0. Так как после второго умножения дробная часть произведения оказалась равной нулю, то это означает, что десятичная дробь 0,24 представляется точной пятиричной дробью и (%)5 = 0,11. В самом деле, на основании (1.1) имеем 1-5-1 + 1-5“2= —= 0,24. 25 Пример 1.5. Перевести (х)10 = 0,31 в четверичную систему, счисления с точностью 4-6. Имеем. 0,31 X 4 = 1,24; 0,96 X 4 = 3,84; 0,36 X 4 = 1,44; 0,24 X 4 = 0,96; 0,84 X 4 = 3,36; 0,44 X 4 = 1,76. Искомое значение есть (л)4 = 0,103311. Пример 1.6. Перевести дробь (л)10 = О,17 в пятнад- цатиричную систему счисления с точностью до 15_°. Имеем 0,17X15 = 2,55; 0,25 X 15 = 3,45;\ 0,75X15=11,25; 0,55 X 15 = 8,25; 0,45 X 15 = 6,75. 26
Искомое значение (л)15 = 0,28360, где 0 есть цифра с количественным эквивалентом, равным 11 (см. при- мер 1-2). Поскольку правила для перевода целых чисел и правильных дробей различны, то при переводе сме- шанных чисел необходимо отдельно перевести целую часть числа и отдельно его дробную часть. Пример 1.7. Перевести число (%)10 — 95,5 в двенад- цатиричную систему счисления. Точность перевода дробной части числа равна 12“4. В двенадцатиричной системе счисления имеется две цифры с количественными эквивалентами 10 и 11, которые отсутствуют в десятичной системе счисления. Эти цифры будем обозначать как а и 0 соответственно. _ 95 | 12 §4 7 |42 П 0 (95)12 = а0 0,5 X 12 = 6,0. Таким образом, (%)12 = а0,6. Перейдем теперь к вопросу о переводе чисел в симметричные и кососимметричные системы счисле- ния. Для перевода в такие системы можно пользо- ваться правилами перевода для смещенных систем счисления с последующи^ выражением цифр смещен- ной системы с тем же основанием, что и рассматри- ваемая симметричная или кососимметричная системы, через цифры рассматриваемой системы. Пример 1.8. Перевести число (%)10 = 407 в симме- тричную пятиричную систему счисления. Осуществляем сначала перевод в смещенную пяти- ричную систему. _407 I 5 405 81 [ 5 2 80 16 I 5 1 ~15 3 LA 1 .° Итак, (х)5 = 3112. В симметричной пятиричной -системе множество цифр есть —2, —1, 0, 1, 2. Поэтому необходимо цифру 3 выразить через цифры 27
этой системы. Легко видеть, что (3) = (12). Здесь за- пись 2 есть запись цифры — 2 в более удобной для нас форме. Таким образом, в симметричной системе число 407 имеет вид (%)5 = 12112. Справедливость этого может быть проверена на основании соотно- шения (1.1) 1-54(-2)-53 + 1-52 + 1-51 + 2-5° = 407. Пример 1.9. Перевести число (л)10 = 0,79 в сим- метричную девятиричную систему счисления с точ- ностью до 9-5. Осуществляем вначале перевод в смещенную девя- тиричную систему счисления 0,79X9 = 7,11; 0,91X9 = 8,19; 0,11X9 = 0,99; 0,19X9=1,61; 0,99X9 = 8,91. Таким образом, (%)9 = 0,70881. В симметричной девятиричной ' системе имеется множесто цифр {— 4, —3, —2, —1, 0, 1, 2, 3, 4}. Выразим цифры 7 и 8 через это множество, цифр. Получим (7)1*0 = (12)9 и (8)10 = (11)9. Для получения правильной записи числа просуммируем составляющие и его цифры по правилам сложения в девятиричной системе симметричного типа. 1,20000 0,00000 + 0,01100 0,00110 . 0,00001 1,21011 Окончательный ответ: (х)9 = 1,21011. Справедли- вость его можно проверить на основании соотноше- ния (1.1) 1-9°+(-2)-9-1+1-9~2+0-9-3+ (—1)-9~4+1-Э-5—0,79. Пример 1.10. Перевести число (х)10 = 3,7 в косо- симметричную систему с основанием 6 и цифрами {— 3, —2, —1, 0, 1, 2). Дробную часть перевести с точностью до 6-4. Целая часть уже практически перевбдена ' в сме- щенную шестеричную систему. Осуществим перевод 28
..дробней части: 0,7X6 = 4,2; ,0,2X6 = 1,2. Далее дробь будет периодической, так как для всех прочих разрядов целая часть произведения будет равна 1. Для смещенной шестеричной системы (л)6 = 3,4111. Для перехода к кососимметричной системе необхо- димо выразить цифры 3 и 4. Получаем: (3) = (13) и (4) = (12). Теперь 13,0000 1,2000 + 0,0100 0,0010 0,0001 12,2111 Окончательный ответ: {х)6 = 12,2111. ’ Перейдем теперь к рассмотрению избыточных 'систем счисления. Избыточность в системы счисле- ния вводится обычно для того, чтобы улучшить ка- кие-либо характеристики этой системы. Из таких характеристик для вычислительной техники интересны две: удобство реализации основных арифметических . операций и надежность представления информации в машине. Мы, в основном, будем рассматривать в этой книге избыточные системы, в . которых избы- точность вводится для упрощения производства основ- ных арифметических операций. При наличии кососимметричных систем счисления выгодно путем введения избыточности приводить их к следующим системам. При основании системы вида S = 2R за цифры берут множество {—R, —R + + 1, ... , 0, ... , R — 1, R, R + 1}. Число цифр этого множества равно 5 + 2. Иногда некоторую избыточ- ность вводят и для симметричных систем. В этом случае, если основание системы равно S = 2R +1, то за цифры избыточной системы берут {—/?—1, — R, ... ..., 0, ... , R, R + 1}, число которых также равно S’ + 2. ' Определение 1.6. Системы счисления с осно- ванием S = 2R и цифрами {—R, — R + 1, ... О, ... , R, R + 1} или основанием 5 = 2 + 1 и цифрами { — R— 1, — R, ... , 0, ... , R, R+ 1} называются квазиканони- ческими избыточными системами счисления. 29
Кроме квазиканонических избыточных систем опре- деленный интерес представляют системы счисления, у которых число цифр лишь на единицу больше ос- нования системы счисления. При четном основании эта лишняя цифра обычно выбирается так, чтобы превратить кососимметричную систему в симметрич- ную, а при нечетном основании эта лишняя цифра, наоборот, превращает симметричную систему в косо- асимметричную. Определение 1.7. Системы счисления с осно- ванием S = 2R и цифрами { — R, — R — 1, ..., 0, ... R— 1, или с основанием 5 = 2/?+1 и цифрами { — 7?, — R— 1,..., О, ... R, называются моди- фицированными квазиканоническими избыточными * системами счисления. Примерами квазиканонических избыточных систем являются, например, десятичная система с цифрами '{ — 5,- —4, —3, —2, —1, 0, 1, 2,*3, 4, 5, 6} или троич- ная система с цифрами {—2, —1, 0, 1, 2}. Примерами квазиканонических модифицированных систем могут * служить десятичная система с цифрами {—5, —4, —3, *—2, —1, 0, 1, 2, 3, 4, 5} или троичная система с циф- рами {—1, О, ls 2}. Избыточные системы будут нами изучаться в §1.5 и 2.4. Задачи 1. В какой системе произведено сложение, если (23—5—) + + (1—642) = 42 423? Цифры, стоящие на месте прочерков, неиз- вестны. 2. Перевести число 205’,3 в двоичную, обе троичные (смещен- ную и симметричную), восьмеричную и пятнадцатиричную системы счисления. Точность перевода для дроби есть S~6. 3. Доказать, что в канонической системе с основанием S число X — Sm изображается единицей в т-м разряде. § 1.2. формы представления чисел в машине В современных вычислительных машинах исполь- зуют одну из двух возможных форм представления чисел: естественную или полулогарифмическую. В этом параграфе мы подробно обсудим достоинства и не- достатки, присущие этим формам представления чисел. 30 .
Естественная форма представления, называемая часто представлением с фиксированной запятой, ха- рактеризуется тем, что местоположение запятой в раз- рядной сетке строго фиксировано. Если, например, любое число записывается в машине в п разрядах, то в случае естественной формы представления запятая всегда (при записи любого числа) стоит после /г-го разряда (k—любой из разрядов разрядной сетки). В силу того что положение запятой строго фиксировано, то любое число х представляется в следующем виде: k n—k *=S IW*. 1=0, /=+1 Практически наиболее удобно фиксировать положе- ние,запятой перед самым левым- разрядом в записи числа. В этом случае для любого х •* = £ [(«;)]/£-' i=i Таким образом, все числа, представимые в машине, 'должны быть меньше единицы. Это означает, что для возможности представления числовой информации в машине, имеющей' фиксированную запятую' перед левым разрядом кода числа, необходимо предвари- тельное масштабирование—Информации. Любое число х представляется как Мх-х, где значение масштаба Мх выбирается из условия выполнения неравенства Естественная форма представления обладает большим числом недостатков. Отметим основные из них-. . 1. При вводе исходной информации в машину не- обходимо вручную ввести масштабы на все числа х. Эти масштабы необходимо запомнить вне машины. 2. При выполнении операций сложения и вычита- ния необходимо следить за тем, чтобы масштабы чисел, участвующих в операции, были бы одинаковыми, так как в противном случае результат операции будет неверным. Так так машина не имеет информации о масштабах чисел, участвующих в операции, то уравнение масштабов должно производиться челове- ком, решающим задачу на машине. При выполнении 31
операции умножения масштаб произведения есть сумма масштабов сомножителей, а при выполнении операции деления масштаб частного есть разность масштабов делимого и делителя. Эти положения также должны учитываться человеком, решающим задачу на данной машине. Пример 1.11. Пусть необходимо найти в десятичной системе счисления при условии, что разрядная сетка машины имеет шесть разрядов. При этом 0,5 <«<1,2; 0,7 <6 <4,5; с—12; 0<б/<350. Вводим масштабы на, исходные данные «=101-«; Ъ — Ю1-#; 'с = 102-с; гУ = 103-г/. В машину вводятся числа a, b, с, d, удовлетворяю- щие неравенствам: 0,05 < а < 0,12; 0,07 < 6< 0,45; #с = 0,12; 0 <rf <0,35 Ю1 + а-b Ь-с Максимальное значение а + b = 0,58 < 1, максималь- ное значение дроби есть------------ > 1. Для устране- «•£> 0,0035 ния этого необходимо изменить масштаб для с. Если выбрать 7Wc = 10 -, то max р 0рз5 < 1, и перепол- нения разрядной сетки не произойдет. Наконец, max — = q. > 1 и Для устранения переполне- ния необходимо взять масштаб для d, равный 107. Теперь 101 (а + Ь) Ч--1У'С—-------— = ю*-я. 10>-fe lO’-b-lO-c = 101 (« + &) + 102~----102 • -A-. a-b b-c 32
Для производства операции сложения и операций вычитания необходимо уравнять масштабы всех сла- гаемых. Для этого вродим М--_ = 101. Тогда 102 («+&) + с d a‘b Ь‘с Результат у получается с масштабом 102. Все проведенные в примере рассуждения позво- ляют оценить трудность работы по масштабированию, которую должен провести человек, решающий задачу на машине с естественной формой .представления число-бой информации. Поскольку при подобной ра- боте нельзя быть гарантированным от ошибок, то не- обходимо предусмотреть в машине специальные методы, которые позволяли бы автоматически устра- нять или по крайней мере обнаруживать возникающие переполнения. Примеры таких методов рассматри- ваются в § 1.4. . 3. Из рассуждений предыдущего пункта вытекает, что для большего’спокойствия лица, решающего за- дачу, можно было бы ввести достаточно большие масштабы, сделав значения х в машине столь малыми, что опасность переполнения разрядной сетки стала бы незначительной. Однако такой путь явно неприем- лем, так как он приводит к потере точности вычис- лений. Если разрядная сетка вычислительной машины со- держит п разрядов, то абсолютная погрешность любого числа х, вводимого в машину, есть As= S“(я+1). Если же оценить относительную погрешность пред- « Дх ставления х, то из соотношения о-=’-г- вытек.ает, х _|х| что чем меньше абсолютное значение х, тем большую относительную погрешность оно имеет. Таким обра- зом, введение числа х в машину с большим -масшта- бом приводит к большой потере точности. Но даже при небольших масштабах исходных дан- ных в машинах с фиксированной запятой относитель- ная погрешность быстро растет за счет того, что результат операции становится меньше по абсолют- ному значению. Особенно опасна в этом смысле опе- Б-79.—3 . 33
рация умножения. Так как сомножители всегда меньше единицы, то произведение всегда меньше (по абсо- лютному значению) сомножителей. Правда при этом увеличивается его масштаб, и человек, решающий задачу на машине, может принять меры к его умень- шению, но это приводит к большой трудоемкости процесса решения задачи. В предельном случае может, случиться так, что первая значащая цифра в коде числа окажется правее самого правого разряда в раз- рядной сетке машины. В этом случае в машине воз- никнет код нуля (так называемый машинный нуль). На самом деле, истинное число х при этом- может быть весьма велико, и результат машинных вычисле- ний будет иметь стопроцентную погрешность. Указанные недостатки позволяют оценить естест- венную форму представления информации с точки зрения человека, решающего задачи на машине, как весьма неудобную. Единственным положительным свойством такой формы является малый расход обо- рудования на представление числовой информации в машине и высокая производительность арифмети- ческого устройства, вытекающая из простой логики производства операций, ибо значительная часть работы по производству их выполняется вручную. Указанные недостатки естественной формы пред- ставления устраняются при использовании полулога- рифмической фопмы, которую называют также пред- ставлением с плавающей запятой. При использовании полулогарифмической формы в разрядную сетку ма- шины записывается не только масштабированное число, но и масштаб этого ‘числа. Если масштаб х имеет вид SPx, где рх— целое, то нет необходимости запи- сывать . в разрядной сетке весь масштаб целиком, а достаточно.записать в ней лишь порядок масштабарх. Значение рх определяет число разрядов, отводимых в разрядной сетке для записи целой части числа х. Таким образом, при полулогарифмической форме пред- ставл-ения всякое число х имеет вид x — S -х, где |х|<1. В этом случае х называется мантиссой чис- ла -х и обозначается как тх. В разрядную сетку за- писывается код порядка и код мантиссы, Нетрудно видеть, что представление числа в полулогарифмиче- 34
ской форме неоднозначно. Если, например, в системе счисления с S= 10 необходимо записать-число х = 68,5, то из того, что записи х = 102*0,685; х = 101 *0,00685 и т. д. эквивалентны, получаются эквивалентные пред- ставления в полулогарифмической форме рх = 2, тх = 0,685 или рх — 4, тх = 0,00685. Для получения однозначного представления чисел в полулогарифми- ческой форме необходимо ввести на мантиссу еще одно ограничение. Потребуем, чтобы для мантиссы имело место неравенство S-1 < |х| < 1. Мантиссу, удовлетворяющую этому условию, называют норма- лизованной. Представление любого числа, кроме нуля, в полулогарифмической форме с нормализованной ман- тиссой является единственным. Возможность представления любого числа х в нор- мализованной форме вытекает из следующего. После- довательность S~k, S~k+\..., S°, S1,..., Sl при S > 1 монотонно возрастающая. Для любого х найдется такое т, что Sm~l < | х | < Sm (тд$0). Деля все члены неравенства на Sm, получим S-1 < 1* Тогда x~Sm‘X, где х= signx*|A:|*S_m. Так как масштаб, числа при его записи в полуло- гарифмической форме введен в машину, то такие опе- рации, как выравнивание масштабов (порядков) при сложении или вычитании, суммирование масштабов при умножении или вычитание их при делении, могут машиной-выполняться автоматически. На долю чело- века остается лишь ввод исходной информации в по- лулогарифмической форме. Если после каждой операции производить норма- лизацию результата, то значение мантиссы будет все время лежать в пределах от S~l до единицы. Это означает, что относительная погрешность представле- ния чисел при полулогарифмической форме постоянна и равна S~(n+1). В отличие от естественной формы представления при полулогарифмической форме абсо- лютная погрешность не постоянна, а зависит от вели- чины порядка. Абсолютная погрешность минимальна при наибольшем отрицательном значении рх и-макси- мальна при наибольшем положительном значении рх. 3* 35
В самом деле, абсолютная погрешность мантиссы при п разрядах, отводимых на нее, есть Д _ <5~". Если л = 5/7-|х|, то абсолютная погрешность записи всего числа есть Дг<5/7-5~". Относительная же по- грешность этого числа = — < 5-n+1 не зависит от величины порядка этого числа. При производстве операций погрешность может резко возрасти за счет операций нормализации. Если, например, при 5 = 2 нам необходимо вычислить на машине выражение w=x—у + z, где х — 24°-(0,5'+2~35), у = 24о-(О,5) и z = 2Ч0,5), то а=л = 240-(0,5+2~35- — 0.5) = 240-(2-35) = 26-0,5; а + z = 26-0,5 + 24-0,5 = *=26-(0,5 + 2 6). Но если изменить порядок действий и посчитать вначале fi — x + z, а затем = р—у, то мы получим следующие результаты: ₽.= х + z = 240 X X (0,5 + 2~35 + 240) (240 считаем пропавшим из-за соро- каразрядной сетки машины): ® = р = 240-2~3® = 26-0,5. Сравнивая два полученных результата, можно найти абсолютную разницу между ними 26-2~6 = 1 и относительную разницу 2~6. При плавающей запятой возможно переполнение ре- зультата операции по порядку. Если значение по- рядка становится большим, чем максимально допусти- мый в данной машине порядок, то происходит потеря порядка, что приводит к неверному результату. В ма- шинах при возникновении переполнения порядка про- исходит остановка машины. На переполнение порядка оказывает -влияние порядок действий над данными. Если, например, снова рассмотреть 5 = 2 и считать, что максимальное значение порядка не превосходит 50, то наше утверждение можно проиллюстрировать сле- дующим примером. Пусть нам требуется подсчитать ® = ^-, где л = 24°-0,5, v = 241-0,5 и z = 23°-0,5. Если 2 вначале подсчитать а = ху = 269-0,5, то произойдет переполнение по порядку. Если же вначале подсчи- тать ₽ —у -,z = 22-0,5, а затем w = х$ = 22-О,5-24о-О,5 = = 243-0,5, то мы получим истинный результат. Отметим, что точность представления в полулога- рифмической форме существенно зависит от -выбора основания системы счисления. • Для вычислительной 36
^машины с основанием S потеря точности по сравне- *нию с двоичной машиной составляет v двоичных раз- рядов, где v выражается из следующего эмпириче- 0 • 6S т-т- ского соотношения: v =? - . Для машин, рабо- V log2 S тающих в десятичной системе, v =1,7, для машин, работающих в восьмеричной системе, ^ = 1,5, а для машин, использующих шестнадцатиричную систему счисления, v = 2,3. Недостатком полулогарифмической формы пред- ставления, является большой расход оборудования при представлении чисел в машинах и большее по срав- нению с естественной формой представления время на производство операций в машине. Остановимся еще на вопросе оценки диапазона чисел, представимых в п разрядах при использовании каждой из форм представления. При естественной форме диапазон чисел, представимых в разрядах, удов- летворяет условию S'" < И < S1 - Здесь I — количество разрядов, отведенных для пред- ставления целой части числа, ат — количество раз- рядов, используемых для записи дробной части числа. При полулогарифмической форме представления S-s<Z < | х| < (1 - S-r).Ss<Z_1. Здесь q — количество разрядов, отводимых в машине для записи порядка, а г — количество разрядов, отво- димых для записи мантиссы. Из сравнения этих двух соотношений вытекает, • что при одинаковом числе разрядов в разрядной сетке машины полулогарифмическая форма представления обеспечивает более широкий диапазон представимых чисел нежели естественная форма. Некоторые трудности при полулогарифмической форме представления вызывает запись числа нуль. Классической формой.записи нуля следует считать запись, при которой и мантисса и порядок равны нулю. Однако возможны и другие виды кода нуля, в кото- рых мантисса равна нулю, а порядок отличен от нуля. Если не принимать специальных мер, то эти коды могут испортить правильность вычислений. Если такой 37-
код встречается при выполнении операций алгебраи- ческого сложения, то он может вызвать сдвиг резуль- тата вправо или влево, а при выполнении операций умножения и деления превратить результат в нулевой при умножении и не дать возможности организовать деление. В современных вычислительных машинах, работающих с плавающей запятой, принято, что нуль может представляться только с помощью нулевой мантиссы и нулевого порятка. Все коды с нулевыми мантиссами и ненулевыми порядками.приводятся путем преобразования к этому стандартному виду. Сравнение естественной и полулогарифмической форм представления числовой информации в машине позволяет сформулировать следующие рекомендации йо выбору формы представления при проектировании вычислительных машин. Естественная форма предпо- чтительнее, для узкоспециализированных машин, ибо на таких машинах решаются однотипные задачи (или одна и та же задача при различных значениях исход- ных данных, лежащих в известных пределах), что позволяет проделать всю работу по назначению мас- штабов заранее на все случаи работы машины. За счет естественной формы проектируемая машина бу- дет относительно простой и будет обладать высокой производительностью. Так как для узкоспециализиро- ванной машины диапазоны изменения всей информации известны, то можно выбрать число разрядов, в раз- рядной сетке так, чтобы при работе машины не про- исходило потери точности и не возникало явление машинного нуля. При построении универсальных вычислительных машин, предназначенных для решения задач самого различного типа, более целесообразно выбирать полу- логарифмическую форму представления. Несмотря на то что производительность машины при этом умень- шается, общее время решения задач меньше, чем при использовании машин с естественной формой пред- ставления, так как выигрыш в производительности, даваемый естественной формой представления, пол- ностью съедается временем ручной подготовки задачи для возможности ее решения на машине. В последнее время при создании универсальных вычислительных машин проявляется тенденция сов- 38
мещения в одной машине обеих форм представления числовой информации. Комбинирование обеих форм представления может оказаться весьма удобным при решении задач на машине. В частности, при вычис- лениях,- требующих повышенной точности, можно комбинировать действия в естественной форме, даю- щие почти постоянную абсолютную погрешность, содействиями в полулогарифмической форме, обеспе- чивающим и почти постоянную относительную по- грешность. Отечественные вычислительные машины старых образцов («Урал-1», «Минск-1», М-1) имели естественную форму представления, машины «среднего поколения» («Стрела», «БЭСМ-2»)’—полулогарифмическую форму, а современные машины («Урал-11», «Урал-16», «Минск-32») обладают обеими формами представления информации. Кроме естественной и полулогарифмической форм представления чисел, в машинах рассматривались и другие формы, которые, однако, приводили к более сложным алгоритмам операций в машине или обла- дали какими-либо другими недостатками. В качестве примера представления, отличного от рассмотрен- ных, можно привести представление, предложенное Вармусом и названное им представлением с трансформирующейся запятой. Для ввода в машину любое чи.-ло х подвергается дробно-линей- ному преобразованию следующего вида ах • A"=—--—-, где0<а<1. 1+|х| Как следует из этого соотношения, —1<Х<1. Обычным опе- рациям сложения, вычитания, умножения й деления над числами х и- у соответствуют некоторые специальные операции над кодами этих чисел X и F. Эти операции определяются следующим обра- зом х. aZ + х-г-х+(-П; Здесь Z=»X|F| + Г | X|; U—X-Y, IX[ = a — |X| и ( —1, Г<0. sign F = | 0, Y = 0. I 1, F>0. 39
Можно доказать, что при таким образом определенных опера- циях над кодами чисел все результаты операций лежат в интервале - (—1, 1). Точность вычислений зависит от | х |. Если |х| близок к единице, то она приближается к максимальной. 11ри стремлении | х 1 к нулю или к бесконечности точность вычислений убывает. С точки зрения повышения точности желательно выбирать а ~ 1. Дробно-линейная форма представления удобна при имитации на машине с фиксированной запятой работы машины с плаваю- щей запятой. При таком имитировании используются специальные программы, реализующие операции над полулогарифмическими числами. Если с помощью таких программ имитировать операции не над числами, представленными в полулогарифмической форме, а над числами в дробно-линейной форме, то объем имитирующих программ резко сокращается. Так, например, при работе на ма- шине EMAL-2 (Польша) объем имитирующих программ при работе в полулогарифмической форме равен 163 командам, а при работе ^С дробно-линейным представлением — 56 командам. , Вторым преимуществом дробно-линейной формы представления является однозначное представление нуля в этой форме. В силу этого при дробно-линейном представлении отсутствуют те труд- ности, которые связаны с многозначным представлением нуля в полулогарифмической форме. В качестве другого примера представления, отличного от классических, можно рассмотреть представление, предложенное "Эмпашёром и названное им представлением с инверсной запятой. При таком представлении любое число х записывается как [а'(х)]Рх . 'Значения а(х) и р(х) выбираются следующим образом. Если | х | < 1, то а (х) = х и р (х) = + 1. Если же I х I > 1, то а (х) = — , х и р(х)~ — 1. В разрядную сетку машины записывают значения й(х) и р(х). Эмпашером рассмотрены алгоритмы арифметических операций при использовании подобного представления. При ими- тации представления с. инверсно i запятой на вычислительной машине с фиксированной запятой получается экономия по срав- нению с имитацией представления с плавающей запятой. Однако эта экономия меньше, чем дри использовании дробно-линейного представления. Третьим примером представления, отличного от классического, может служить представление чисел в логарифмической форме. В этом случае вместо мантиссы числа в полулогарифмической форме берется значение логари рма этой мантиссы. Таксе пред- ставление используется в ряде специализированных машин для осуществления операций умножения и деления. > Несмотря на большое разнообразие форм пред- ставления чисел в разрядной сетке машины, в настоя- щее время в подавляющем числе машин используется одна из двух классических форм представления. По- этому при дальнейшем изложении материала первых четырех глав мы будем рассматривать лишь эти две формы представления числовой информации. - 40
Задачи 1. Записать числа 0,0007. и —26,58 в нормализованной полуло- гарифмической форме при 5 = 2 {0,1}, 5 = 5 {—2, —1, 0, 1, 2} и 5 = 7 {—Д —1, 0, 1, 3, 4}. 2. На машине с естественной формой представления в системе 5= 10 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ввести масштабы для вычисления При этом — 4 < а < 68,5; b = 0,2; 0 < с < 7 5,5. 3. Найти правила сложения и умножения для представления с инверсной запятой. Получить из них правила вычитания и деле- ния заменой в первом случае а(х) на J — а (х) |, а во втором случае заменой р (х) на | — р (л) |. § 1 3. Кодирование отрицательных чисел При использовании систем счисления, для которых алфавит цифр содержит цифры различных знаков (сим- метричные и кососимметричные системы счисления), проблема кодирования знака числа отсутствует. Для таких систем знак числа определяется по виду знака цифры, стоящей в самом, старшем разряде записи числа. Проблема кодирования знака возникает лишь в смещенных системах. Если все цифры смещенной, системы положительны, то с помощью этих цифр можно представлять лишь неотрицательные числа. Если же все цифры смещенной системы отрицатель- ны, то в такой системе представимы только неполо- жительные числа. Для систем первого типа возникает проблема кодирования отрицательных чисел, а для систем второго типа — проблема кодирования поло- жительных чисел, В силу полной аналогии методов решения этих задач мы будем рассматривать смещен- ную систему счисления с положительными цифрами и решать проблему кодирования отрицательных чисел в машине, В обычной практике для кодирования знака числа используются специальные значки «плюс» и «минус».. Однако введение специальных значков в машину по- требовало бы расширения числа цифр в данной си- стеме счисления, что невыгодно. Учитывая, что мес- тоположение знака всегда фиксировано в начале записи числа, можно считать, что в разрядной сетке машины 41
должен быть предусмотрен специальный знаковый разряд, в .котором записывается код знака числа. Так как этот разряд, в разрядной сетке обособлен от число- вых разрядов, то для кодирования знака моЖнб исполь- зовать какие-либо из обычных цифр, представимых в машине. Это позволяет обойтись без расширения алфавита цифр. Имеется некоторый произвол для вы- бора цифр, кодирующих знак числа. Мы будем пред- полагать^_что кодирование знака «плюс» всегда осу- ществляется нулем, а кодирование, знака «минус» — цифрой S — 1. При представлении числа в логарифмической форме необходимо предусмотреть два' знаковых разряда для «нака порядка и для знака мантиссы. В соответствии с вышесказанным любое число х кодируется с уче- том знакового разряда, как Ы 0- ххх2...хп, х>0 1 Jn ( S — 1. хгх2... хп, х < 0. При условии, что |х| < 1, эти соотношения можно переписать в следующем виде 14 == { 5 J щ х < 0. d-2) Рис. 1.1 Рис. 1.2 Определение 1.8. Представление чисел в соответ- ствии с (1.2) назы- вается прямым ко- дом числа х. На рис. 1.1 пока- зано в качестве при- мера, как записы- вается число —72,6 в десятичной и пя- тиричной системах, в естественной и по- лулогарифмической формах. На рис. 1.2 пока- зан диапазон поло- жительных и отри- 42
цатедьных чисел, представимых в машине при исподы- зовании прямого кода. Вместо соотношения (1.2) можно ввести прямой код с помощью более общего соотношения 14*^ { М + х, N2 — x, х>0 х<0, (1.2)1 где 0 < /V1>2 <5—1 и Л\ N2. В частности, при 5 = 2/? полезно бывает выбирать в качестве Л\ циф- ру 0, а в качестве /У2 — цифру R (при 5 = 10, напрш мер, знак «плюс» кодируется цифрой 0, а знак «ми- 'нус» — цифрой 5). Как следует из соотношения (1.2.), нуль в прямом коде допускает неоднозначное представление. Поло- жительный нуль имеет прямой код 0.000 ...0, а отри- цательный— код (5 — 1) 1.000... 0. Заметим, что вместо знака десятичной запятой употребляется знак'деся- тичной точки. Использование знака десятичной точки позволяет нам подчеркнуть тот факт, что слева от него стоит не целая часть кода, а код знака числа. Возможны и другие способы представления отри- цательных чисел. Стремление к другим кодам для записи обусловлено желанием упростить алгоритмы производства операций в вычислительных машинах и, в частности, избежать операции вычитания, которая по своей логике сложна для схемной реализации. Сложность ее реализации определяется тем, что при вычитании бывает необходимо производить1 заем еди- ницы в соседнем старшем разряде уменьшаемого. Если в , соседнем старшем разряде стоит нуль, то необхо- димо смотреть следующий старший разряд. Если умень- шаемое меньше вычитаемого, то такой просмотр про- должается до самого старшего разряда, а после этого необходимо произвести вычитание заново, поменяв уменьшаемое и вычитаемое местами и приписав раз- ности знак минус. Как это следует из соотношения х— = х + (5 — у} — S, можно заменить операцию вычитания х из у операцией прибавления S—y к х с последующим вычитанием из полученного результата величины 5. Используя 43
его свойство, введем код отрицательного числа с по- мощью следующего соотношения W«={s’+^“<o. (1-3> Определение 1.9. Код, определенный с по- мощью соотношения (1.3), называется дополнитель- ным кодом числа. Заменить вычитание сложением можно и на основе следующего соотношения х — у = х + (S + k S~l — у) — S + kS~l, где k любое число от 1 до S — 1, а I может прини- мать значения от 1 до п. Определение 1.10. Код, полученный из выше- приведенного .соотношения при Л=1 и I = п, назы- вается обратным кодом числа. Таким образом, обратный код числа определяется следующим образом JSn, х < 0. (1 ‘4) Из соотношений (1.3) и (1.4) вытекает очевидная связь между дополнительным и обратным кодом числа х Ил = Ио + 5~'!- (1-5) Пусть мы имеем число х в системе счисления с основанием S. Тогда в силу определения 1 его до- полнительный код имеет следующий вид Ид = (S - 1). (S - 1 -“Xj (S — 1 — х2).... .••(S-l-^t!-i)(S-xn). Перейдем от него с помощью (1.5) к обратному коду Ио = (S - 1). (S - 1 - xj (S — 1 —х2).., ... ($ -1 - x;_t) (S -1 - х„). Из этого соотношения и соотношения (1.5) мы получаем простые правила перехода к допол- нительному и обратному коду для отрицательных чисел. 1. Для получения обратного кода отрицательного числа необходимо в каждом разряде S-ичной -записи 44
числа заменить цифру этого разряда на цифру, допол- няющую ее до S—1. В знаковом разряде надо запи- сать цифру S— 1. 2. Для получения дополнительного кода отрица- тельного числа необходимо получить его обратный код и прибавить к последнему числовому разряду одну единицу. Пример 1.12. Записать число ХЛ)ю = — 0,4225 в об- ратном и дополнительном кодах. Для перехода к обратному коду заменим все цифры в записи числа их дополнениями до 9 и в знаковом разряде напишем 9. Тогда получим [х]0 = 9.5774. Для перехода к дополнительному коду добавим единицу в последний разряд обратного кода. Получим [л]д = = 9.5775. Пример 1.13. Пусть (х)8 = 0,4732. Тогда [х]0 = 7.3045, [л]д = 7.3046. Отметим, что положительные числа во всех кодах совпадают с. обычной записью числа. В обратном коде, как и в прямом коде, нуль имеет два представления. Положительный нуль имеет код 0.00 ...0, а отрица- тельный нуль—код (S — 1). (S — 1)(S — 1)...(S — 1). В дополнительном коде нуль имеет единственное представление, так как отрицательный нуль в этом коде в соответствии с (1.4) совпадает с S, а для за- писи кода, соответствующего S, в разрядной сетке машины нет разряда, так как этому коду соответствует единица в соседнем левом разряде по отношению к знаковому разряду. Таким образом, при существую- щей в машине разрядной сетке код отрицательного нуля совпадает с кодом положительного нуля, т. е. будет иметь вид 0.00... 0. Для обратного перевода числа нужно проделать операции в обратном порядке. Пример 1.14. Перевести число [х]0 = 6.52041 в обыч- ную запись. Так как дан обратный код, то цифра 6 в знаковом разряде соответствует отрицательному числу в .семиричной системе счисления. Истинные цифры получаются путем дополнений до 6. Отсюда (х)7 = - 0,14625. 45
Пример 1.15. Перевести число [х]д == 3,40223 в обыч- ную запись. Как следует из содержимого знакового разряда, мы имеем запись в четверичной системе. Сначала путем вычитания единицы младшего разряда перейдем к обратному коду [х]0 = 3.10222. Теперь пу- тем дополнений до 3 получаем истинную запись числа в виде (х)4 = —0,23111. Вместр вычитанйя единицы. младшего разряда при переходе к обратному коду от дополнительного можно пользоваться прибавлением дополнительного для этой единицы числа. Более подробно об этом будет сказано в конце § 1.4. , Соотношение (1.5) показывает, что для получения дополнительного кода числа (используемого для устра- нения операции отрицания в машине) нет необходи- мости производить операцию отрицания, как это сле- довало из (1.3). Из (1.5) вытекает, что достаточно перейти к обратному коду числа, а затем к этому роду добавить единицу младшего разряда. Переход же ж обратному коду, как это следует из (1.4), про- исходит поразрядно с помощью замены по таблице, содержащей всего S строк.' Преимущества выбора одного из двух кодов обрат- ного или дополнительного для представления отри- цательных чисел внутри машины при' производстве арифметических операций будут рассмотрены нами позже. Задачи' 1. Перевести числа 0,75 и —405,89 в систему счисления с осно- ванием 7 с учетбм, что для представления числа кроме ’ знакового разряда используется 10 числовых разрядов, и записать получен- ные коды в естественной форме в прямом, обратном и дополни- тельном кодах. 2. Число—61,5 перевести в систему счисления 5 = 6 с уче- том, что для представления порядка используется три разряда, не считая знакового, а для представления мантиссы — 10 разрядов, не считая знакового. Полученный код числа записать в прямом, обратном и дополнительном кодах, 3. Какому числу соответствует [х]д =5 —1.00...0? 4. Для каких чисел дополнительный код числа совпадает с са- мим числом (х не предполагается удовлетворяющим условию | х | <Z 1)? Аналогичный вопрос для обратного кода. 5. Перевести коды [х]0 =6.5401, [х]д = 8.67081 в обычную запись. 46 ’
§ 1.4. Сложение чисел в естественной форме В этом и следующем параграфах будут рассмот- рены правила сложения для систем счисления канони- ческого типа для чисел, представленных в естествен- ной или полулогарифмической формах. . Вначале рассмотрим случай естественной формы представления, в которой запятая фиксирована перед старшим числовым разрядом. На протяжении всего изложения там, где это специально не оговаривается, предполагается, что результат операции лежит в диа- пазоне представимых чисел в данной системе счис- ления. - Изучение операции алгебраического сложения нач- нем со -случая симметричных систем счисления. Для таких систем понятие алгебраического и арифметиче- ского сложения практически совпадает, так как среди цифр симметричной системы есть цифры обоих знаков, а диапазон положительных и отрицательных чисел оди- наков. В силу этого организация сложения в симметрич- ных системах проста. Нужно только выписать правила сложения для одного разряда с учетом переноса из младшего разряда в старший разряд и при сложении чисел последовательно применять эти правила для ' всех разрядов, начиная с самого младшего. При зада- нии правил сложения можно ограничиться только теми случаями, которые не получаются друг из друга простой перестановкой, так как операция сложения в любых системах, счисления всегда является kom-s мутативной. Пример 1.16. Правила сложения для симметричной системы с S— 5 определяются таблицей 1.1. В соответствии с этой таблицей найдем суммы (х)5 = , 210201 102001 (х)5 = , 022101 110221- (х + j)5 = , 112200 (х + у)5 ==, 02 1222 Вычитание в симметричных системах счисления сводится к инвертированию вычитаемого и прибавле- нию инвертированного кода к уменьшаемому. 47
Таблица 1.1 Первое слагаемое Второе слагаемое Перенос из младшего разряда Сумма Перенос в старший разряд -2 —2 0 1 —1 —2 —2 1 2 —1 —2 -1 0 2 —1 —2 - —1 1 —2 0 —2 0 0 —2 0 —2 0 1 —1 0 —2 1 1 0 0 —2 2 0 0 0 —2 2 1 1 ’ 0 —1 —1 0 —2 0 ....- -1 -1 1 -1 0 • -1 0 0 —1 0 —1 0 1 0 0 —1 1 1 1 0 —1 2 0 1 0 -1 2 1 2 0 0 1 0 1 0 0 А 1 2 0 • о 2 0 2 0 0 2 1 —2 1 1 2 0 —2 1 1 2 1 —1 1 2 2 0 —1 1 2 2 1 0 1 Пример 1.17. Найти х — у в симметричной пяти- ричной системе После перехода к пятиричной записи в естествен- ной форме с одинаковым масштабом 7И = 52 получим (х)5 =, 2210 <~J)S =, 1И2 w (х — у)5 = , 0202 При переходе к десятичной системе, учитывая масштаб, получим (х — у )5 = 2,02 или х = 2 — — = 1 — . 75 25 25 Рассмотрим теперь кососимметричные системы счисления. Как известно, для таких систем диапазон < -
представления положительных и отрицательных чисел неодинаков. Если сложение происходит только в мень- шем из двух диапазонов представления, то кососим- метричные системы ничем не отличаются от симмет- ричных. Если же при сложении используется больший из двух диапазонов, то кососимметричная система становится аналогичной смещенной системе, так как в этом случае часть чисел какого-либо знака уже не кодируется без введения специального знакового раз- ряда, а наличие специального знакового разряда явля- ется специфической особенностью при организации сложения. В силу этого кососимметричные системы не получили достаточно широкого распростране- ния. В этих системах приходится либо жертвовать возможным диапазоном представления чисел, либо переходить на представление с помощью знакового разряда. В первом случае мы получаем симмет- ричную систему с неэкономным, расходом оборудова- ния на представление чисел, а во втором — смещенную систему, обладающую избыточностью, так как одно и то же число для некоторой группы чисел может быть в ней выражено двумя способами при, помощи использования знакомого разряда или при помощи отрицательных цифр. Прямер 1.18. Для кососимметричной ' системы S = 4{—1, 0, 1, 2} с использованием знакового раз- ряда (прямого кода) имеем х=--, (х}4 = -0,11 = 0,11. 16 Отсюда Мп = о.Т1 = 1.1Т. Перейдем теперь к рассмотрению алгебраического сложения в смещенных системах счисления. Как и раньше, будем рассматривать системы, смещенные в положительную сторону. Полученные нами резуль-- тэты будут верны и для систем, смещенных в отри- цательную сторону, с точностью до замены слов «отрицательное число», «знак минус»:на слова «поло- жительное число», «знак плюс». Как и для симметричных систем счисления, для смещенных Систем прежде всего необходимо написать Б-79,-4 .49
правила сложения для одного разряда с учетом пере- носа. Полученная при этом таблица может рассмат- риваться как описание логики работы некоторого гипотетического устройства, имеющего три входа, на которые поступают сигналы, соответствующие значе- ниям цифр в. суммируемых разрядах слагаемых, и пе- • ренос из младшего разряда и двумя выходами — сум- мой в данном разряде и переносом в соседний стар- •ший разряд. При этом формирование значений на вы- ходах суммы и переноса в. рассматриваемом устройстве полностью определяются комбинацией входных сигна- лов в соответствии с тем, как определены значения сумм и переноса в старший разряд для данной вход- ной комбинации в таблице, задающей правила сложе- ния в одном разряде с учетом переноса для данной /системы счисления. Устройство с такой логикой ра- боты мы будем называть одноразрядной суммирующей схемой и условно изображать так, как это показано на рис. 1.3, а. На рис. 1.3, б показано последовательное соеди- нение одноразрядных суммирующих схем. Вся схема целиком называется сумматором и условно изобра? жается так, как это показано на рис. 1.Й, €• бо • :
Рассмотрим сначала логику-работы сумматора, в'котором отсутствует связь между одноразрядной суммирующей схемой знакового разряда и однораз- рядной суммирующей схемой младшего числового разряда. Эта связь показана на рис. 1.3, б пункти- ром. Определение 1.11. Сумматор, схема которого показана , на рис. 1.3, б, не имеющий связи . между одноразрядными суммирующими схемами знакового и младшего числового разрядов, называется суммато- ром дополнительного кода. Логика работы этого сумматора связана, очевидно, с возникновением или невозникновением переноса р0 из знакового разряда. Если этот перенос не возникает, то сумматор дополнительного кода работает обычным образом, производя суммирование по. правилам данной системы счисления. Так как мы предполагаем, что результат суммирования всегда лежит в диапазоне представимости чисел, то в результате работы сум- матора- на выходах одноразрядных суммирующих схем после реализации сложения возникает код числа, рав- ного сумме чисел, поданных на вход сумматора. Если же перенос р0 из знакового разряда возникает, то в сумматоре дополнительного кода он исчезает. Вместо настоящей суммы на выходе сумматора появляется псевдосумма. Перенос из знакового разряда соответ- ствует коду числа, равного 5. Пиэтому псевдосумма на 5 меньше настоящей суммы. Учитывая это, можно описать логику работы сумматора дополнительного кода с помощью следующего соотношения р-° о-6» ( л -г У — pQ — 1. Пусть теперь связь из знакового разряда в млад- ший числовой разряд существует. Определение 1.12. Сумматор, имеющий связь между знаковым разрядом и младшим числовым раз- рядом, показанную пунктиром на рис. 1.3, б, называ- ется сумматором обратного кода или циклическим сумматором. 4* 51
Логика работы сумматора обратного кода зависит1 от значения р0 и определяется следующим соотно- шением х+у, Ро -О •х + у — S + S п, р0 = 1. (1.7) xfflj = Значки ф и ЕН, используе- мые в соотношениях (1.6) и (1.7), соответствуют тем опе- рациям, которые реализуют эти сумматоры. Докажем те- перь две основные теоремы, дающие правила алгебраичес- кого сложения в смещенных системах. Теорема 1.3. При сложе- нии на сумматоре дополни- тельного кода дополнитель- ных кодов двух чисел* всегда получается дополнительный код их суммы. Другими словами, смысл теоремы состоит в том, что Ид Ф Ыд = [х + Л- Доказательство. Рас- смотрим четыре случая, ко- торые исчерпывают все воз- можности, которые могут представиться при сложении двух чисел. 1. Оба суммируемых числа положительны. В этом случае в знаковых разрядах чисел стоят нули и, кроме того, Ид= х и 1Л=^- Проанали- зируем значение р0, которое появляется при суммировании двух положительных чисел на знаковой одноразрядной сум- мирующей схеме. Этот анализ дан на рис. 1.'4, а. На все три 52
входа схемы поступают нули. При этом хзн, узя = 0 по условию рассматриваемого случая, а рзн = 0, так как по условию сумма должна лежать в представи- мом диапазоне и переполнения быть не должно. Но тогда по (1.6) получаем Ил ® [>1д = * + У — И + Л' 2. Суммируемые числа различных знаков, но отри- цательное число больше по модулю, чем положи- тельное число. В этом случае О < х < 1, —1<_у<0 и—1<a? + j/<0. Но тогда И/®[Jl = * + s-l.y|<•$ иро = О. На рис. 1.4,6 показан этот случай. На основании (1.6) получаем Ил ® 1Л = * ® (S + у) =? 5 + (х -О) = [х + Д. 3. Суммируемые числа различных знаков, но поло- жительное число больше модуля отрицательного числа. В этом случае 0<л<1, —1<_у<0 и0<х+у<1. Но- тогда Ид + 1Л = х + (S- И) > $ и р0 = 1. На рис. 1.4, в показан этот случай. На основании (1.6) получаем Ид ® = Л ®(S+jO= 5 — 5 = х+у = 1х+у]д . 4. Оба суммируемые числа отрицательны. Из того, что |х+_у | <1, следует [л]д + [_у]д > 1. Поэтому имеет место случай, показанный на рис. 1.4, г. На основа- нии (1.6) получаем Ид® [>]д — (5 +->с)ф(5 +j) = S +х + S+.V — 5= [х+_у]д . Теорема о сложении в дополнительном коде пол- ностью доказана. 53
Пример 1.19. Проиллюстрируем теорему о допол- нительном коде для канонической смещенной си- стемы с основанием 4. 1. 4 <^>4 = + 0,1021 <У >4= + 0,0312 И,-0.1021 . № [Я-0-0312 [х + .у]д = 0.1333 < x+j >4“ + 0,1333 2. <х >4 = — 0,1021 У >4 ==: + 0,0312 14= 3.2313 Ш Щд = 0.0312 [х+Д = 3.3231 < х+j/ >4 = — 0,0103 3. <х >4=+ 0,1021 <у >4 =—0,0312 [х]д = 0.1021 = 3.3022 [х +Л =10.0103 <х+у >4= + 0,0103 4. , <х >4 = — 0,1021 <У >4 =-0,0312 [4 = 3.2313 [4 = 3.3022 [х + у]д=13-2ь01 <х+у >4= -0,1333. Докажем теперь теорему о сложении в обратном коде.' Теорема 1.4. При сложении на сумматоре обрат- ного кода обратных кодов двух чисел всегда полу- чается обратный код их суммы. - Другими словами, [х]0 Ш L4 = [* + У] о- Доказательство. Как и в доказательстве преды- дущей теоремы, мы рассмотрим все возможные ком- бинации суммируемых чисел. В силу почти полной аналогии рассуждений с предыдущей теоремой будем 54
пояснять только те моменты, которые связаны со спецификой обратного кода. 1. Оба суммируемых числа положительны Ио и [ я = х ш у = к + Л- 2. Суммируемые числа различных знаков, но от- рицательное число по модулю больше положитель- ного. Ио И1Л=* и (&+ у - 5 -") = . = X + у + 5 — S~n = [л +Лг 3. Суммируемые числа различных знаков, но по- ложительное число больше модуля отрицательного числа. k]0 BSkl0 = х ш (s+у - s-n) = = х + 5 + .у — 5 " — 5 + 5 п = х -У у .= к + у]0- 4. Суммируемые числа отрицательны. Ио ffl к]0=(S + X- S-n) ffi (5+У - S-") - = jc + 5—5“"+у + 5 — S~n — 5 + 5“" = = x + j + 5 —5“"=к+Д- Кроме этих четырех случаев, аналогичных слу- чаям, рассматривавшимся в теореме о дополнитель- ном коде, для обратного кода необходимо еще рас- смотреть случай суммирования нуля, так как нуль в обратном коде .имеет неоднозначное представление. 5’. Суммируемые числа равны нулю. Здесь необ- ходимо рассмотреть три подслучая: оба нуля поло- жительны, оба нуля отрицательны и нули имеют разные знаки. a) m [+О]0 = о.оо...о 7 ш [+О]Й = О.ОО...О - - [+0]о = 0.00...0 м _ [- 0]о = (5 - 1).(5- 1) (5 - 1)... (5 - 1) ? 1-0]о = ^-1)-^-П(5-1)...(5-1) 1 (5—1).(5—1) (5—1)...(5—1) I---------.------------1 [- 0]о = (5 - 1).(5 - 1) (5 - 1)... (5 - 1), 55
[- 0]о = (5 - 1).(5- 1) (5- 1)... (5- 1) В [4- 0]о= . О . О О ... О [- О]0’= (S — 1). (S — 1) (S — 1)... (5 - 1) 6. Одно из суммируемых чисел не нуль, а вто- рое — нуль. Здесь необходимо также рассмотреть различные подслучаи в зависимости от того, какой нуль прибавляется к данному числу. , га Ио = Хзн-ЗД •••«„ ' ш [+ 0]о = 0 .0 0...0 Ио = Хзн-Х1Л2-Х„ - м • Мо= Л;,,‘ Л1 Хп 1-0]о = (^-г)-(5-г) (S-l)-.(S-l) 1хзн . х2 ...(Л„-1) I_________________________! Ио = Л'зн • *1 Х2 - Хп. 7. Необходимо, наконец, рассмотреть тот случай, когда суммируются два числа, равные- по абсолютной величине и противоположные по знаку. В этом случае мы имеем Ио ЕВ [- х]0 = х ЕВ (S - х - S -") = = x + S-x^S-" = S-S-n = [—0]о. Теорема полностью доказана. Пример 1.20. Проиллюстрируем теорему о сложе- нии в обратном коде на примере канонической сме- щенной системы с основанием -6. 1- <х>6 = +0,0253 <^>б= + 0,1145 Ио == 0.0253 < х 4~_У >6 = 4" 0,1442 В [4 = 0.1145 [х+ 4 = 0.1442 56
2. < х >6 = + 0,0253 <У >6 = — 0,1145 к+Л = 5-5103 < л + у >б = — 0,0452 3. < х >6 = — 0,0253 <У >6 = + 0,1145 [х1о = 5.5302 Ш Ыо-0.1145 ' 1 0.0451 I____J •' I* +Л = 0-0452 < л+у>6 = +0,0452 4. ‘ < х >'6 = - 0,0253 <> >6=-0,1145 НЗ И == 5.5302 [< = 5.4410 1 5.4112 I----1 [х+<== 5.4113 <х+_У>6=- 0,1442. Как следует из доказанных теорем, дополнитель- ный и обратный коды позволяют избежать в вычис- лительной машине операции прямого вычитания. Опе- рация прямого вычитания сводится к операции сложения дополнительного или обратного кода умень- шаемого с дополнительным или обратным кодом для вычитаемого, взятого с обратным знаком. Рассмотрим теперь проблему обнаружения пере- полнения при суммировании кодов чисел. Явление переполнения при естественной форме представления может возникнуть при суммировании чисел одного знака. Если основание системы счисления больше трех, то обнаружение переполнения не представ- ляет большого труда. При сложении двух положи- тельных чисел при наличии переполнения в знаковом разряде результата вместо нуля возникает цифра единица. Если же переполнение происходит при сум- < - , 57
мйрованйи двух отрицательных чисел, то в случае . дополнительного кода мы получаем ИдФ^]д = 25-(|х| + |Л) = 5-(|х| + |Л). И так как |л| + |_у| > 1, то 5 —(|л| 4- I) < S — 1, и в знаковом разряде результата стоит не S—1, а 5. — 2. Единственная трудность связана со случаем, когда lxl + IjI = 1- В этом случае 5 — (|л| 4- |_у|) = 5— 1, и содержимое знакового разряда не указывает на переполнение. Поэтому при работе с дополнительным /кодом при обнаружении в знаковом разряде цифры S — 1 необходимо еще проверить содержимое число- вых разрядов. Если в числовых разрядах стоят только нули, то имеет место переполнение при суммирова- * НИИ. Для обратного кода [4ffiWo = 2S-(|x| + |j|)-25 ” = ^s~(W + |j|)-S“”=~s-(|x|J+ И +•$"")• •Так как |х| + |у| + S~n > 1, то в знаковом разряде результата вместо S—1 стоит 5 — 2. Если 5 > 3, то 5 — 2 > 1, и по анализу результата, стоящего в зна- ковом разряде суммы, можно определить наличие переполнения при суммировании. При обнаружении переполнения можно скорректировать результат. Для этого необходимо сдвинуть результат^на один разряд вправо. При этом сдвиге крайний правый разряд суммы исчезает, так как в разрядной сетке машины для него нет места. Сдвиг вызывает необходимость увеличения масштаба результата в 5 раз (или увели- чение порядка масштаба на единицу). Человек, решаю- щий задачу на машине с естественной формой пред- ставления чисел, должен учесть это изменение масштаба при дальнейших расчетах. Для возможно- сти этого при наличии переполнения машина обычно прекращает вычисления и выдает сигнал прекраще- ния вычислений по переполнению. В соответствии с этим сигналом человек изменяет масштаб резуль- тата и включает машину на продолжение расчетов. Если до сдвига в знаковом разряде стояла еди- ница, то после сдвига число скорректировано. Если же до сдвига в знаковом разряде стояла цифра 5 —- 2, 58
то все зависит от того, какая цифра появляется в знаковом разряде при сдвиге: нуль при S-—2. В первом случае к сдвинутому числу необходимо прибавить корректирующее число (5—1). 00...0, а во втором случае — корректирующее число 1.00...0. Пример 1.21. Пусть в четверичной системе кано- нического типа с цифрами 0, 1, 2, 3 требуется найти сумму чисел <х>4 = —0,2301 и <у >4 = —0,2033. Переходя к обратному коду, получаем Ио = 3.1032 Ш « = 3.1300 1 2.2332 I_______! 2.2333 Появление в знаковом разряде цифры 2 вместо 3 показывает, что произошло переполнение. Для устра- нения переполнения сдвинем числовую часть резуль- тата на один разряд вправо с учетом потери при сдвиге крайнего ппавого разряда результата. После сдвига получим 2.2233. Теперь прибавим к сдвину- тому числу корректирующее слагаемое 2.0233 Д.0000_ 3.2233 <х+у/>4 = 4.(—0,1100). Полученный результат соответствует истинному зна- чению суммы. Теперь рассмотрим переполнение для случая 5 = 3,2. Для троичной системы 5 — 2 = 1. Поэтому в такой системе переполнение может быть обнару- жено, но не может быть исправлено. Для двоичной системы 5 — 2 = 0, а 1=5—1. Это означает, что переполнение в двоичной системе вообще не обна- руживается, так как машина не может отличить неправильный результат от правильного. В случае 5 = 2 при переполнении для машины происходит про- сто смена знака результирующего числа. Для возможности исправления переполнения в тро- ичной и двоичной системах счисления приходится вводить специальный контрольный разряд, помещае- 59
мый слева от знакового разряда. Контрольный разряд заполняется так же, как и знаковый. Коды, содержа- щие кроме знакового разряда еще и контрольный разряд, называ^отся модифицированными кодами. По- этому можно говорить о модифицированной прямом, дополнительном или обратном коде. Для модифицированного кода мы будем исполь- зовать обозначения [х)мп, [х]мд или [л]мо. Если в ре- зультате суммирования в модифицированном коде в троичной системе в знаковом и контрольном раз- рядах стоят одинаковые цифры 00. или 22., то это соответствует отсутствию переполнения. При нали- чии переполнения для суммы двух положительных чисел в знаковом и контрольном разрядах возникнет комбинация 01., а при наличии переполнения при суммировании двух отрицательных чисел в этих раз- рядах возникнет комбинация 21. . Таким образом, будет обнаружено переполнение при суммировании и результат сложения может быть исправлен. Аналогичное положение получается и.для двоич- ной системы. При отсутствии переполнения в знако- вом и контрольном разрядах суммы стоит комбина- ция 00. или 11. . Если же произошло переполнение, то при суммировании положительных чисел в знако- вом и контрольном разрядах будет стоять комбина- ция 01., а при суммировании отрицательных чисел — комбинация 10. . Таким образом, с помощью моди- фицированных кодов можно обнаружить и исправить ошибку переполнения при суммировании в троичной и двоичной системах счисления. Прлмер 1.22. Пусть требуется сложить в двоич- ной системе счисления числа < х >2 == 0,101101 и <У >2 = 0,011100. Переходя к дополнительному коду, получаем Ы =0.101101 ffi" д [у]д = 0.011100 х ~ 1,001001, и ошибка переполнения не обнаруживается. При не- модифицированном коде машина прочитает результат сложения, как <х + у>2 =— 0,110111, что совер- шенно не соответствует .настоящему результату. 60
Перейдем теперь к модифицированному дополнитель- ному коду , Имд = 00.10П01 Ымд = 00 011100 01.001001. Появление- в знаковом и контрольном разрядах комбинации 01. указывает на переполнение. Для устранения переполнения необходимо . произвести сдвиг результата вправо на один разряд. После сдвига получим число 00.100100. Прибавление коррек- тирующего слагаемого в случае двоичной системы не требуется, если при сдвиге числа содержимое контрольного разряда числа после сдвига совпадает с тем значением, которое было записано в нем до сдвига. Так как модифицированный код необходим только для контроля при сложении, то хранить информацию в памяти машин в модифицированном ко- де, так как это привело бы к большому и малоэффективному расходу оборудования для за- писи содержимого контрольно- го'разряда. Поэтому практичес- ки контрольный разряд форми- руется лишь при передаче числа в сумматор путем размноже- ния Содержимого знакового раз- ряда поступающего в сумматор числа. До сих пор мы предполагали, что суммирование чисел проис- ходит на сумматоре параллель- ного типа, показанном на рис. 1.3. Однако все наши выводы вер- ны и для случая суммирования нет необходимости чисел с помощью сумматора последовательного типа, схема которого изображена на рис. 1.5. В этом сум- маторе имеется всего одна одноразрядная суммирую- щая схема, на вход которой подаются суммируемые числа, начиная с младших разрядов. Перенос в стар- 61
ший разряд попадает в цепь обратной связи и посту- пает на вход одноразрядной суммирующей схемы с задержкой на один такт. , Если для сумматора параллельного типа представ- ление числа в виде дополнительного или обратного кода равноценно, то-для сумматора последователь- ного действия эти коды явно' неравноценны. При использовании дополнительного кода переноса из знакового разряда нет, если такой перенос возникает, то он просто пропадает. При использовании же об- ратного кода при возникновении переноса из знако- вого разряда необходимо передать единицу в млад- ший разряд суммы. Но в сумматоре последователь- ного типа младший разряд уже ушел из сумматора, так как сумма в младшем разряде была получена на первом такте суммирования. Это означает, что при работе с обратным кодом на сумматоре последова- тельного действия необходимо сумму еще раз про- пустить через сумматор, начиная с ее младшего раз- ряда. К этой сумме необходимо прибавить единицу переноса в младший разряд и возможные переносы из младших разрядов в старшие, которые могут воз- никнуть при добавлении единицы в младший разряд суммы. На рис. 1.5 необходимость повторного про- хождения суммы через одноразрядную суммирующую схему показана в виде -цепи обратной связи с выхода суммы. Задержка в этой цепи обратной связи есть задержка на п +1 такт суммирования, если число разрядов (включая знаковый) равно п + 1. Вообще по целому, ряду причин для машин после- ’ довательного действия обратный код менее удобен нежели дополнительный. Особенно это относится к машинам с двухадресной системой команд, в кото- рых использование обратного кода, приводит к потере возможности совмещения в одном такте выборки второго слагаемого из памяти машины, суммирования слагаемых и отсылки результата на место второго слагаемого. С другой стороны, дополнительный код менее удобен, чем обратный (по крайней мере, при исполь- зовании двоичной системы счисления), тем, что для перевода в этот код и обратного перевода требуется' лишний такт, связанный с тем, что вначале осуще- 62
ствляется перевод в обратный код, а уж за1ем из обратного кода в дополнительный код. При этом при обратном переводе требуется вычитание одной еди- ницы младшего разряда. . _ Однако для сумматоров параллельного типа этот недостаток дополнительного кода при прямом пере- воде несуществен, так как добавление единички младшего разряда может происходить непосред- ственно при суммировании. При обратном переводе вычитание единички младшего разряда заменяется прибавлением ,ее дополнительного кода, равного S-S~n. Если предполагать, что любые пары чисел из ин- тервала (—1,1) равновероятны, то превращение числа в его дополнительный код придется делать примерно в половине случаев сложения-вычитания. Однако, так как программист старается исключить такие слу- чаи суммирования, когда возникает переполнение разрядной сетки, то 0,25 всех случаев суммирования можно считать практически не встречающимися при реализации алгебраического сложения. Тогда число случаев, в которых приходится брать дополнительный 2 или обратный код, возрастает до — от общего ко- личества случаев сложения-вычитания. В этих рас- суждениях мы предполагаем, что числа хранятся в памяти машины, в прямом коде и при одинаковых знаках слагаемых они суммируются без обращения в дополнительный или обратный код. После выпол- 1 нения суммирования примерно в — всех случаев 3 результат получается в дополнительном или обрат- . ном коде, соответствующем отрицательному резуль- тату. При хранении информации в памяти машины в прямом коде в этих случаях потребуется обратное преобразование результата в прямой код. Соотношение вероятностей необходимости пере- ходй- к какому-либо коду и вероятностей отсутствия такой необходимости иллюстрируется на рис. 1.6. На этом рисунке области, оставшиеся незакра- шенными, соответствуют случаям, когда нет пере- хода к каким-либо -кодам; области, покрытые пунк-
тирными' линиями, соответствуют случаям, когда совершается однократный переход к какому-либо коду; области, покрытые наклонными линиями, соот- ветствуют случаям, когда преобразование кодов Рис. 1.6 совершается дваж- ды; наконец, обла- сти, закрашенные в темный цвет, соот- ветствуют тем слу- чаям сложения, ко- торые исключаются программистом при решении задачи на машине с фиксиро- ванной запятой. Если через то обо- значить время, не- обходимое для об- разования обратно- го кода в машине, а через ts — время одного суммирова- ния, то при исполь- зовании обратного кода среднее время алгебр аического сложения двух чи- сел с фиксирован- ной запятой на па- раллельном сумма- торе приблизитель но равно ' . ,1 ,1 . 3 т 4- 4-т -4— = т 4— т_. о1 £‘зо‘22 0 2 е При использовании дополнительного кода 2 9 1*1 У т° + + 7to + ^ = to + 2v • Если же происходит совмещение такта сложения с добавлением единицы в младший разряд сумматора, |то для дополнительного кода среднее время сложения Iй
есть 2 . .1 .1 .4 — т 4- т„ 4--т 4---= t 4------т„. 3 ° 2 3 0 3 2 о з е Задачи 1. Для симметричной системы с 5 = 7 найти правила сложе- ния-вычитания и найти х + у и х—у для <х>7 = —0,5123 и <^>7 = —0,0026. 2. Для смещенной системы с S — 5 найти правила введения дополнительного и обратного кода, и найти х+у и х—у для < х >5 = 0,3021 и <_у>6 =— 0,4102. Ликвидировать переполне- ние, если оно возникает. 3. Найти правила ликвидации переполнений для симметрич- ных систем счисления. § 1,5. Сложение чисел в полулогарифмической форме и в избыточных системах счисления Сложение в полулогарифмической форме отли- чается от сложения чисел в естественной форме не- обходимостью работы с порядками и нормализацией мантиссы после операции сложения. Как и в предыдущем параграфе, рассмотрйм вна- чале реализацию операции сложения для симметрич- ных систем счисления. Числа, участвующие в опера- ции, будем предполагать нормализованными. Пра- вила сложения'для симметричных систем имеют следующий вид. 1. Проверить равенство порядков слагаемых. Если порядки слагаемых равны между собой, то перейти к работе с мантиссами (пункт 3 настоящих правил), если порядки не равны, то увеличить меньший поря- док до большего. « 2. Если меньший порядок увеличен на т единиц, то это соответствует увеличению масштаба числа в Sm раз. Поэтому для сохранения величины числа необ- ходимо сдвинуть его мантиссу на т разрядов вправо с потерей т правых разрядов в ее числовой части. 3. Произвести суммирование мантисс по правилам сложения чисел в естественной форме представления. 4. Проверить нормализацию результирующей ман- тиссы. Если результирующая мантисса tnx+y 1 (произошло нарушение нормализации влево), то ре- зультирующую мантиссу надо сдвинуть на один раз- Б-79.-5 65
ряд вправо с потерей крайнего правого разряда ман- тиссы, а порядок суммы увеличить на единицу. Если результирующая мантисса tnx+y<S~x (произошло нарушение нормализации вправо), то необходимо сдвинуть результирующую мантиссу влево на столько разрядов, пока нарушение не устраняется. Если число Сдвигов равно I, то в I правых разрядах мантиссы после сдвига стоят нули, а порядок суммы умень- шается на I единиц. Если результирующая мантисса нормализована, то сумме приписывается порядок большего из слагаемых. Пример 1.23. Найти сумму <х>9='32,4 и <_У>9 = = 42,3 в симметричной девятиричной системе в полу- логарифмической форме. Преобразуем заданные числа в полулогарифмиче- скую нормализованную форму. Тогда <л>9= 92-0,324 и <у >9 = 92-0,423. Теперь найдем сумму этих двух чи- сел. Так как порядки их равны, то суммируем мантиссы по правилам сложения чисел в естественной форме 0,324 + 0,423 1,20Т В силу того что результирующая мантисса по мо- дулю больше единицы, произошло нарушение нор- мализации влево. Для устранения этого сдвигаем полученную мантиссу на один разряд вправо и уве- личиваем порядок на единицу. Окончательный ответ < л:+у >9 == 93-0,120., Пример 1.24. Найти сумму <х>5 = 0,2021 и . < .У >5 = 21,2 в пятиричной симметричной системе в полулогарифмической форме. Переходя к нормализованной полулогарифмической форме, получим О>5 = 5°-0,202Т и <у>5= 52-0,212. Так как порядки слагаемых не одинаковы, то увели- чиваем меньший порядок до большего. Тогда число х записывается в виде < х >s = 52-0,0020. Теперь про- изводим сложение мантисс: , 0,0020 + 0;2120 . 0,2210 G6 ' .
Результирующая мантисса нормализована, поэтому результат имеет вид < х + у >5 = 52-0,2210. Сделаем некоторые замечания относительно при- .веденных нами правил сложения. Порядок f меньшей величиной увеличивается до порядка с большей вели- чиной. Это вызвано тем, что уменьшение большего .порядка до меньшего привело бы к необходимости сдвига числа влево на число разрядов, равное разно- сти порядков слагаемых. Но сдвиг влево практически невозможен из-за отсутствия разрядов в разрядной сетке машцны. В результате такого сдвига мы поте- ряли бы старшие значащие разряды одной из мантисс. Обнаружение переполнения разрядной сетки (на- рушения нормализации влево) происходит за счет введения в сумматоре дополнительного резервного разряда между младшим разрядом порядка и стар- шим разрядом мантиссы. Для нормализованной ман- тиссы содержимое этого разряда равно нулю, а при возникновении переполнения в этом разряде появ- ляется единица. Обнаружение нарушения нормализации вправо про- исходит путем проверки содержимого первого знача- щего разряда мантиссы. Если в этом разряде стоит нуль, то при отсутствии нарушения нормализации влево это свидетельствует о нарушении нормали- зации вправо. Исходя из этого, вначале необходимо проверить наличие нарушения нормализации влево, а уж затем проверять нарушение нормализации вправо. Если в результате операции сложения результи- рующая мантисса оказалась равной нулю, то признак нарушения нормализации вправо будет присутство- вать после любого числа сдвигов результирующей мантиссы влево. Поэтому максимальное число сдви- гов, которое необходимо делать при исправлении нарушения нормализации вправо, не должно превы-’ шать /г, где п число разрядов в числовой’части ман- тиссы. Если после п сдвигов нарушение нормализа- ции вправо не устранено, то это свидетельствует о получении нулевой результирующей мантиссы. Пример 1.25. Найти сумму чисел <л:>3 = 2,012 и <у >3 = 2,010 в полулогарифмической форме в сим- метричной троичной системе счисления. 5* 67
Переходя к нормализованному полулогарифмиче- скому представлению, получаем < х >3 = 31*0,2012 и <у >3 = 31-,0,2010. Так как порядки слагаемых равны между собой, то суммируем их мантиссы 0,2012 +-0,2010 0,0002 Так как в левом ,резервном разряде нет единицы, то нарушения нормализации влево нет. Наличие нуля в первом значащем разряде мантиссы указывает- на нарушение нормализации вправо. - Для устранения этого нарушения сдвигаем результирующую мантиссу *на один разряд влево и "одновременно уменьшаем порядок результата на единицу. Сдвинутая мантисса имеет вид 0,0020. Она снова не нормализована. По- вторяем сдвиг мантиссы на один разряд влево и уменьшение порядка результата .на одну единицу. .Сдвинутая мантисса 0,0200 все еще не нормализо- вана, поэтому еще раз повторяем операцию сдвига мантиссы и уменьшения порядка результата. После этого сдвига получаем нормализованную мантиссу 0,2000. Окончательный ответ < л +у >3 = 3-“2 0,2000. Теперь перейдем к рассмотрению операции вычи- тания. Для симметричных систем операция вычитания сводится к инвертированию мантиссы вычитаемого и реализации операции сложения. Пример 1.26. Вычесть из < х >5 =-53*0,210Т число <у >5 = 52.0,1220. Проводим инвертирование числа у, для чего_ ин- вертируем мантиссу этого числа: < —у >5= 52*0,1220. Далее осуществляем сложение чисел х и (— у). Теперь рассмотрим операцию сложения-вычитания в полулогарифмической форме для смещенных систем счисления. Правила, сформулированные нами для симметрич- ных систем, годятся и для смещенных систем. Един- ственное отличие состоит в методах . обнаружения нарушения нормализации в результирующей мантиссе. чДля обнаружения переполнения в смещенных систе- ' мах используется либо проверка содержимого знако- св ’
рого разряда, если 5>3, либо переход к модифици- вованным кодам, если 5 = 2,3. Для выявления нару шения нормализации вправо необходимо определить знак результирующей мантиссы. Если результирую- щая мантисса положительна, то признаком нарушения нормализации вправо служит наличие нуля в первом значащем разряде результирующей мантиссы. Если же результирующая мантисса отрицательна, то для обратного кода признаком нарушения нормализации вправо является появление в первом значащем раз- ряде результирующей мантиссы цифры S — 1. Для случая дополнительного кода это правило верно за одним исключением. Если записать в дополнитель- ном коде число —S~~", то мы получим {— £-"]д = (S — 1). (S — 1)... (S — 1) (S — 1). И хотя в данном слу- чае нарушения нормализации вправо нет, признак наличия нарушения* срабатывает.- В машинах, исполь- зующих представление чисел в дополнительном коде, необходимо при обнаружении нарушения нормализа- ции вправо проверить, не является ли результирую- щая мантисса числом, равным — S~". Для выявления нарушения нормализации вправо сравнивается содержимое знакового разряда и пер- вого значащего разряда мантиссы.- Если содержимое этих разрядов, не совпадает, то нарушения нормали- зации вправо нет. В противном случае, при исполь- зовании в. машине обратного кода можно утверждать, что произошло нарушение нормализации . вправо, а при использовании в машине дополнительного кода необходимо проверить, не имеет ли место случай тх+у = — S ~п. Если это не так, то можно утверждать, что произошло нарушение нормализации вправо. Пример 1.27. Сложить в четверичной смещенной системе числа <л>4 = 3,21 и <у >4= — 21,03. После перехода к нормализованной полулогариф- мической форме получим <л >4= 41-0,321 и <У>4 = = —42-0,2103. Увеличиваем меньший порядок до большего. Тогда число л: принимает вид <л>4 = = 42-0,0321. Для суммирования мантисс введем для них обратный код: = 0.0321 и [ту]0 = 3.1230. Теперь суммируем мантиссы по правилу сложения 69
чисел с фиксированной запятой в обратном коде KJ0= 0.0321 Ш [оту]0 = 3.1230 1^+Л = 3-22И Так как в знаковом разряде результирующей ман- тиссы стоит цифра 3, то переполнения не произошло. Наличие в знаковом разряде и первом значащем раз- ряде мантиссы несовпадающих цифр говорит об от- сутствии нарушения нормализации вправо. Таким образом, окончательный результат суммирования имеет вид < х +у >-J=.42-0,1122. ' * Пример 1.28. Сложить в пятиричной смещенной системе числа <л>5 = —0,04 и <_у>б =—0,441. Переходим к нормализованной полулогарифмиче- ской форме О>5= —5-1 -0,400 и <у>5= — 5°-0,411. Преобразуем код числа х в код<х >5 = -- 5°-0,040. Те- перь просуммируем мантиссы в дополнительном коде гй Юд = 4.410 W ИХ = 4.004 К+Л=13.414 * Наличие цифры 3 в знаковом разряде свидетель- ствует о переполнении разрядной сетки. . Для исправ- ления нарушения нормализации влево сдвигаем ре- зультирующую мантиссу на один разряд вправо, сохраняя знаковый разряд; Сдвинутая мантисса имеет вид 3.341. Теперь прибавляем к этой сдвинутой ман- тиссе корректирующее число 1.000. Окончательно получаем 4.341. Таким образом, ответ имеет вид <х+у >5 = 5^*0,104. Пример 1.29. Сложить в семиричной смещенной системе числа (х)7 = 73-0,251 и (у)7 = —73-0,246. Та.к как порядки слагаемых одинаковы, то перехо- дим к сложению мантисс в обратном коде =0.251 [даД0 — 6.420 10.001 I 1 . [т J к =>0.002 1 Х+у 70
Наличие в знаковом разряде цифры 0 показывает, что нарушения нормализации влево нет. Совпадение со- держимого знакового и первого значащего разряда мантиссы указывает на нарушение нормализации впра- во. Осуществляем последовательные сдвиги мантиссы на один разряд влево с уменьшением порядка резуль- тата на единицу. После двух сдвигов получаем нор- мализованную мантиссу 0.200- Таким образом, окон- чательный ответ имеет вид {х + _у)7 — 71- 0.200. Пример 1.30. Сложить в троичной смещенной си- стеме числа (х}3 - 34-2101 и (,у}3 = — 34-0,1022. Так как порядки слагаемых совпадают, то перехо- дим к суммированию мантисс. Так как система счис- ления троична, то 'для суммирования используем мо- дифицированный код (например, модифицированный дополнительный код). [тДмд = 22.0122 [т^ид = 22.0122 ,21.2100 Несовпадение цифр в знаковом .и контрольном разрядах указывает на нарушение нормализации влево. Для исправление сдвигаем мантиссу вправо на один разряд и увеличим порядок на единицу. Сдвинутая мантисса имеет вид 22.1210. Окончательный ответ (x + j/)3 = — 35-0,1020. При подсчете времени выполнения операции сло- жения в полулогарифмической форме вознйкают неко- торые затруднения, связанные с оценкой вероятности уравнивания порядков перед суммированием мантисс и вероятности нормализации результирующей ман- тиссы. Точная оценка полного времени суммирования затруднительна и должна проводиться на основе изу- чения статистических данных, собранных при решении на машине задач некоторого класса. Основное время сложения при параллельном сум- маторе связано не только с непосредственной опера- цией суммирования, но и с возникновением переносов между разрядами. При этом существенную, роль играет длина переноса, так как от длины переноса зависцт время 'суммирования чисел. Как показывают расчеты, , математическое ожидание -времени сложения двух п разрядных чисел, пропорционально для большинства 71
типов сумматоров logsn— 1. Более точно ——- >1 при п—»оо (здесь Мп — математическое ожидание вре- мени суммирования). Однако и для конечных значений п это утверждение выполняется достаточно точно. Например, при S = 2 и п = 40 — = ^4|=1,07. F к log2 п 4,32 Поиски путей сокращения времени сложения, ос- новной операции для вычислительных машин показали, что определенную выгоду может дать использование для сложения квазиканонических систем счисления, дающих избыточное представление числа. За счет имеющейся избыточности можно попытаться сократить Длины переносов, возникающих при суммировании, и получить выигрыш во времени. Как будет показано ниже, при использовании избы- точных систем решается даже более существенная зада- ча, заключающаяся в том, что длины переносов переста- ют зависеть от числа разрядов суммируемых чисел ине превосходят некоторой установленной величины. Для квазиканонических систем эта величина равна единице, что означает отсутствие переносов при сложении да- лее чем на один разряд влево. Такое сложение можно назвать параллельным, так как сумма в каждом раз- ряде вычисляется только с учетом переноса из сосед- него правого разряда, а перенос в соседний левый разряд формируется только по значениям цифр, сла- гаемых в рассматриваемом разряде, и не зависит от переноса из соседнего правого разряда. si = Ун Pi). Pi+i = <Р (*z. У г)- Общая блок-схема сумматора, работающего на этом принципе, показана на рис. 1.7. Из требования парал- лельности сложения вытекают следующие очевидные соотношения Xi + yi = Spl+1 + s(. = wt.+ /?,-. Первое из них отражает тот факт, что на первом шаге суммирования в данном разряде формируется промежу- точная сумма и перенос в старший разряд. На втором шаге промежуточная сумма превращается в истинную сумму. 72
Так как суммирование предполагается алгебраи- ческим, то для каждого числа х, представимого в избыточной системе, должно существовать число х, представимое в этой системе, которое является его допол- нением до S. Для облегчения ряда опе- раций желательно, .чтобы из- быточное представление не делало бы неоднозначным представление числа нуль. Для выполнения этого требования достаточно выполнения усло- вия, что эквиваленты, сопос- тавляемые цифрами данной системы счисления, всегда по своему абсолютному значе- нию меньше, чем S. Наконец, для возможности перевода представления числа х из обычной формы записи в запись в избыточной системе, дающей параллельное сложе- ние двух чисел, необходимо потребовать, чтобы для лю- бой цифры обычного пред- , ставления ± xh где х{ бе- рется из множества {0,1,..., Рис. 1.7 5 — 1}, из того, что xt = Spl+1 + wt, следует, что для sz = wt + pt получают- ся допустимые значения. Ясно, что при суммировании двух чисел с учетом, .что абсолютные значения их количественных эквива- лентов не превосходят S— 1, значение переноса pt не выходит из множества {—1, 0, 1}. Тогда для проме- жуточной суммы можно утверждать, что | wz К 5 — 2. Отсюда следует, что для двоичной системы ®, = 0 и это влечет за собой xz^=2pz+1, что не соответствует возможностям перевода из обычной системы представ- ления в избыточную систему, так как при ®, = 0 и х{=1 рассматриваемое соотношение не может быть удовлетворено. Отсюда вытекает, что переход на па- 73
раллельное сложение можно рассматривать только для систем счисления с основанием 5 >2. Из всего вышесказанного вытекает, что требуется, по крайней мере, 5 различных значений для wz, среди которых обязательно должны присутствовать значения — 1, 0, 1. Наибольшее и наименьшее значения свя- заны между собой соотношением ®Г1И — wmin > 5— 1. В этом соотношении знак равенства можно взять только в том случае, когда число используемых зна- ' чений •wi есть 5. Совокупность всех возможных зна- чений однозначно определяется для данного 5 и содержит 2S — 3 .целых значения в диапазоне от — (S — 2) до S — 2. Однако необходимая совокупность значений •wl состоит всего из 5 значений из этого диапазона. Она обязательно включает в себя значения — 1, 0, 1, а в остальном произвольна. Желательно, однако, выбирать совокупность значений симметрич- но относительно нулевого значения. , Пусть, выбрана некоторая совокупность значений вида {wmin 1, 0, 1,..., WmayJ. Тогда значения суммы в данном разряде берутся из множества {«Ут1п 1, ®*mln > , 1, 0» 1, «^max, «Углах "bl}- ЕСЛИ 5 нечетно, то «ymin = «Утах = 0,5(5 — 1). В этом случае для каждого значения «у, и st существует его допол- нение и избыточная система с основанием 5 характе- ризуется набором из 5 + 2. цифр {— 0,5(5 + 1),..., — 1, 0, 1,... , 0,5 (S + 1)}. Таким образом, при нечетном 5 для реализации параллельного суммирования необ- ходимо перейти от канонической системы счисления с основанием 5 к квазиканонической системе счис- ления. Если основание 5 есть четное число, то либо wmin — 1, либо ®тах +1 не имеют дополнения. Такое допол- нение необходимо для возможности осуществления замены операции прямого вычитания операцией сло- жения с , дополнением. Поэтому при представлении вычитаемого необходимо иметь совокупность из (5+3) + 1- Для за- писи уменьшаемого и для представления суммы доста- точно только (5 + 2) цифр и из вышеприведенной — 1, О, 1 74
(s \ z S \ либо цифра + lj. Таким образом, для четных оснований все записи чисел в памяти могут- быть реа- лизованы в квазиканонической системе, но при взятии дополнения в сумматоре необходимо, чтобы в сумма- торе можно было- бы расширить квазиканоническое представление еще на одну цифру. Например, при использовании S = 4 квазика’ноническая четверичная система содержит цифры { — 2, —1, 0, 1, 2, 3}, но в сумматоре должна еще представляться цифра — 3, являющаяся дополнением для цифры 3. Для троичной и четверичной систем счисления соответствующие1 им избыточные (квазиканонические) системы единственны. Они характеризуются наборами цифр {—1, 0, 1, 2} и 3,—2, —1, 0, 1, 2} соот- ветственно. Для систем счисления с основанием, боль- шим четырех, существует несколько избыточных, не обязательно квазиканонических систем, дающих воз- можность получить параллельное суммирование чисел. Эти системы характеризуются наборами цифр следую- щего вида {—а, — (а — 1),..., —1, 0, —1, а}, $ где для четных 5 — 1, а для нечетных S, 0,5 (S 4-1) < —1. Например, для десятичной системы счисления существует четыре избыточных системы, дающих возможность реализовать параллель- ное суммирование. Одна из этих систем является ква- зиканонической и содержит цифры {—6, —5, —4, —3, — 2, —1, 0, 1, 2, 3, 4, 5}. При этом в сумматоре должна еще представляться цифра 6. Остальные три системы не являются квазиканоническими. Наиболее избыточна из них система, в которой цифрами являют- ся девятнадцать цифр от —9 до 9 включительно. Рассмотрим теперь процесс преобразования чисел из обычной смещенной канонической системы счисле- ния в квазиканоническую систему. Пусть число х 75
задано в смещенной канонической системе с основа- нием S т ' <^-=± s .. i=—П Выберем совокупность допустимых значений для про- межуточных сумм —1> о, 1, , Wmax}. КАЖ- ДОЙ цифре в записи числа х припишем знак «минус», если х отрицательно, в противном случае оставим их без изменения. Определим wz из условия wi = xt — Spt+l. Значения pl+l выбираются по. следующему правилу: если wrain < <?xz<wmax, то pi+l = 0; если xz>wmax, тор/+1 = 1; если xz < Wrnln , TO Pi+1 = — 1. Наконец, определяются цифры квазиканонической системы xz по следующему правилу xt = wz + pt. Зна- ковый разряд хзн = Ан. ' Пример 1.31. Перевести число (х)5 = 0,203в квази- каноническую систему с цифрами {—3, —2, —1, 0, 1, 2, 3}. Выбираем совокупность значений wz { —2, j—1, 0,' 1, 2}. Определяем значения w{: ®>3 = 3 — 5*1 = 2, w2 = = 0 —5-0 = 0, та»! = 2— 5-0 = 2. Теперь определяем значение цифр х(: х3 = 2 + 0 = 2, х2 = 0 + 1 = 1, х{ = = 2 + 0 = 2. Окончательно (x)s = 0,212. Обратный перевод из квазиканонической системы счисления в обычную систему не вызывает затрудне- ния, так как число, представленное в квазиканони- ческой системе, можно рассматривать как совокуп- ность двух чисел: положительного и отрицательного. Суммированием этих чисел на обычном сумматоре можно получить каноническое представление. Пример 1.32. Перевести число (а% = 0,2102 из ква- зиканонической троичной системы в каноническую систему. Здесь (x)'s означает запись числа в квазиканони-, ческой системе с основанием S. 76
Разбиваем данное число на две части _у =0,2100 и г =—0,0002. Эти два числа суммируем на обычном сумматоре с помощью обратного кода, (Лмо = 00.2100 [z]M0 = 22.2220 100.2020 |------1 00.2021 Окончательно, (х)3 = 0,2021. Пример 1.33. Найти сумму чисел (х)10 = 0,76486 и <^>ю = -0,39471 в квазиканонической системе счис- ления. Используя квазиканоническую систему с цифрами от —6 до 5 и правила перехода, получим = 1,36514 и (_у)10 = 0,40531. Теперь осуществляем сум- мирование по правилам параллельного сложения в два этапа 1,35614 + 0.4053Т 1 34025" промежуточная сумма О.ТПОО перенос в старший разряд 0,43025 Окончательно (x)io = 0^43025 или, переходя к канони- ческому представлению, (х)10 = 0,37015. Отметим, что знак числа в квазиканонической системе счисления, как и в симметричной канонической системе, определяется знаком старшей значащей циф- ры в записи числа. Некоторую трудность в квазиканонической системе создает проблема определения переполнения разрядной сетки. Как видно из проделанных выше примеров, квазиканоническое представление числа, по модулю меньшего единицы, может быть числом, большим еди- ницы (как, например, случилось при переводе десятич- ного числа 0,76486 в примере 1.33 в квазиканониче- скую десятичную систему). Для обнаружения переполнения исследуются два старших разряда квазиканрнического представления. Этими разрядами являются нулевой разряд if разряд 77
с весом S"1. Если в нулевом разряде стоит число, большее единицы, или в нулевом разряде стоит еди- ница, а в разряде с весом S"1 — положительная цифра, то имеет' место положительное переполнение. Если же в нулевом разряде стоит отрицательная цифра, по модулю большая единицы, или в нулевом разряде стоит цифра минус единица, а в разряде с весом S-1 — отрицательная цифра, то имеет место отрицательное переполнение. ' Для оценки диапазонов переполнения укажем, что безусловное переполнение имеет место для числа х, которое удовлетворяет неравенству I . 1 । -ч. 1 . S-1 - S~n I х + 1 | > 1 4--—- ‘q, О - 1 . I где q означает цифру с максимальным по абсолютно- му значению количественным эквивалентом. Переполнение невозможно, когда । । 1 > 1 S-1 - S~n * х < 1 + --------------q. 1 S S—1 Если же число х удовлетворяет неравенству Q 1 С*” 1+Л rA...g>|X|>i + ±_^_z^-------------9, о ~~ I о S-l то переполнение становится возможным, но не обяза- тельно происходит (область вероятностного перепол- нения). С целью уменьшения количества различных цифр в системе счисления можно перейти к модифицирован- ным квазиканоническим системам счисления, для ко- торых число избыточных цифр равно единице. Пока- жем, что переход к такому представлению чисел приводит к тому, что при суммировании возникают переносы не более чем на два разряда. На рис. 1.8 показан сумматор, работающий по принципу переноса только на два разряда влево. В этом случае x'i + y 'i $Р'1+1 + w't» ®; + А'==ЗД+1 + <, 78
если | х\ + у'{ | > —. На перенос \p"+i | = 1 выра- когда + Д-1 = у Не- одновременно не могут Рис. 1.8 Для любого S> 2 w' принимает^» + 1 значение. При с ' S четном 5-----< w’f < —-. На первом шаге перенос 2 2 |^'+11 = 1 вырабатывается, втором шаге суммирования батывается только тогда, Это означает, что д' й p"t быть равны 1 или —1, a s’t может принимать только S + 1 значение из того же множества, что и w'r При нечетном основании 5 значения лежат в пределах от + 0,5(5 — 1) до ±0,5(5 + 1). Для пред- ставления числовой информации в памяти машины достаточно иметь возможность представления (5+1)-й цифры. Но для возмож- ности замены операции прямого вычитания операцией сложения с дополнением необ- ходимо в сумматоре иметь возможность представления 5+2 различных цифр. Отметим, что при модифицир ованном квазикано ническом представлении чисел за счет некоторого упро- щения самого пред- ставления (число раз- личных цифр по срав- нению с квазиканони- ческой системой мень- ше на единицу) повы- шается время произ- водства операции сло- жения. Учитывая, что основное время во времени пере- носа для обычной системы счисления для близких 79
к двум составляют переносы длины два, то следует считать, что более эффективен переход не к модифи- цированной квазиканонической системе счисления, а к квазиканонической системе. Более подробно этот вопрос будет рассмотрен нами в конце § 1.9. Задачи 1. Сложить в полулогарифмической форме в симметричной и смещенной троичных системах числа (x)w = — 52,201 и (у)10 = == 100,53. При переводе чисел в троичную систему использовать, для записи порядков три разряда, а для записи мантисс —10 раз- рядов, не считая знаковых разрядов. 2. При условии, что порядки слагаемых одинаковы и все ком- бинации цифр в разрядах мантисс равновероятны, оценить время уложения двух двоичных чисел в полулогарифмической форме. Система счисления смещенная. 3. Найти правила перевода числа из смещенной системы с основанием S в модифицированную квазиканоническую систему. 4. Найти сумму чисел (х)4 = 0,202 и <_у>4 = —0,132 в модифи- цированной квазиканонической четвертичной системе. ♦ § 1.6. Умножение чисел Рассмотрим вначале операцию умножения для чи- сел, заданных в естественной форме. Прежде чем рассматривать само умножение, остановимся на логике производства операции сдвига, которая играет боль- шую роль при выполнении операций умножения и де- ления. Сдвиг числа в системе счисления с основанием S осуществляется путем умножения этого числа на сте- пени S. Если данное число умножается на Sm, то при положительном т это умножение эквивалентно сдви- гу на т разрядов влево,' а при отрицательном т—* сдвигу на т разрядов вправо. При сдвиге числа вправо необходимо,, чтобы содержимое знаковых разрядов сохранялось. Таким образом, если некоторое число х до сдвига вправо имело вид 0. х2-• хп, то после сдвига на один разряд вправо оно имеет вид 0. 0 xtx2' • ‘Xn_t. Если же до сдвига число х имело код (S — 1).Х1Х2-• х„, то после сдвига на один разряд вправо оно имеет вид (S— 1).(5 — 1)ххХ2- • • 'Хп—!• При сдвиге влево желательно сохранять содержи- мое знакового разряда. В противном случае операция 80
сдвига влево будет иметь, уже не арифметический, а логический смысл. Таким образом, при сдвиге влево пропадают цифры, стоящие в крайнем левом разряде При этом в случае обратного кода в появляющихся справа разрядах при сдвиге отрицательного числа должны появляться не нули, а цифры 5 —Iе, которые в обратном коде соответствуют нулям. При дополни- тельном коде сдвиг отрицательного числа влево вызы- вает появление в правых разрядах цифр, равных нулю, так как при переходе от дополнительного кода к обратному после вычитания одной единицы младшего разряда в ранее нулевых разрядах появятся цифры S-1. Пример 1.34. Число (л)7 = 0,2206 сдвинуть в допол- нительном и обратном кодах вправо на три разряда и влево на один разряд. [х]д =6.4461; .Ио = 6.4460; ь [7~3-Х]Д|= 6.6664; t[7-xb =[6.4610;- [7-3-л]0 = 6.6664; [7-xjo = 6.4606. Перейдем теперь к описанию правилумножения для канонических систем счисления для случая пред- ставления числовой информации в естественной форме. Задание правил сводится к определению правил умно- жения в одном разряде, реализации схемы умножения множимого на последовательность цифр множителя и организации соответствующих сдвигов множителя и накопленных частичных сумм произведения. Общая идея устройства, осуществляющего умноже- ние, показана на рис. 1.9. Устройство умножения работает следующим образом. На вход устройства умножения в одном разряде (УО) поступает младший разряд множителя. У О умножает последовательно множимое на число, соответствующее поступившей в него цифрой множителя. Это умножение осуществляет- ся согласно таблице умножения, которую УО «помнит». Результат умножения передается в сумматор. После этого осуществляется сдвиг множителя и содержимо- го сумматора вправо на один разряд*. При этом пред- полагается, что сумматор имеет не п разрядов, а 2ц разрядов, так что при сдвиге вправо результаты, Б-79.-6 81
стоящие в младших разрядах, не пропадают. После очередного сдвига в У О поступила следующая по порядку цифра множителя, и цикл повторяется. После п сдвигов множителя и содержимого сумматор вы- числения заканчивается. В сумматоре при этом стоит 2п'-разрядное произведение. Рис. 1.9 Как следует из логики выполнения операции умно- жения, эта операция сводится к выполнению последо- „вательности более простых операций сложений и сдвигов. При этом специфика блока УО исчезает. Этот блок просто исчезает из схемы' умножения и заменяется счетчиком, причем в этот счетчик на каж- дом цикле умножения записывается очередная цифра частного, на которую в данный момент умножается множимое. При каждой передаче. множимого в сум- матор из содержимого счетчика вычитается единица. Когда содержимое счетчика становится равным нулю, то это означает, что умножение множимого на дан- ную цифру множителя закончено и в счетчик необхо- димо записать очередную цифру множителя. Для этого производят сдвиг множителя’ в сторону младших раз- рядов и одновременно сдвигают сумматор с накоплен- ной частичной суммой. 82
Рис. 1.10 Описанная схема умножения иллюстрируется на рис. 1.10. Однако при изложении примеров на умно- жение мы ради компактности выкладок будем счи- тать, что в схеме умножения существует устройство типа У О, с помощью которого происхо- дит однотактовое получение произве- дения множимого .на одну цифру мно- жителя. Как и в случае сложения, рассмот- рим вначале умно- жение для симме- тричных систем счисления, а затем умножение для сме- щенных систем счи- сления. Во всех примерах считается, что чис- ло разрядов в раз- рядной сетке маши- ны равно числу раз- рядов, определяемо- му заданием исходных данных. Пример 1.35. Составить правила умножения в одном разряде для симметричной пятиричной системы счис- ления и_ найти в этой системе произведение чисел <х)0- = 0,20121 и (у)5 = 0,10Т12. Правила умножения в однрм разряде для рассматри- ваемой системы представим в виде следующей таблицы. Т a 6ji и ц а 1.2 “2 J -1 0 1 2 -2 1. —1 0.2 0,0 0, -2 -1.1 -1 0,2 0,1 0,0 0,-1 0, -^2 0 0,0 0,0 0,0 0,0 0,0 1 0, —2 0, -1 0,0 0,1 0,2 2 -1.1 0, -2 0,0 0,2 1,-1 S* S3
. Первая цифра в таблице соответствует переносу» а вторая — результату. Теперь нетрудно найти иско- мое произведение 20121 Х Т0112 110112 20121 20121 00000 20121 202202002 ' * Результат умножения {ху}5 = 0,0202202002. После ок- ругления до пяти разрядов после запятой получим (ху)5 = 0,02022. Вместо умножения, начиная с младших разрядов множителя, можно использовать и умножение, в ко- тором вначале происходит умножение на старший разряд множителя, а сдвиги идут не справа налево, а слева направо. Пример 1.36. Перемножить в пятиричной симме- тричной системе числа (х)5 = 0,2102 и (у)5 = 0,1002, начиная со старшей цифры множителя, х2102 1002 2102 0000 0000. Й2Т1 2111211 Искомый результат (xy)5 = 0,02f 11211 или, округляя, его до четырех разрядов после запятой, (ху)Б = 0,0212. Так как результат умножения не зависит от знака числа, то умножение для смещенных систем выгодно производить в прямом коде. Знак произведения можно определить, суммируя содержимое знаковых разрядов 84
сомножителей по правилу одо = о 0Д5—1=S—1 s-1as—1=0 Итак, для определения знака произведения доста- точно сравнить содержимое знаковых разрядов сом- ножителей. Если содержимое этих разрядов совпадает, то произведению приписывается нуль в знаковом раз- ряде, в противном случае в знаковом разряде произ- ведения пишется 5 — 1. Если основание системы счисления есть четное число и знак в прямом коде кодируется как 0 для S положительного числа и '— для отрицательного чис- ла (см. соотношение (1.2)'), то знак произведения можно получать путем суммирования без учета пере- носа содержимого знаковых разрядов сомножителей. Пример 1.37. Найти произведение (х)4 = 0,1321 и (jAj- = — 0.2130 в смещенной четверичной системе. Правила умножения в одном разряде для рассмат- риваемой системы имеют вид: Как и раньше, первая цифра в этой таблице соответствует значению переноса в старший разряд, а вторая — значению в данном разряде. Запишем исходные числа в прямом коде: [х]п =0.1321 и [ у]п = 3.2130. Знаковые раз- ряды просуммируем по пра- вилу Д: 0 А 3 = 3. Числовые разряды перемножим 1321 *2130 - 3302 ,1321 +12223 0000 10222330 0 1. 2 3 0 0,0 0,0 0,0 0,0 1 0,0 0,1 0,2 0,3 2 0,0 0,2 1,0 1.2 3 0,0 0,3 1,2 2.1 Прямой код ответа [ху]„ = 3.10222330. После округле- ния до четырех разрядов после запятой [ху]п = 3.1023 или (ху)4 = — 0,1023. 85
Полученный после умножения код числа имеет 2п разрядов. Как правило, его приходится округлять до п разрядов, так как разрядная сетка машины содер- жит не более п разрядов. Для правильности округле- ния в сумматоре надо иметь по крайней мере п 4- 2 разряда. Все сдвиги, выводящие за эти разряды, можно попросту терять, экономя время суммирования. Поэтому умножение со сдвигами слева направо (умно- жение, начиная со старших разрядов множителя) мо- жет оказаться более выгодным, чем умножение по обычной схеме. Однако в большинстве существующих вычислительных 'машин использована схема умноже- ния, позволяющая получить все 2«'разрядов произве- дения. Делается это в целях повышения точности расчетов, так как округление при умножении дает быстрое накопление погрешности (см. § 1.8). Числа, имеющие 2п разрядов, записываются при этом в две ячейки памяти, а для работы с ними используются специальные программы, организующие операции над числами удвоенной длины. Отметим еще, что при необходимости получения произведения-, имеющего 2« разрядов, при использо- вании обычной схемы умножения можно, иметь сум- матор не длины 2п, как это "показано на рис. 1.9, а длины п. В этом случае при сдвиге сумматора цифры из его младшего разряда должны записываться на место сдвинутых цифр в регистр множителя. Соот- ветствующая цепь показана на рис. 1.9 пунктиром. Как следует из вышеприведенных примеров, для умножения чисел- в, машине выгодно использовать представление числовой информации в прямом коде’: Но как было показано в § 1.4, прямой код неудобен для реализации операции алгебраического сложения. Операцию сложения-вычитания эффективнее произво- дить в дополнительном или обратном кодах. Эта кол- лизия приводит к необходимости рассмотрения воз- можности получения произведения непосредственно в дополнительном или обратном коде без перевода сомножителей и произведения (если они отрицательны) из дополнительного или обратного кода в прямой код и обратного перевода. Рассмотрим этот вопрос для дополнительного кода. Для обратного кода все рассуждения н выводы ана- 86 *
логичны. Пусть необходимо реализовать специальную- операцию умножения, для которой была бы справед- лива формула [х]д (х) [_у]д = [ху]д . Рассмотрим все воз- можные комбинации зна’ков, которые могут встретить- ся при умножении чисел в дополнительных кодах. 1. х и у положительны. В этом случае [х]д (ю [^]д =« 2. х положителен, а у отрицателен. В этом случае ]х]д 0 [_У]д = х (S + у) — Sx + ху и для получения пра- вильного ответа необходима поправка — Sx + 5. 3. х отрицателен, а у положителен. В этом случае- [х]д ® Ыд = (S + х)у = Sy + ху и для получения пра- вильного ответа требуется поправка — Sy + 5. 4. х и у отрицательны. В этом случае [х]д 0 [_у]д = == (S + х) X (S + _у) = S2 + S (х + _у) + ху и необходима поправка — S2 — S(x+j>). Таким образом, логика операции умножения долж- на определяться соотношениями следующего вида р]д X [_у]д > х > 0, у > О, |д — Sx, х > 0, у < О, д — Sy, х < 0, у > О, д — S (х + у), х < 0, у < 0. (1.8) Так как в сумматоре дополнительного кода нет места для записи S2 и S, то в соотношении (1.8). поправки имеют несколько .иной вид, чем при вышеприведенных рассуждениях. Пример 1.38. Перемножить в дополнительном коде (х)1о = О,32 и (_у)ю — — 0,4. Переходя к дополнитель-; ным кодам, п&лучим [х]д = 0.32 и |\у]д = 9.6. Далее XX [J/j Ф х Ы х]д X [М Ид 0 Мд == 3072 Результат умножения есть 3,072. Так как имеет место- случай х > 0, у < 0, то на основании (1.8) необходима поправка — 10х. Умножение на 10 эквивалентно сдви- гу — х на один разряд влево. Записываем — х допол- нительным кодом, получаем [—х], = 9.68. Сдвигаем эта выражение на один разряд влево, причем девятка из левого разряда пропадает (сдвиг происходит на 87
сумматоре дополнительного кода), и прибавляем по- правку к полученному произведению ,3072 + 6 800, 9.892 1ЛУ]д = 9.872, (лу>10 = — 0,128. Легко проверить непосредственным перемножением исходных чисел, что полученный нами результат соот- ветствует истинному. Перейдем теперь к рассмотрению умножения в полулогарифмической форме. Правила умноже- ния для такого представления числовой информации выглядят следующим образом. 1. Порядки сомножителей суммируются с учетом ч знака. 2. Мантиссы перемножаются по правилам умноже- ния чисел в естественной форме. 3. Проверяется наличие нарушения нормализации вправо. Отметим, что нарушение нормализации впра- во возможно только на один разряд, так как исход- ♦•ные мантиссы нормализованы. Нарушения нормализа- ции влево при умножении произойти не может, так как мантиссы по модулю меньше единицы. 4. Если нарушение нормализации вправо имеется, то оно устраняется сдвигом результирующей мантис- сы на Ьдин разряд влево и уменьшением суммарного порядка на единицу. 5. Произведению приписывается суммарный поря- док сомножителей (или суммарный порядок, умень- шенный на единицу при наличии нарушения нормали- зации вправо у результирующей мантиссы). Пример 1.39. Перемножить числа (л:)5=52-0,2101 и (_y)s = -0,1022 в симметричной пятиричной системе. Суммируем порядки сомножителей: 2+1 = 1. Те- перь перемножаем мантиссы у 219* -1022 2101 0000 + 11202 . - . 11202 2011222 88
Полученная мантисса 0,02011222 не нормализована. Сдвигаем ее на один разряд влево, получаем 0,20112220 и округляем до четырех разрядов после запятой. Уменьшаем порядок на единицу. Окончательный от- вет (ху)5 = 5°-0,2012. Пример 1.40. Перемножить в прямом коде числа (х)4 = 45-0,2132 и (у)4 = 4_2-0,3022 в смещенной четве- ричной системе. Складываем порядки в обратном коде ' (М,=о.и . ipjjo—3.31 • 10.02 I___t [Дгу]о = 0.03 Знак мантиссы произведения определяем по правилам А, для чего переходим к прямым кодам мантисс [mjn = 0.2132, = 3.3022. Итак, знак результирую- щей мантиссы 0 А 3 = 3. Теперь перемножаем абсо- лютные величины мантисс v 2132 х 3022 13122 0000 + 10330 10330 13302230 Нарушения нормализации вправо нет. Округляем ре- зультирующую мантиссу до четырех разрядов после запятой. Окончательно получаем (ху)4= — 43«0,1331. Вопрос об оценке времени умножения для чисел,’ представленных в естественной форме, будет рассмот- рен нами в § 1.9. Здесь же мы оценим увеличение времени умноже- ния при переходе к полулогарифмической форме пред- ставления, считая, что среднее время умножения для естественной формы нам известно. Прежде всего оценим влияние на время умноже- ния положения запятой в нормализованной мантиссе. Кроме нормализованной мантиссы в рбычном смысле (т. е. мантиссы, удовлетворяющей условию <|/пЛ|<1), рассмотрим нормализацию, при которой. 89-
1 < | mx [ < 5. Другими словами, рассмотрим запятую, фиксированную не перед первым значащим разрядом мантиссы, а перед вторым значащим разрядом. Для обычной нормализации при умножении норма- лизованных мантисс вида 0, х^2...хп и 0, угу2...уп может получиться ненормализованная мантисса вида О, 0г2... z2n. При ее нормализации необходим сдвиг влево и уменьшение суммарного порядка на единицу. Если же использовать мантиссы, удовлетворяющие - условию 1 < | тх | < 5, то возможен результат, при котором мантисса произведения станет > 5. Для устра- нения этого будет необходим сдвиг результирующей мантиссы вправо на один разряд и увеличение поряд- и ка на единицу. Выгода того или иного способа представления мантисс зависит от вероятности возникновения нару- шений нормализации при первом и втором способах представления мантисс. Если через р(х) и q(y) обо-' значить плотности вероятности распределений значе- ,ний Мантисс тх и ту, то вероятность сдвига влево для результирующей мантиссы при обычном способе нормализации есть S~nx~l 1 J р(х) s~n_ J q (у) dyclx. s~n Если предположить, что распределение значений ман- тисс на интервале нормализации равномерно, то, на- пример, для случая 5 = 2 Р=0,38. При этом -допол- нительная вероятность (соответствующая второму способу нормализации) есть 1 — Р — 1 —0,38 = 0,62. При таких предположениях обычный способ нормали- зации оказывается более удачным. Однако, как показывает статистика, функции плот- ности вероятности для значений тх и ту отличаются от постоянных (т. е. их закон распределения отлича- ется от равномерного). Более правильную картину 1 / ч 1 —;-----и q (у) - ---------. В X In S у In S дают р (л) этом случае для S = 2 Р=1—Р = 0,5. Таким образом, есть основания считать нормализацию мантиссы вида-1 < |ztzx| < 5 по , крайней мере не более-плохой, чем обычную норма- 90
лизацию. Второй способ нормализации в некотором смысле даже более предпочтителен, чем первый, так как при сдвиге информации влево не теряется послед- ний разряд произведения, что всегда происходит при сдвиге мантиссы вправо. В настоящее время вопрос о выборе того или иного положения запятой в полулогарифмической фор- ме нельзя считать окончательно решенным, так как пока еще нет точных знаний о характере функций р(х) и q (у). Теперь можно дать, оценку времени умножения в полулогарифмической форме. Учитывая, что время сдвига приблизительно равно половине времени сум- мирования (более точно этот вопрос будет рассмотрен в § 1.9) и, считая, что нарушение нормализации про- исходит с вероятностью 0,5, мы получим время умно- .жения в следующем виде Рассмотрим теперь’ умножение в квазиканониче- ской системе счисления. При этом мы будем исполь- зовать правила сложения в таких системах, рассмот- ренные в § 1.5; Прежде всего опишем, как производится сдвиг при таком представлении чисел^ Если сдвиг происходит вправо, то в старшем значащем разряде появляется нуль. При сдвиге влево два старших разряда числа анализируются на признак переполнения после сдвига. Само выполнение умножения идет по обычной схе- ме, показанной на рис. 1.9, с учетом того, что сло- жение-происходит по правилам сложения в квазика- нонических системах. Пример 1.41. В десятичной квазиканонической си- стеме найти произведение чисел (л)10 = —0,338 и (Ж-0,705. , Переходя к квазиканоническому представлению, получим {л)ю = 0,462 и (у)ю— 1,315. ‘0,000 2,310 2,310 передача в сумматор множимого, умноженного на 5 .91
. 0,2310 - 0,4620 0,2310 0,02310 + 1,01400 1,00310 0,100310 + 0,462000 0,242310 сдвиг вправо передача в сумматор множимого сдвиг вправо передача в сумматор множимого, умноженного на 3 сдвиг вправо передача в сумматор множимого Окончательный ответ (ху/ю = 0,242310. Или(ху)10— = - 0,238290. । В некоторых случаях для убыстрения операции •умножения используется запоминание в специальной матричной памяти таблицы одноразрядного умноже- ния. Задачи 1. Найти произведение чисел (л)3 = 0,122 и (_у)3 = 0,212 по способу умножения с младших разрядов множителя. 2. Найти произведение чисел (х}6 = 0,254 и (_у)с = —0,431 по способу умножения со старших разрядов множителя. 3. Найти произведение чисел {x)t = 4®.0,321 и (у)4=. = 4~1-0,203. 4. Найти правила умножения в модифицированных квазикано- ~ иических системах и найти произведение чисел {x)i = 0,562 и (У>7 = —0,204 в модифицированной семиричной системе счисления. § 1.7. Деление чисел Деление является наиболее трудоемкой операцией и встречает при своей машинной реализации наиболь- шие трудности. В ряде машин малой производитель- ности операцию деления вообще не включали в со- став операций, схемно реализуемых в машине. Эта , операция заменялась нахождением обратной величины ’ делителя по специальной подпрограмме и умножением делимого на найденную обратную величину делителя. Обратная величина делителя вычислялась на основе какой-либо быстро сходящейся итерационной форму- лы, например формулы Ньютона, 92
Л+1=Л(2-^). Umj„ = —. П-^-са X Если х — Sk-mx, то за _у0 можно взять S~k. Однако в большинстве современных машин деле- ние выполняется схемно. Правда, почти все современ- ные машины работают в двоичной системе, для кото- рой ’ алгоритм деления довольно прост (он будет рассмотрен нами в § 2.2), и для систем счисления с основанием, большим двух, вопрос о выгодности схем- ного или программного способа деления всерьез еще не обсуждался. Обычная схема деления распадается на ряд одно- типных шагов, с помощью которых последовательно определяются все цифры частного, начиная 'со стар- ' шей. Для- получения Z-й цифры частного необходимо проделать следующее. Из остатка, полученного после определения (Z—1)-й цифры частного (-остатком при получении первой цифры частного является делимое), последовательно вычитают делитель в том положе- нии, в котором он находился после вычисления (Z — 1)-й цифры частного (в начале делитель вычитается из де- лимого без сдвига), до получения после вычитания первого отрицательного результата. Если до получе- ния первого отрицательного- результата делитель был •вычтен г раз, то Z-я цифра частного.равна г. К полу- ченному отрицательному результату прибавляют де- литель. Полученное положительное число образует остаток, используемый на следующем шаге деления. После этого делитель сдвигают вправо на один раз- ряд, и цикл деления начинается снова. Деление пре- кращается при заполнении полностью разрядной сетки частного или при обращении делителя в нуль при очередном сдвиге. Приведенные правила деления справедливы лишь для смещенных канонических систем, в которых числа записаны в прямом коде и представлены в естествен- ной форме. Для симметричных систем счисления пра- вила деления сложнее, и мы их рассматривать- не бу- дем. В качестве примера правил деления для сим- метричных систем счисления в третьей главе будет рассмотрена организация деления в симметричной троичной системе счисления. 93
Схема, поясняющая сформулированные нами пра- вила деления, показана на рис. 1.11. Число повторе- ний вычитаний при каждом цикле не превосходит 5, а число циклов — не более п + 3, где п — длина раз- рядной сетки. Из трех излишних разрядов один,, соответствующий первой получаемой цифре частного, нужен для определения переполнения, а два других, соответствующих последним разрядам частного, нуж- ны для правильного округления результата до и. раз- рядов. начало Рис. 1.11 Пример 1.42. Разделить число (л)4= —0,21 на число (у)4=-0,32 в четверичной смещенной си- стеме. Для деления переходим к прямым кодам чисел к и у. [л]п — 3.21 и [_у]п = 3.32. Для определения знака частного суммируем по правилу Л содержимое зна- ковых разрядов делимого к делителю. ЗА3 = 0. Аб- солютные величины чисел делим по вышеуказанным правилам. При вычитании делителя из остатка исполь- зуем прибавление делителя в обратном коде. Окончательный ответ /= 0,23. \ У / 4 94
ш0.21 EB3.01 ffl3.22 - Ш0.32 m 0.210 ЕВ 3.301 10.111 I_____t ffl0.112 ™3.301 10.013 I_____t m0.020 ™ 3.301 ffl3.321 ™0.032 10.013 I_____t | 32 0,222 t 11 t исходный делитель 0.32 сдвинутый делитель 0.032 ш 0.0200 3.3301 W.0101 1 t ffi 0.0102 3.3301 10.0003 I 1 ffi 0.0010 3.3301 3 3311 ffi 0.0032 10.0003 1 f ffi 0.0020 3.3330 10.0010 1 t ffi 0.0011 3.3330 10.0001 1 t ffi 0.0002 3.3330 3.3332 J). 0003 10.0001 I______t 0.OO02 сдвинутый делитель 0.0032 сдвинутый делитель 0.0003 сдвинутый делитель 0,0000 деление прекращено
При использовании полулогарифмической формы представления правила деления принимают сле- дующий вид. 1. Из порядка делимого вычитается порядок дели- теля. 2. Знак частного определяется по правилу Д, с помощью которого суммируются знаковые разряды мантисс, заданных в прямом коде. 3. Происходит деление мантисс по правилам для естественной формы представления. 4. Проверяется, не произошло ли нарушение нор- мализации влево. (Нарушения нормализации вправо при нормализованных исходных мантиссах быть не может, так как каждая мантисса не меньше S~n.) 5. Если нарушение нормализации влево обнаруже- но, то результирующая мантисса сдвигается на один разряд вправо, а разность порядков делимого и дели- теля увеличивается на единицу. 6. Результирующей мантиссе приписывается поря- е док, равный разности порядков делимого и делителя или этой разности, увеличенной на единицу, если про- исходило исправление нарушения нормализации для результирующей мантиссы. Пример 1.43. Разделить число (л)5 = — 512-0,432 на число (у)ъ = 514-0,230. Переходим к представлению порядков в дополни- тельном коде, а для мантисс в прямом коде Ьх]д=0.22, [р,]д = 0.24, [—Рд,]д = 4.21, К]п = 4.432, ИД, = 0.230. Знак частного определяем по правилу Д:4Д0 = 4. Вычитаем из порядка числа х порядок числа у. [РД = 0.22 [~м=4-21 [/Чд = 4.43 Теперь вычитание коде. 96 осуществляем деление мантисс, заменяя делителя сложением в дополнительном
0.432 miO-202 ®4-220 m 4-422“ Ш 0.230 ml0.2020 W 4.4220 Ж10.1240 Ш 4.4220 дмОЛОЮ tv 4.4220 ,0‘. 0230 I 2 3 1,4 t 1 исходный делитель 0.23000 сдвинутый делитель 0.02300 ,0.0000 cn 4.4220 W 0.0230 ,0.0000 Деление прекращено, так как делимое нацело раз- делилось на данный делитель. Отметим, что в маши- не, если в ней не. предусмотрены специальные цепи, проверки очередного остатка на нуль, деление будет продолжаться до получения в частном п + 2 разря- дов. При делении обнаруживается нарушение норма- лизации влево, о чем свидетельствует появление не- нулевой цифры в крайнем левом разряде частного. Для устранения нарушения нормализации сдвигаем мантиссу на один разряд вправо и увеличиваем поря- док частного на единицу. Окончательный ответ \ =5“1 -0,140. \ У / 5 Подобно умножению можно построить алгоритмы» выполнения деления в дополнительном или обратном коде без перевода чисел в прямой код. Однако эти алгоритмы получаются весьма громоздкими и мало- эффективными. Подобный алгоритм деления будет рассмотрен в § 2.1 для двоичной системы счисления. Мы рассмотрели все основные арифметические опе- рации в канонических системах счисления. Из этого рассмотрения вытекает, что при выполнении этих опе- раций в случае алгебраического сложения необходимо Б-79.-7 ’97
использовать представление числовой информации в дополнительном или обратном кодах, а в случае ум- ножения и деления более целесообразно использовать представление чисел, участвующих в операции, в пря- мом коде (конечно, речь здесь идет лишь о смещен- ных системах счисления). Возникает вопрос о том, в каком виде лучше хранить информацию в. памяти машины? Если при хранении использовать числа, за- писанные в прямом коде, то при необходимости ал- гебраического сложения потребуется до операции пе- ревести их в дополнительный или обратный код, а после операции преобразовать .результат операции (если он отрицателен) снова в прямой код. При хра- нении в памяти машины числовой информации, запи- санной в дополнительном или обратном кодах, по- требность в переводе возникнет при реализации опе- раций умножения и деления. Из накопленной статистики процента встречаю- щихся при работе машины арифметических операций для универсальных вычислительных машин с есте- ственной формой представления вытекает, что около 33% всех операций, выполняемых машиной, прихо- дится на операцию алгебраического сложения. Опера- ция умножения составляет около 12% всех машинных операций, а операция деления — менее 2%. Остальной процент машинных операций падает на неарифметиче- ские операции. Если пренебречь неарифметическими операциями (большинство из которых не связано с ко- дом представления чисел в памяти машины), то для универсальных машин более выгодным является хра- нение числовой информации в памяти машины в виде дополнительного или обратного кода. Для специали- зированных машин это может' оказаться неверным, так как процентное соотношение операций алгебраиче- ского сложения, умножения и деления может ока- заться • совсем не таким, как для универсальных вы- числительных машин. Для машин с'полулогарифмической формой пред- ставления принято считать; что наиболее оптимальным является хранение мантисс в прямых кодах, а поряд- ков— в дополнительных, или обратных кодах. Такие рекомендации основаны на том, что при работе с ман- тиссами используются нормализованные мантиссы, но 98 -
переполнение разрядной сетки при алгебраическом сложении не является нежелательным явлением, как при работе с естественным представлением чисел. Поэтому преобразование в соответствующий код при сложении-вычитании происходит примерно в половине случаев из всех случаев суммирования (ср. с резуль- татами в.§ 1.4 для естественной формы представле- ния). Таким образом, представление мантисс прямым кодом не дает при сложении - ощутимого проигрыша во времени, давая ощутимый выигрыш при операциях умножения и деления. Операция деления принадлежит к операциям, для которых желательно найти методы ускорения их вы- полнения. В § 2.1, 2.2,и 2.3 будут указаны, некоторые методы ускорения деления применительно к двоичной системе счисления. Большинство из них пригодно и для систем счисления с основанием. S. Перейдем теперь к рассмотрению операции деления в 'избы- точной квазиканонической системе счисления. При делении в квазиканонической системе счисления возни- кают .некоторые трудности, связанные с определением очередных цифр частного на основании анализа остатка от вычитания сдви- нутого делителя. На каждом шаге деления' очередная цифра част- ного должна выбираться таким образом, чтобы следующий оста- ток, полученный из данного вычитанием произведения делителя на выбранную цифру частного, лежал бы в том же самом диапазоне, что и данный остаток. Этот допустимый диапазон зависит от ве- личины делителя. Если делимое (т. е. первоначальный остаток) не лежит в необходимом диапазоне, то, выбирая цифру частного в нулевом разряде, равную по модулю единице, мы можем привести исходный остаток в нужный диапазон. Каждая цифра частного 2/ .должна удовлетворять неравенству |/п — yzi | < с (у |, где у — де- литель, pi — z-й остаток, а с — некоторая константа, значения кото- рой определяются допустимыми значениями цифр частного. Наи- более подходящая величина с есть 6,5. Для определения очеред- ной цифры частного производят вычитание нормализованного де- лителя -из очередного остатка (или прибавление нормализованного делителя, если знаки делителя и остатка не совпадают) до тех пор, пока не будет выполнено неравенство . з з "|У | < 10,5 |. i=o z=o определяемое специальной схемой сравнения. В этом случае про- ЦЕХЮ^БГчиташГЯ'(йрйбавлёйИй')'прекр^пШетсХ'Ке'§УлЁ^ат ’ый^й^йиия есть очередной остаток. Величина цифры 2/ есть число вычитаний или сложений,, которые были произведены для получения, нового остатка. Если .получение' нового' остатка производилось путём' вы- 7* ' ,99
читания делителя, то очередная цифра частного положительна, в йротивном случае, очередная цифра частного является отрицатель- ной. Если вышеприведенное неравенство выполняется сразу после сдвига делителя, то очередная цифра частного равна нулю. Пример 1.44. В десятичной квазиканонической системе счис- 'ления с цифрами {—5, —4, —3, —2, — I, 0, 1, 2, 3, 4, 5} найти частно- от деления числа (х),0 =— 0,224385 на число (_у)10 =0,705. • Переходя к квазиканонической системе, получим (х)ю = = 0,236415 и 1,315. Контролируемая величина з Т = 0,51 X у;10“11 = 0,3525. « *=о Операцию деления представляем с помощью следующей таблицы. Таблица 1.3 Величина Проверка Операция Цифра _0,236415 2,364150 + 1,315 0,224< 2,244 > г т > т сдвиг сложение Zo= 0 , 2,541 1,315 1,539 > >т сложение , 1,234 + 1,315 0,834 >т сложение 0,131 , 1,311500 + 1,315 0,129 < 1,289 > Z т > т сдвиг сложение 2_1 = _з - Д. 1,424 + 1,315 0,584 > > т сложение 0,121 ' 1,215000 1,315 0,121 < 1,215 > : т г сдвиг сложение ^ = -2 0,510 1,315 0,510 > Т сложение 0,205000 0,195< т конец *-з-2 Окончательно ( / X У / 7 0,322, / х\ ИЛИ < / = \У /ю = — 0,31,8. 100
Задачи 1. Разделить {х)ч «= — 0,1256 на = 0,4201. 2. Разделить <х)6 = 64-0,551 на <»6 = — 6~2-0,021. 3. Разделить число <х>9 = 0,42 на число <_у)9 = 0,3, переведя их из симметричной девятиричной системы в смещенную девятирич- ную систему. Результат деления выразить в симметричной девяти- ричной системе и десятичной системе счисления. § 1.8. Оценка точности вычислений* Проблема точности вычислений является в настоящее время одной из центральных проблем проектирования вычщлительных машин. Выбор, длины разрядной сетки машины, выбор формы пред- ставления числа в машине, наконец, системы счисления в машине тесно связаны с обеспечением заданной точности вычислений. Особенно остро этот вопрос стоит при создании специализирован- ных и узкоспециализированных .вычислительных машин. В этом параграфе мы рассмотрим некоторые оценки точности арифмети- ческих вычислений при использовании в машине представления чисел в естественной и' полулогарифмической формы. Основными источниками погрешности в вычислительной ма- шине при естественной форме представления являются операции умножения и деления. При выполнении операций сложения и вы- читания (при условии отсутствия переполнений) в естественной форме можно считать, что они выполняются точно.. При полулога- рифмической форме представления при операциях сложения и вы- читания приходится уравнивать порядки чисел, участвующих в операции, что ведет к потере некоторых разрядов мантиссы при сдвиге. Поэтому при полулогарифмической форме представления операция алгебраического сложения также является источником погрешностей. Операция округления может производиться несколькими спо- собами. По крайней мере, два из этих способов: округление с не- достатком и округление с избытком не могут считаться разумны- ми, ибо в этих случаях при округлении будет накапливаться си- стематическая ошибка округления. Однако в ряде вычислительных машин нет возможности производить округление, не прибегая к обычному отбрасыванию разрядов, лежащих правее самого млад- шего разряда разрядной сетки машины. Для вычислительных ма- шин с числом разрядов в разрядной сетке более 30 можно счи- тать, что математическое ожидание ошибки округления для умно- жения при отбрасывании лишних разрядов равно 3 , а ди- сперсия этой., ошибки приблизительно равна —3 2п. При сдвиге на т разрядов вправо ошибка округления также является систе- •*’ При желании содержание-этого параграфа может быть опу- щено без ущерба для понимания дальнейшего материала. ’101
магической с математическим ожиданием — (1 — S) m-S " и ди- .. 1 / । Г' 2/72. „—2/1 сперсиеи —(1 — о )•£ - . Кроме округления путем отбрасывания содержимого разрядов, оказывающихся правее самого младшего разряда разрядной сетки машины, можно рассмотреть еще два метода округления^ более ра- зумные с точки теории ошибок. Первый из этих методов — это хорошо известный способ округления по дополнению. В этом слу- чае для округления ..в л-м разряде используется информация, со- держащаяся в (л + 1)-м и (л + 2)-м разрядах. Если в (л + 1)-м S разряде находится цифра, ббльшая — (если S — четное), то в л-й разряд s , 2 ' “ У ’ добавляется одна единица; если в (л + 1)-м разряде стоит S меньшая чем —, то все содержимое, стоящее в разрядах * цифра, правее n-го, отбрасывается. При случае, когда в (л 4- 1)-м разряде S стоит цифра — , исследуется содержимое (п + 2)-го разряда. Если S стоящая там цифра > —, то в л-й разряд добавляется единица; л S если стоящая там цифра < , то содержимое разрядов, стоя- щих справа' от Л-го разряда, отбрасывается, если же в (л + 2)-м § разряде стоит —, то единица в л-й разряд прибавляется с веро- ятностью 0,5. При нечетном S прибавление единицы в л-й разряд происхо- S — 1 дит, если в (л + 1)-м разряде стоит цифра . В противном случае, содержимое всех разрядов, стоящих справа от л-го, отбра- сывается. Погрешность округления в этом методе < S ” \ Второй метод округления, обладающий определенными до- стоинствами, может быть назван методом случайного округления. Сущность этого метода состоит в том, что в схему вычислитель- ной машины вводится специальный датчик случайного округления. Этот датчик независимо от значения числа, подлежащего округле- нию, вырабатывает значение 0 е -вероятностью 1 — wS~" и S " с вероятностью w-S~n. Значение,, полученное на выходе датчика случайного округления, прибавляется в л-й разряд округляемого числа. При таком способе округления погрешность округления является случайной величиной с нулевым математическим ожида- о ’ « - 2(г> —д—1) - - нием и дисперсией, не превосходящей S х . Величина w есть случайная величина, распределенная’в интервале (0, S ^рх есть порядок округляемого числа. Для числа, представленного в естественной форме, 0. - . • - - • - -- -- -102
Оцёнка’накопления погрешности при производстве вычисле- ний на машине особенно затруднительна при использовании по- лулогарифмической формы представления с нормализованной ман- тиссой. При таком представлении возможно перемещение ошибки из младших разрядов мантиссы в’ее старшие разряды. Это проис- ходит, например, при вычитании друг из друга близких между со- бой мантисс. В результирующей мантиссе первые ненулевые раз- ряды оказываются сдвинутыми в правую часть разрядной сетки машины. При нормализации они перемещаются в левую часть раз- рядной сетки мантиссы, давая большую погрешность результата. Для автоматической, оценки накопления ошибок при вычисле- нии с плавающей запятой используется специальное представле- ние, при котором кроме записи в разрядной сетке числовой ин- формации используется еще запись информации об ошибке, содержащейся в данной числовой информации. Примером такой системы может служить разработанная в США система ФПМ. В этой системе предполагается, что ошибки всех чисел являются независимыми и их распределение подчинено нормальному закону. Эти допущения весьма существенны, так как на практике ошибки при вычислениях, конечно, являются зависимыми и их распределе- ние может быть весьма далеким от нормального. В системе ФПМ считается, что все числа, записанные в раз- рядной сетке машины, имеют погрешность +0,5 последней зна- чащей цифры. Значение этой вероятностной ошибки записывается в исходных данных в разрядах, находящихся правее самого млад- шего разряда мантиссы. После производства операций нормализа-- ция осуществляется не всегда, а лишь в тех случаях, когда сраба- тывает «критерий сдвига», оценивающий- величину погрешности, вносимой в число при нормализации. Критерии сдвига имеют сле- дующий вид. При умножении сдвиг результирующей мантиссы влево на один разряд возможен только тогда, когда выполнено неравенство m^<(S + l).0,5S-], где т означает абсолютную величину нормализованной мантис- сы. Аналогичные правила вырабатываются и-для других операций. В § 2.1 мы приведем некоторые бценки накопления ошибок при реализации операции умножения в двоичной системе счисле- ния. Для произвольных систем такие оценки пока неизвестны. Следует отметить, что на самом деле оценка точности вычис- лений на машинах резко зависит не только от состава выполняе- мых операций, но и от их следования друг за другом. В настоящее время влияние этого фактора на точность вычислений Только еще начинает изучаться. § 1.9. Оценки для систем счисления с. натуральным основанием В этом параграфе* 'мы дадим некоторые способы оценки эффективности выбора того или иного основа- ния системы счисления для представления информа- 103
цйй в вычислительной машине и производства с этими кодами арифметических операций. К сожалению, все приводимые ниже оценки носят лишь приближенный характер и сильно зависят от конструктивного решения тех или иных схем произ- водства операций в машине. Для получения общей оценки расхода оборудовав ния при представлении информации в машине мы вве- дем параметр 7V, характеризующий наибольшее число различных чисел, которые мы хотим представить в разрядной сетке машины. Это означает, что в машине необходимо выбрать разрядную сетку с таким числом разрядов л, в котором можно записать 7V различных чисел, и такое," что в (л — 1)-м разряде 7V различных чисел записать уже невозможно. Значение п есть функция N и S. При фиксирован- ном N можно считать, что n — n(S). Легко показать, что при системе счисления с основанием S, которая не является избыточной, общее число различных чи- сел, которое можно записать в разрядной сетке, име- ющей # разрядов, равно 5". Отсюда мы получаем, что л должно быть выбрано из условий л > logs7V и (л — 1)< •< logs7V. Так как имеет смысл использовать разряд- ную сетку полностью, то будем считать, что задано не N, а л. При этом N=Sn И n = logsN. Для сравнения между собой различных систем счисления введем гипотетическую единицу сложности элемента. Для этого возьмем элемент, имеющий два- устойчивых состояния: «включено» и «выключено». Каждый такой элемент Сопоставим определенной цифре данной системы счисления с основанием 5. Каждому разряду в разрядной сетке машины сопоставим S условных элементов. Запись некоторой цифры в дан- ный разряд будет отождествляться с включением ус- ловного элемента, соответствующего записываемой в данный разряд цифре. На рис. 1.12 показана замена разрядной сетки, со-' стоящей из пяти разрядов, в которые записываются четверичные числа, матрицей, состоящей из условных элементов. Очевидно, что для системы счисления с основанием 5 и разрядной сетки, содержащей л раз- 104
Условный злемент Рис. 1.12 элементов типа колес рядов, соответствующая матрица из условных элемен- тов имеет.Sn элементов. Будем характеризовать сложность выбранного ос- нования системы при заданном п выражением r — Sn, т. е. числом условных элементов, которое необходимо для моделирования записи 5-ичных чисел в данной разрядной сетке. Отметим, что такая характеристика сложности на самом деле эк- вивалентна утверждению о том, что сложность элемента, моделирующего цифру в од- ном разряде 5-ичной системы счисления, прямо пропорцио- нальна 5, т. е„ пропорцио- нальна числу устойчивых сос- тояний, в которых может на- ходиться данный элемент. Это предположение справедливо далеко не для всяких элемен- 'тов. Например, оно не вы- полняется для механических Однера, используемых в арифмометрах, многопозицион- ных реле, электронно-ламповых схем и т. д. Именно поэтому та характеристика сложности, которую мы ' получим ниже, не может быть полностью справедли- вой для любой системы’физических элементов, исполь- зуемых для записи цифр в данной системе счисления. Учитывая, что n = logs7V, получаем оценку слож- ности в следующем виде: Г = 5 logs N- Принято рассматривать не такую оценку сложности, а относительную оценку сложности по отношению к сложности, получающейся при использовании двоич- ной системы счисления, Slogs АГ 21og3N (1-9) На рис. 1.13 показан график этой функции. Для нас интерес представляют лишь целочисленные значения абсцисс. Значения функции для некоторых значений 5 указаны в таблице на рис, 1.13. 105
Найдем минимальное значение F(S). Для этого продифференцируем F(S) и приравняем производную нулю. Используя модуль перехода, получаем' Sin ЛГ S 21og2A4nS InS F(S) Тогда Г'(5) = дА^=1; F'(S) = 0; lnS = l. Отсюда получаем, что минимум функции F(S) дости- гается при S — e. Ближайшее целое S, обеспечиваю- Phc.-T.13 щее минимум F(S), равно трем. Из этих рассуждений обычно делают вывод о том,’ что троичная система счисления - является наиболее экономичной по расходу оборудова- ния для представления чисел в машине. Двоичная и четве- ричная системы с точ- ки зрения оценочной функции F(S) одинако- вы и дают расход обо- рудования для пред- ставления чисел в ма- шине, близкий к мини- мальному/ Примене- ние обычной десятич- ной системы в 1,5 раза менее выгодно, чем- исполь- зование двоичной или четверичной систем счисления. Приведенная оценочная функция характеризует лишь одну сторону проблемы выбора основания си- стемы счисления, а именно: расход оборудования на представление чисел из заданного диапазона в вы- числительной машине. Однако не менее важна и дру- гая сторона проблемы — оценка удобства выбранного основания с точки зрения времени выполнения основ- ных арифметических операций в машине и расхода оборудования на производство этих операций. 10§ . ’ ’
Как и для Случая оценки сложности /?($), в этом направлении пока не получено никаких универсальных точных оценок, так как они практически полностью определяются конструктивными особенностями выпол- нения арифметических устройств и выбранными для реализации в этих устройствах алгоритмами производ- ства основных арифметических операций. Поэтому все оценочные функции, которые мы сейчас построим (почти все они были введены в рассмотрение М. А. Кар- цевым), будут носить приближенный характер и при некоторых конкретных условиях реализации вычисли- тельной машины могут оказаться неверными. Интересно исследовать влияние выбора основания системы счисления лишь на логику и время выполне- ния операций алгебраического сложения и умножения. Деление для вычислительных машин универсального типа является реДкой операцией и может в оценочных функциях не учитываться. • Операцию умножения мы будем рассматривать как совокупность операций сло- жений сдвигов в соответствии со схемой, показанной на рис. 1.8. Если считать, что цифры множителя распределены в каждом разряде так, что появление в каждом разряде любой цифры от 0 до 5 — 1 равновероятно, то на каждый S—1 разряд множителя в среднем потребуется —-— сло- жений. При фиксированном 7V среднее число сложе- ний, необходимых для умножения одного числа, есть С__1 —-logs7V. При 5 — 2 оно равно 0,5 log2/V. Введем оценочную функцию ф(3)_ (1.10) 1£®|ЛГ . . .log,S ' ' График этой функции показан на рис. 1.14. На этом же рисунке показана таблица некоторых значе- ний Ф(5). Смысл функции Ф(5) сводится к тому, что она показывает, во сколько раз число сложений в си- . стеме' счисления с основанием 5 больше числа сло- жений в двоичной системе счисления при условии со- хранения одинаковой точности вычислений. Функция Ф(5) растет монотонно с ростом 5 (для 5 >2). При 5—>оо она ведет себя как 2/7(5). 107
Допущение, которое использовалось при построе- нии функции Ф(5), состояло в том, что время одного суммирования предполагалось независимым от S. Это допущение верно далеко не всегда, и его истинность зависит от той схемы сумматора, которая используется в ариф- метическом устрой- стве машины. В связи с этим мы рассмотрим основные типы сумма- торов и введем для каждого из рассмо- тренных типов сумма- тора оценочную функ- цию, дающую более точную оценку неже- ли функция Ф(5). Все существующие типы сумматоров мож- но разбить на два ос- новных типа: комбина- ционные сумматоры и накапливающие сумма- торы. Другие типы сумматоров практиче- ски не получили рас- пространения в прак- тике построения ариф- метических устройств. Комбинационные сум- маторы характеризу- ются тем, что одно- разрядная суммирую- щая схема в таких сумматорах способна принимать информа- цию о значениях цифр обоих слагаемых одно- временно. Для накапливающих сумматоров характер- но другое. Одноразрядная суммирующая схема в та- ких сумматорах по существу представляет собой счет- чик по модулю 5. Значение цифр обоих слагаемых 108
должны поступать на такую' схему последовательно, и каждая цифра сама подается в виде последователь- ности сигналов определенной природы. Учитывая, что существуют сумматоры параллельного и последова- тельного типа (см. § 1.4), мы получаем следующие четыре типа сумматоров: комбинационные сумматоры параллельного типа, накапливающие сумматоры парал- лельного типа, комбинационные сумматоры последо- вательного типа и накапливающие сумматоры после- довательного типа. Сделанное нами допущение о независимости вре- мени сложения от S оказывается справедливым лишь для сумматоров первого типа. Для остальных трех в уточнении. время суммирования перехода к системе типов сумматора оно нуждается Для сумматоров второго типа S увеличивается в — раз за счет счисления с основанием S (если по-прежнему счи- тать, что в любом разряде записи числа все цифры равновероятны). Это означает, что для параллельных сумматоров накапливающего типа можно считать, что время суммирования пропорционально 5. Оценочная •.функция в этом случае принимает вид _sg_(S) 4 ’ 21og2S 2 (1.П) ' Для сумматоров третьего типа время сложения в одном разряде практически не зависит от 5, но число разрядов в записи числа тем меньше, чем больше 5. Поэтому время сложения на комбинационном сумма- торе последовательного типа зависит от 5 так, что logsW оно оказывается пропорциональным -----~ = (log2S) . 10g2 /V ч Оценочная функция для этого случая имеет вид Ф" (5) = log|S *°Sz S (1.12) Наконец, для сумматоров четвертого типа время сложения, с одной стороны, пропорционально 5 (так как сумматор состоит из накапливающих одноразряд- ных суммирующих схем), а с другой стороны, оно пропорционально (log2S)-1 (так как сумматор является 109
последовательным). Таким образом, оценочная функ- ция для такого сумматора имеет вид = = O(S).F(S). (1.13) , 21og|S - •» Значения всех, вновь построенных функций для неко- торых значений 5 даны в нижеследующей таблице. Таблица 1.4 $ Ф'(«) Ф" (S) Ф'" (S) * 2 1,000 1,000 1,000 3 1,893 0,796 1,194 4 - 3,000 0,750 1,500 5 4,313 0,743 1,859 6 5,739 0,740 2,198 7 7,484 0,760 2,664 8 9,333 0,778 3,111 » 9 11,36 0,798 3,599 10 13,54 0,815 4,077 100 752,7 2,343 113,2 1000 50120 10,36 5029 Все функции, кроме Ф"(5), монотонно возрастают. Минимум для Ф"(5), как это следует из таблицы, ра- вен 6. Таким образом,' при использовании комбина- ционного последовательного сумматора система счис- ления с основанием шесть представляет определен- ный интерес. Отметим также, что с ростом 5 функция Ф'(5) растет наиболее быстро.’ Введенные нами оценочные функции типа Ф(5) оценивали время выполнения операции умножения "толькЪ с точки зрения числа необходимых сложений. Но при выполнении умножения, кроме сложений, необ- ходимо еще учитывать число операций сдвига, так как время сдвига для некоторых типов сумматора соизмеримо с временем реализации операции сложе- ния. ПО ' - -
Количество сдвигов пропорционально числу раз- рядов множителя и, следовательно, тем меньше, чем больше S (при фиксированном N). Время одного сдвига практически не зависит от основания системы счисления, поэтому полное время умножения с учетом сдвигов можно определить как ^logsMf+ logsMc, где — время одного сложения в системе счисления с основанием S, а •% — время однократного сдвига. Если в качестве эталона сравнения снова использо- вать двоичную систему счисления, то полная оценоч- ная функция для умножения принимает вид . (S — 1) + 2 log с № . . R (S) = ---’ —----c - . (1.14) log2№l + 21og2№c Для сумматоров параллельного типа можно дать более прозрачную запись для этой оценочной функ- ции. Если в машине используется параллельный сум- матор с комбинационными одноразрядными сумми- рующими схемами, то Если обозначить через Ц — то R\S) принимает вид U (l+29)log2S 7 Если же в машине используется накапливающий ' параллельный сумматор, то —и если через t обозначить т.: то оценочная функция R (S) примет вид R" (S) = . (1.16) 4 ' 2(l+2Z)log2S На практике при использовании комбинационного сумматора параллельного типа принято считать, что тс=-|-т2. В-этом случае функция /?'(S) принимает вид р' (5) _ -S — 1 + 1_______5--- 7 (l + l)log2S 21og2S ’ т. е. совпадает с функцией F(S). Ill
Если рассматривать операцию умножения не как операцию, сводящуюся к последовательности сложе- ний и сдвигов, а как операцию, для производства которой используется схема, показанная на рис. 1.7, то сложность умножения должна будет- зависеть от сложности блока УО. Сложность блока УО опреде- ляется в основном размером таблицы умножения, используемой в данной системе счисления. Объем этой таблицы есть ———— (в таблицу умножения не включена цифра 0 и учтена имеющаяся симметрия таблицы). Поведение функции Q(s) = .(SzzlHSzJ). (1.17) * 2 описывается следующей таблицей: $ <?($) 2 3 4 6 8 10 О 1 3 10 21 36 Рассмотрим теперь оценку различных систем счис- ления с точки зрения возможности убыстрения- про- изводства основных арифметических операций в ма- шине. В настоящее время подобные результаты в достаточно общей фррме имеются лишь для опера- ции умножения. Эти результаты были получены М. А. Карцевым. В'связи с тем что операция умножения является длительной по времени выполнения и встречается довольно часто, представляет интерес попытаться найти способы уменьшения времени на реализацию умножения. Рассмотрим один из подходов к решению этой задачи. Некоторые другие подходы к уменьше- нию времени умножения будут рассматриваться во второй главе книги. Если при реализации умножения анализировать одновременно несколько соседних разрядов множи- теля, то можно получить определенный выигрыш во П2
времени. Если в q одновременно анализируемых со- седних разрядах множителя стоит, например, q нулей, то вместо серии сложений и сдвигов можно ограни- читься одним сдвигом содержимого сумматора на q разрядов. Если же, например, в q разрядах множи- теля анализируемых одновременно стоит комбинация цифр (S — 1) (S—1)...(5—1), то можно заменить эту комбинацию цифр на 1 0...0 —00... 1 и снова огра- кичиться всего одним вычитанием множимого и сдви- гом на q разрядов. Пусть теперь одновременно анализируется q раз- рядов множителя. Положим, что все комбинации цифр в q разрядах равновероятны. Через Ад (S) обозначим количество тактов сложения-вычитания, которое при этом потребуется для q циклов умножения в системе счисления с основанием S, а через Ag(S) обозначим среднее количество тактов сложениягвычитания, при- ходящихся на один разряд множителя. Для сравнения между собой. различных систем счисления по скорости умножения- с расшифровкой разрядов множителя можно воспользоваться следую- щей оценочной функцией Х(5) = Г11щ L_ . (1.18) L «'-►оо Ад (2) J log2 S Множитель, стоящий в этом выражении справа от квадратной скобки, 'означает, что в системе счисления с основанием S и в двоичной системе счисления точность вычислений одинакова. На основании проведенных исследований было найдено выражение для Aq(S) в следующем виде: Д (S) =----1---R2 + S -2 +----------[1 + (- l)‘s] X ’ 4(S+l)l g(S+l)1 I Отсюда lira A (S) =----—- fs2 + S - 2 + [1 - (- if] ) . 1 4(S+1) I 2S 1 4 1 J J В нижеследующей таблице приведены значения X(S) для некоторых оснований систем счисления. Р-79.-8 /113
Таблица 1.5 2 3 4 5 - 6 7 8 9 10 X(S) 1 1,26 1,35 1,55 1,66 1,84 1,95 2,1 2,22 Из этой таблицы вытекает, 'что двоичная система счисления с точки зрения оценочной функции Х(5) является наиболее выгодной. Переход к пределу при q —<со носит несколько формальный характер, так как при фиксированной длине разрядной сетки в машине q не может увели- чиваться неограниченно. Однако это допущение не столь существенно, так как.уже при небольших q значение Aq(S) близко к своему пределу. Например, для того чтобы Aq(S) отличалось от своего пре- дельного значения меньше чем на 10°/°, при S — 2 достаточно расшифровывать одновременно 4 разряда множителя, при 5 = 4 достаточно иметь- q = 2, ai для всех остальных 5 это достигается уже при q—l. Последнее, в частности, означает, что при систе- мах счисления с основаниями, отличными от 2 и 4, предложенный метод ускорения умножения малоэф- фективен. Наконец, при выборе Основания системы счисления учитывают число' различных делителей, которое имеет основание. Чем больше делителей имеет основание, тем большая часть дробей будет записываться в этой системе счисления в конечном виде и, следовательно, тем меньшую абсолютную погрешность мы будем получать при записи дробных чисел в машине. Например, в шестиричной системе счисления все дроби вида у, -у или будут записываться в ко- нечном виде, так как 2, 3 и 6 являются делителями числа 6. В десятичной системе в конечном виде А А А представляются все дроби вида — , — и так как 2, 5 и 10 являются делителями основания системы. Среди небольших по величине оснований наиболь- шее число делителей имеет основание, равное 12. • J14 . -
Л 4 В двенадцатиричной системе все дроби вида —, , Л и А А А — , 7^7 выражаются конечным образом. Это свой- 4 6 ство побудило сторонников создания мировой систе- мы счисления выдвинуть идею о переходе при всех" измерениях и расчетах на систему счисления с осно- ванием 12. Однако с точки зрения • вычислительной техники преимущества двенадцатиричной системы весьма невелики, так как все оценочные функции для . такой системы дают результаты, худшие, чем для десятичной системы, и намного худшие, чем для двоич- ’ ной системы счисления. Исходя из всего вышесказанного, можно утверж- дать, что интерес могут представлять лишь системы счисления с основаниями 2, 3, 4, 6, 8,и 10.-Именно эти системы и будут рассматриваться нами в двух после- дующих главах. В настоящее время реально действуют вычисли- тельные машины, использующие двоичную, троичную, восьмиричную и десятичную„системы счисления. При этом наметилась тенденция использовать двоичную или троичную системы в универсальных машинах боль- шой производительности, а восьмиричную или десяти- ричную в машинах с невысокой производительностью, но с частым вводом и выводом информации. .К таким машинам, в частности, относятся экономические и информационные машины. Однако все существующие вычислительные машины ' пока что строятся на базе двоичных элементов. Для моделирования цифр 5-ичной системы счисления ис- пользуется такое минимальное число двоичных эле- ментов, которое обеспечивает однозначное двоичное представление каждой цифры S-ичной системы. Так как в п разрядах при двоичной системе счисления можно записать 2" различных двоичных чисел, то при замене S-ичных цифр их двоичными эквивалентами минимальное число необходимых двоичных элементов (разрядов) может быть определено из соотношения /z. = log2S. Так как .число элементов должно быть це- лым числом, то при S=£2k число необходимых эле- ментов есть п— [log2-Sj + 1. Здесь квадратные скобки означают целую часть логарифма. 8* 115
При таком способе представления цифр' 5-ичной системы естественно оценивать сложность системы не с помощью функции /'(S), а с помощью функции где *(•$) = __ X(S) log2S. ’ (1.19) S, 5 = 2ft 5] + 1, S=£2*. ф(5) На рис. 1.15 показан график этой функции и при- ведена таблица ее значений при некоторых 5. Максимальное зна- чение (S) достигает- ся при 5=5. Это озна- чает, что пятиричная система является наи- менее выгодной, если при представлении цифр используется за- мена 5-ичных элемен- тов на один 5-ичный разряд равно X (5). Функция ф(5) для всех систем с основанием вида 2й равна единице, т. е. вее такие систе- мы с точки зрения расхода оборудования на представление чи- сел из данного диа- пазона эквивалентны между собой. Для 5>6 <]> (5XF (5) и, сле- довательно, двоичное кодирование цифр 5-ичной системы более выгодно, нежели соз- дание 5-ичных элементов. Последнее утверждение спра- ведливо лишь при выполнении условия, что сложность 5-ичного элемента прямо пропорциональна 5. При 5—>оо ф (5) —»1 и некоторый интерес может предста- вить изучение систем счисления с большим основа- нием при двоичном кодировании цифр этой системы. Н6
При оценке десятичной системы с помощью оце- ночной функции f(S) мы убедились, что десятичная система примерно в 1,5 раза более сложна, чем, дво- ичная. С точки же зрения оценочной функции ф(5) сложность десятичной системы лишь на 20% больше сложности двоичной системы. С помощью функции Ф(5) можно оценить опти- мальность избыточных систем счисления, введенных нами в § 1.1. Соотношение (1.19) для квазиканониче- ских избыточных систем имеет вид где ф'(S) =-^13- log2S x^s)==fJog2(S + 2), s + : 1 ' t[log2(S + 2)] + l, 2 = 26 , S + 2 =/= 2*, (1-20) ,fe а для квазиканонических модифицированных избыточ- ных систем — ф"(5) = 214$) ' i°g2s где X"(S) = Hog2(S+ 2), S + 2 = 2fe l[log2(S+2)] + 1, S + 2=/=2*. (1.21) Сравнение квазиканонических систем счисления при различных S дано в нижеследующей таблице. Здесь N означает число двоичных разрядов, которое нужно затратить в соответствии с соотношениями (1.19), (1.20) и (1.21) на представление в канониче- ской, квазиканонической и модифицированной квази- канонической системах диапазон чисел от 0 до 1О10. Таблица 1.6 117
Из этой таблицы следует, что для обычнйх систем наиболее эффективны двоичная и четверичная системы, для квазиканонических систем — тринадцатиричная и четырнадцатиричная системы счисления, а- для моди- фицированных квазиканонических систем счисления наиболее эффективны семиричная, тринадцатиричная й четырнадцатиричная системы. Для обычно исполь- зуемых систем счисления (S = 2, 3, 8, .10, 16) наиболее выгодна квазиканоническая десятичная система и мо- дифицированная квазиканоническая десятичная си- стема. Следует подчеркнуть, что полученные нами оценки определяют эффективность того или иного основания системы счисления избыточного типа лишь с точки зрения расхода оборудования на представление чисел в машинах, а не с точки, зрения удобства реализации операций в машине. Из вышеприведенной таблицы, например, вытекает, что двоичная модифицированная квазиканоническая система является наименее выгод- ной. Однако именно такая двоичная система с циф- рами {—1, 0,1} весьма удобна для производства ариф- метических операций. В § 2.3 мы подробно рассмотрим свойства такой системы. Представление S-ичных цифр двоичными кодами будет подробно рассматриваться нами в пятой главе, в которой будут получены более точные способы оценки разумности двоичного кодирования канони- ческих систем счисления. Задачи . 1. Считая, что сложность S-ичного .элемента г (S) зависит от S, как r(Sj~yS-n, построить оценочную функцию по аналогии с F(S) и исследовать ее свойства. 2. Аналогичная задача при условии, что г (S)== S2-n. 3'. Рассмотреть избыточную систему- с основанием $ и (S + 4) цифрами. С помощью соотношения (1.19) построить оценочную функцию и исследовать ее свойства.
ГЛАВА ВТОРАЯ ДВОИЧНЫЕ СИСТЕМЫ СЧИСЛЕНИЯ § 2.1. Двоичная система с цифрами {0,1} В подавляющем большинстве современных вычис- лительных машин используется двоичная, система смещенного типа -е-цифрами {0,1}. Широкое распро- странение этой системы обусловлено тем, что имеются эффективные в инженерном смысле элементы, способ- ные хранить и обрабатывать двоичную информацию, и свойства самой системы таковы, что логика произ- водства . основных арифметических операций в этой системе наиболее проста и эффективна. Кроме того, как показывает функция f(S), построенная нами в § 1.9, двоичная система счисления требует при представлении числовой информации почти минималь- ное количество оборудования, уступая в этом лишь троичной системе счисления. В этой главе мы рассмотрим ряд вопросов, свя- занных с использованием двоичной системы для осу- ществления операций в вычислительной машине. При этом отметим, что все методы производства операций в канонических системах, описанные в первой главе, конечно, пригодны и для канонической двоичной си- стемы. Однако специфика двоичной системы позволяет в целом ряде случаев упростить алгоритмы, обсуж- давшиеся нами для произвольных канонических систем счисления, . Рассмотрение операций в двоичной системе мы начнем с логических операций, которые для произволь- ных систем нами не рассматривались, но которые при работе машины играютчбольшую роль. К логическим операциям мы будем относить все операции, которые совершаются поразрядно, независимо от результата П9
операции в остальных разрядах числа. Мы будем предполагать, что логические операции производятся либо над числами, представленными в естественной форме, либо над мантиссами чисел, если используется полулогарифмическая форма записи. В современных вычислительные машинах исполь- зуются три логические операции: логическое сложе- ние (дизъюнкция), логическое умножение (конъюнк- ция) и ср-авнениё (поразрядное сложение). Эти опера- ции определяются следующими таблицами. произведение для чисел (х)2 — 0,1110101 и (уУъ — = 0,0111011. На основании, таблиц определения операций логи- ческого сложения и умножения получаем, переходя к прямым кодам чисел, ,,0.1110101 Л 0.1110101 V 0.0111011 л0.0111011 . 0.Ш1111 ‘ 0.0110001 Здесь значки «V» и «Л» соответствуют знакам операции логического,сложения и умножения. Таким образом, (х\/у)2 = 0,111 НИ и {х/\у)2 = 0,0110001. Операции логического сложения и логического умножения используются в двоичных вычислительных машинах для формирования информации из отдельных частей и выделения из числовой информации тех или иных разрядов. Если, например, требуется определить, является ли данное двоичное число четным или не- четным, то достаточно произвести логическое умно- жение двоичного кода числа х на число вида 0.00...01. Если четно, то результат этой операции будет равен нулю, в противном случае, результатом операции будет число 0.00...01. Аналогичным приемом можно воспользоваться, например, и при определении знака 120
числа. Для этого Нужно произвести Логическое уМНО* жение прямого кода числа х на число 1.00...0. Пример 2.2. Сравнить числа (х)2 = 0,110111 и {у\— ' = -0,000101. Переходя к прямым кодам чисел и используя таб- лицу, определяющую операцию сравнения, получим ; 0.110111 + 1.000101 1.110010, гдезначок*«+» есть знак операции сравнения {х'+ = 1.110010. Операция сравнения используется для сравнения двух чисел между бобой. Как следует изопределения этой операции, результат операции в данном разряде равен нулю только тогда, когда в данном разряде оба числа, участвующие в операции, имеют одинако- вые цифры. Если два числа равны между собой, то результат операции сравнения над ними имеет вид 0.00...0, т. е. является чистым нулем. Пример 2.3. Сравнить числа (х)2 = —0,110111 и {у\ — 0,110111 по модулю. Для сравнения модулей двух чисел возьмем сначала абсолютные величины исходных чисел. Для этого произведем логическое умножение [л]п и [_у]п на число вида 0.111111 д 1.110111 « 0.110111 А 0.111111 А Одиш 0.110111 0.100111 Теперь сравним между собой полученные абсолютные значения • 0.110111* + 0.110111 0.000000 Получение нулевого результата свидетельствует о равенстве модулей исходных чисел. Перейдем теперь к рассмотрению арифметических операций. Рассмотрение начнем с операции алгебраи- ческого сложения. При алгебраическом сложении необходимо использовать дополнительный или обрат- ный коды. В случае двоичной системы перевод числа в эти коды существенно упрощается. Для перевода V 121
отрицательного числа й обратный код достаточно каждую цифру числа заменить ее дополнением до единицы, что соответствует простой замене 0 на 1 и 1 на 0. В знаковом разряде кода ставится единица. Операция обращения записи отрицательного .числа в обратный код часто называется инвертированием. Однако для того чтобы не использовать термин «инвертирование» в двух различных смыслах (как переход к обратному коду для двоично'й системы и как переход к коду числа с противоположным'знаком в симметричных системах счисления), мы в дальней- шем не будем называть инвертированием операцию перехода от прямого кода отрицательного числа к его «обратному коду. Для перехода к дополнительному коду, как и ранее, достаточно прибавить единицу в младший разряд обратного, кода числа. Для того чтобы избежать опе- рации прибавления единицы, можно построить алго- ритм перевода отрицательных двоичных чисел из •прямого кода' в дополнительный и обратно без ис- пользования в качестве промежуточного результата перевода в обратный код. Этот алгоритм состоит в следующем: для перевода прямого кода отрица- тельного числа в- его дополнительный код необходимо при просмотре прямого кода справа налево, начиная с его младших разрядов, оставить без изменения все разряды до первой единицы включительно, а все раз- ряды, стоящие слева от этой единицы (кроме знако- вого), превратить в обратный код (т. е. заменить 0, стоящие в этих, разрядах, на 1, и наоборот). Анало- гичный алгоритм верен и для обратного перевода. Пример 2.4. Перевести в дополнительный код число (х)2 = 0,110101. Осуществим этот перевод двумя способами: по универсальному алгоритму и с помощью метода, ко- торый мы только что описали. Переходим к обрат- ному коду данного числа. [%]0 = 1.001010. Дополни- тельный код получаем из обратного, прибавляя к его последнему справа разряду одну единицу Ид=== = 1.001011. Теперь воспользуемся методом непосредственного перехода от прямого кода числа к его дополнитель- 122
ному коду. [х]п —1.110101.' Просматривая этот код, начиная с младших разрядов, обнаруживаем, что еди- ница стоит в первом справа разряде. Для перехода к дополнительному коду оставляем эту единицу неизменной, а все цифры, стоящие слева от. нее, заменяем их дополнениями. Получаем [х]д = 1.001011. Применение специального метода преобразования числа в дополнительный код особенно выгодно при использовании сумматоров накапливающего типа (см. § 1.9), для которых время перевода числа в допол- нительный код (или обратного перевода) уменьшается при использовании описанного метода в 1,7 -ь 2,4 раза. Усложнения схемы сумматора при этом весьма незна- чительны. - Операция алгебраического сложения выполняется в дополнительном или обратном коде на основе пра- вил, сформулированных, в § 1.4. Пример 2.5. Найти (х)2 + {у}2 и (х)2— (у)2 для чисел (л)2 = 0,01101 и {у}2 = — 0,10110, используя при суммировании модифицированные дополнительные коды чисел. Имд = 00.01101 Имд =00.01101 ' [у]мд-11.01010 [-Д,д=00.10110 [•к+Л^ П-ЮШ [А:—3/]мд== 01.00011 С учетом исправления переполнения при вычитании получаем {х + у)2 = — 0,01001 и {х—у}2 = 0,10001. Рассмотрим теперь метод, позволяющий в "двоичной системе производить операцию алгебраического сложения непосредственно в прямом коде*. . * Этот метод будет излагаться для случая естественной , формы представления чисел. Однако его употребление для" случая полу- логарифмического представления не требует практически никаких изменений. ’ • . Операция алгебраического сложения распадается на две опера- ции: определения модуля результата операции и определение знака результирующего числа. Определение модуля результата операции зависит от комбинации знаком слагаемых. Если знаки слагаемых совпадают между собой, то модуль результата есть сумма модулей слагаемых, в противном случае модуль ' результата есть модуль разности модулей слагаемых. Поэтому для осуществления операции .л. . * Описываемый метод предложен в Институте кибернетики АН Грузинской ССР. .... . . , >.423
алгебраического сложения необходимо уметь реалиаовать три опе- рации: арифметическое сложение (сложение двух положительных чисел), нахождение Модуля разности двух положительных чисел и определение знака результата по анализу знаков чисел, участвую- щих в операции, и их модулей. Рассмотрим сначала операцию арифметического суммирования. Для организации операции произведем разбиение слагаемых на специальные группы разрядов. Для разбиения слагаемые просмат- риваются справа налево, начиная с младшего разряда. При каж- дом просмотре оценивается пара (л/, yi), стоящая в Z-м разряде обоих слагаемых. Просмотр.происходит до тех пор, пока впервые не встречаются комбинации (1,1). При появлении этой комбинации все разряды, начиная с и-го по г-й (разряд, где встретилась ком- бинация (1,1)) включительно, объединяются в группу, которая в дальнейшем называется р-группой. Заметим, что p-группа может состоять и из одного разряда, если первый просматриваемый раз- ряд уже дает комбинацию (1,1). После выделения р-группы про- смотр продолжается до первой встреченной комбинации (0, 0). "Все разряды, стоящие слева от р-группу, до разряда, давшего комбинацию (0, 0), включительно образуют группу разрядов, кото- рая в дальнейшем называется ^-группой. После выделения q- группы вновь начинает выделяться р-группа, и т. д. Выделение групп заканчивается, когда будет просмотрен старший числовой разряд слагаемых (знаковые разряды в просмотре не участвуют). Независимо от комбинации цифр слагаемых в первом числовом разряде этот разряд замыкает ту группу, которая выделялась на последнем этапе разбиения. После разбиения'на группы в каждой группе происходит по- разрядная операция по следующим правилам: р-группа | 0 1 9-группа 0 1 0 0 1 0 1 0 1 1 0 1 0 1 Полученный после этого результат есть арифметическая сумма! исходных чисел*. Пример 2.6. Найти арифметическую сумму чисел (х)2 = = 0,10110010011 и <_у)3 = О,О00ОШО11О. Для выделения групп запишем оба слагаемых так, чтобы их соответствующие разряды находились на одной вертикали 1|01100|1|00|11 0|00011|1|01|10 Вертикальная черта отделяет одну выделенную группу от дру- гой. Применяя правила сложения .для групп, получим окончатель- ный результат в виде' (х +у)2= 0,11000001001. Теперь перейдем к рассмотрению операции взятия модуля от разности двух положительных чисел (модуля разности модулей). . * Справедливость .этого утверждения может быть доказана читателем самостоятельно'на основе анйлйза сущности операций для групп, и правил разбиения на группы. 124 ’
Для организации разбиения на группы надо отдельно рас- смотреть два случая: | х | >| у | и |х| < |у|. Для первого случая происходит разбиение на //-группы и ^'-группы. //-группа всегда слева заканчивается комбинацией (О, 1), а «/'-группа — комбинацией (1, 0). Во втором случае происходит разбиение слагаемых на р''- группы и ^"-группы. //'-группа всегда слева заканчивается ком- бинацией (1,0), а ^"-группа — комбинацией (0, 1). Правила опера- ций для //-групп и //'-групп совпадают с правилом для р-групп, а для (/'-групп и (/"-групп— ^правилом для (/-групп. Пример 2.7. Найти модуль разности для чисел (х)2 = = 0,11010111010 и <_у>3 = 0,01111100110. Так как в этом случае | х | > |_у|, то производим разбиение разрядов'слагаейых на р'-группы и ^'-группы 110 10 1110 10 01111100110 V Отсюда <1 х—_у| >2 = 0,01011010100. Пример 2.8. Найти модуль разности .для чисел <х)2 = = 0,10111000001 и <j>2 = 0,11000101001. Так как в этом случае |x|<|j|, то производим разбиение разрядов слагаемых на р"-группы и (/"-группы 10111000001 11000101001 -Отсюда {| х—у |)2 = 0,00001101000. При реализации операции нахождения модуля’ разности двух положительных чисел необходимо определить, какой из двух слу- чаев имеет место. Для этого надо сравнить между собой модули чисел х и у. Эта операция может быть реализована в вычисли- тельной машине как поразрядная логическая операция сравнения с некоторым добавлением. После организации сравнения по мо- дулю (см. пример 2.3) выделим в полученном числе самый левый разряд, в котором находится единица. Эта^единица соответствует самому старшему разряду, в которых сравниваемые по модулю числа не совпали. Если теперь выделить в сравниваемых числах с “помощью операции логического умножения .цифры, стоящие в этом разряде, то число, для которого эта цифра равна единице, будет большим по модулю. Перейдем теперь к реализации последней операции — опре- делению знака результата алгебраического сложения. Для этого введем вспомогательные двоичные функции р, ч, ij: _ f0, если требуется найти сумму <х)2 и <_у)2; —(1, если требуется найти разность (х)г и (у)2; . ГО, если требуется арифметическое сложение | х ] и |у 1; (1, если требуется определение модуля разности модулей х ну; {0, если ,| х | > | у . 1, если ] х |< |.у |. 125
Значения v определяются следующей таблицей: знак первого слагаемого 00001111 знак второго слагаемого 00110011 значение ja 0 10 10 10 1 значение 01101001 Знак результата определяется следующей таблицей: знак первого слагаемого 00001111 значение v 00110011 значение 0 10 10 10 1 знак результата 00011110 С помощью этих таблиц полностью решается проблема при- своения знака результата операции алгебраического сложения. Последовательность действий при алгебраическом суммирова- нии в прямом коде имеет следующий вид. , 1. Определение значения v по комбинации содержимого зна- ковых разрядов слагаемых и заданной операции. 2. Сравнение модулей и получение значения т;. ' 3. Проведение соответствующей операции (арифметического сложения или получение модуля разности модулей). «4. Определение знака результата. Пример 2.9. Для (х)2 = 0,110101100010010 и (j)2 = 0,111110010001110 найти их разность. Для определения v исследуем комбинацию содержимого знако- вых разрядов слагаемых и заданной операции. В нашем случае эта комбинация" есть (0, 0, 1). Определяем по вышеприведенной таблице v=l. Отсюда следует, что необходимо искать модуль разности модулей исходных чисел. Для нахождения значения у производим операцию сравнения по модулю исходных чисел. Для получения модулей предварительно производим логическое умно- жение заданных кодов на число 0.11...1 * 0.110101100010010 Л 0.111110010001110 - 7 > 0.111111111111111 л 0,111111111111111 . 0.110101100010010 0.111110010001110 Далее осуществляем операцию сравнения модулей : 0.110101100010010 + 0.111110010001110 . 0.001011110011100 Старший несовпавший разряд подчеркнут. Так как в этом разряде мы имеем комбинацию (0,1),. то имеет место случай | х |< -.126
<|_у |. Производим разбиение на /Агруппьг и'^-труппЫ 1101101111000110010 1111|10|0|100|01110 Модуль результата {| х — у ])2 — 0,001000101111100. Для определения знака результата рассмотрим комбинацию знака первого слагаемого и значений v и у. В нашем случае эта комбинаций имеет вид (0, 1, 1). Поэтому на основании вышепри- веденной таблицы получаем окончательно (х — у)2 = — 0,001000101111100. § 2.2 Умножение в двоичной системе Перейдем теперь к операции умножения в' двоич- ной системе канонического1 типа. Для двоичной си- стемы схема умножения, показанная на рис. 1.9, упро- щается, так как никакого специального устройства типа УО для этой системы не требуется. Связано это с исключительной простотой операции умножения в одном разряде. Правила для этой операции имеют вид: 0X0 = 0, 0X1=0, 1X1 = 1- Таким образом, для двоичной системы счисления никакой специфиче- ской операции умножения нет, и эта операция заме- няется серией сдвигов и суммирований. Схема умно- жения показана на рис. 2.1. Кружком на этой схеме обозначен вентиль, который пропускает множимое в сумматор только в том случае, когда на его второй вход поступает единица. Если очередная цифра мно- жителя есть нуль, то вентиль закрыт и на сумматор ничего не передается (к его содержимому прибавля- ется нуль). Умножение происходит в прямом коде. Для определения знака произведения используется операция А над содержимым знаковых разрядов со- 127
Множителей. Отменим-, что в случае двоичной системы счисления операция Л совпадает с операцией ф, упо- требляющейся при суммировании дополнительных кодов на сумматоре дополнительного кода. Пример 2.10. Найти произведение чисел (х)2 = = 0,111011 .и (у)2 = —0,010011 по способу умножения, начиная с младшей цифры множителя. Переходим к прямым кодам чисел: [х]п = 0.111011, [_у]п = 1.010011. Знак произведения определяется пр операции ф : 0 ф 1 = 1. Числовые разряды перемножа- ются ^111011 х'0Ю011 000000' 000000 111011 000000 10001100001 Окончательный результат (ху)2 = — 0,010010. Пример 2.11. Найти произведение чисел (х)2 — ——24-0,1101 и (у)2 — — 2-3-0,4011. Для умножения переводим порядки чисел в модифицированный до- полнительный код, а мантиссы — в прямой код. По- рядки суммируем, знак мантиссы произведения опре- -деляем по операции ф, а мантиссы перемножаем, например, по способу умножения со старшей цифры множителя ®Ммд 00.100 [/их]п = 1. 1101 1101 [Ъ]мд 11.101 [ту]п = 1. 1011 Л1011 100.001 .0. , X 1101 ' 1101 100011.11 Окончательно, (ху )2 = 21.0,1001. Для двоичной системы справедлив метод умноже- ния в дополнительном коде, который рассматривался в § 1.6. Однако для случая двоичной системы этот метод может быть существенно упрощен. Имеет место следующая теорема. 128
Теорема 2.1. Умножёниечисел в дополнительном модифицированном коде при положительном мно- жителе происходит по обычным правилам с усло- вием, что при сдвиге числа вправо в крайнем левом разряде появляется та цифра, которая в нем стояла до сдвига (модифицированный сдвиг). При отрицатель- ном множителе умножение чисел в дополнительном коде сводится к умножению на модуль дополнитель- ного кода множителя с последующим прибавлением к полученному результату множимого, взятого с противоположным знаком. , Доказательство. Справедливость этой тео- ремы вытекает из следующего. Для случая умножения на положительный множитель это очевидно, так как именно такой сдвиг и такое сложение, как это тре- буется в условии теоремы, осуществляют умножение на 2-1 и сложение в дополнительном коде. Для случая отрицательного множителя справедли- вость теоремы вытекает из следующих соображений. Пусть [х]мд==хАхзн-х1х2...х„, где в контрольном и зна- ковом разряде множителя стоит 00 или 11. Так как у по условию отрицателен, то Ыд = I.JV2 —Уп- Отсюда Т = [_у]д— 2. и.= 0.Jiy2-”.Vn— 1- При умножении на х получим Xj/ = (o.y1.y2...j7„)-x-x. Пример 2.12. Найти в дополнительном коде произ- ведение чисел (х)2 =— 0,1011 и (у)2 — 0,1101. Дополнительные модифицированные коды сомно- жителей есть [л]мд= 11.0101 и [у]мд = 00.1101. Так как множитель положителен, то умножение происходит по1 обычным правилам при условии модифицирован- ного сдвига содержимого сумматора. q 000000 1101 1Ю101 умножение на младшую цифру множителя 110101' ® rwvvin1 модифицированный сдвиг wuuuu , умножение на вторую цифру множителя 1110101 Б-79._9 129
11110101 модифицированный сдвиг w 110101 умножение на третью'цифру множителя 111001001 Ф 111001001 модифицированный сдвиг w 110101 умножение на четвертую цифру множителя 1101110001 1101110001 модифицированный сдвиг [ху]мд = 11.01110001. Или (ху)а =— 0,10001111. Или, округляя результат, (ху) = —0,1001. Пример 2.13. Найти в дополнительном коде про- изведение чисел (х)2 = 0,1011 и (у)2=—0,1001. Дополнительные модифицированные коды сомно- жителей есть [х]ыд = 00.1011 и [_у]мд — 11.0111. Умно- жение происходит по правилам умножения на отри- цательный множитель. Для этого заготавливаем код (—х)2, который выглядит как [— х]мд = 110101. Нако- нец, модуль дополнительного кода множителя есть JDU = 00.0111. Ф 000000. 0111 ® 001011 умножение на младшую цифру множителя 001011 лг, 0001011 модифицированный сдвиг w 001011 умножение на вторую цифру множителя 0100001 лг, 00100001 модифицированный сдвиг w 001011 умножение на третью цифру множителя 01001101 лтч 001001101 модифицированный сдвиг 'р 0001001101 модифицированный сдвиг 110101 _ прибавление [—х]мд 1110011101 [^L = 11.10011101, или (ху)2 = -0,01100011. После округления (ху )2 = — 0,0110. Умножение двоичных чисел, заданных в обратном коде, выполняется аналогичным образом. Если ищется лишь главная часть произведения (т. е. первые п разрядов результата), то имеет место следующая теорема. 1.30
Теорема 2.2. При нахождении главной ласти произведения двоичных чисел, заданных в обратном коде, можно использовать алгоритм, указанный в теореме 2.1 для дополнительных кодов. Доказательство. Справедливость этого ут- верждения вытекает из того, что сумматор, исполь- зуемый при умножении обратных кодов, является циклическим сумматором. Поэтому для отрицатель- ного множителя мы имеем' [Я = 1-У1У2 -vn = 2+.y- 2~". Отсюда J = 0, ху — (0> У, Уъ ••• Уп)х ~~ х + 2~” х- Последнее слагаемое можно отбросить, так как нас интересуют только первые п разрядов произведения. Тогда мы приходим к схеме умножения, совпадающей со схемой йз теоремы 2.1. Пример 2.14. НаЦти главную часть произведения- обратных кодов чисел « — — 0,1101 и (у)^ = — 0,0110. Переходим к модифицированным обратным кодам х и у. [<=11.0010, [< = 11.1001, |[<|=oo.iooi, [—<м=00.1101 . 000000 + 110010 ’ 110010 1110010 11110010 ЕВ 1ШЮ0Ю 110010 1001 умножение на младшую цифру множителя модифицированный сдвиг модифицированный сдвиг модифицированный сдвиг ’ умножение на старшую цифру множителя 1110000010 J— г , J10001010 ЕВ 1410001010 „001101 10001011010 1 ! 0001101010 ... Модифицированный сдвиг прибавление [— х]ом - .. .„ г. .Главная часть произведения = 00.0110, или «2 = 0,0110. • ' ' ' ’ \ ~ 9* Ш
Нахождение 2я-разрядного произведения в обрат- ном коде несколько сложнее. В этом случае необхо- димо еще учесть поправку 2~"-х, которую мы не учитывали при определении главной части произведе- ния, и учесть влияние циклической передачи единицы из знакового разряда в n-й (а не 2/г-й) разряд сумма- тора. Если сумматор имеет 2/г разрядов, то единст- венное изменение, которое надо внести в схему метода нахождения главной части произведения, это добав- ление к главной частя поправки вида 2~п-х. В примерах 2.12, 2.13 и 2.14 мы рассматривали модифицированные коды. Конечно, ничего не изме- нится, если вместо модифицированных кодов рассма- тривать обычные коды. При реализации операции умножения, как правило, прихо- дится осуществлять округление результата до числа разрядов, равного разрядной сетке машины. Как уже указывалось в § 1.8, "именно эта причина резко снижает точность вычислений, осуще- ствляемых на современных вычислительных машинах. * Операцию округления произведения можно производить двумя способами. При первом способе все вычисления до получения результата идут без округления. Само округление происходит по результату, имеющему 2п разрядов. Этот способ хорош 'с точки зрения повышения точности результатов расчета, но требует много времени и оборудования для своей реализации. При втором спо- собе округление происходит в процессе вычислений. Каждый про- межуточный результат в сумматоре округляется до числа, имею- щего п + г разрядов. Такой способ умножения дает экономию во времени и в оборудовании. Однако при таком подходе к умноже- нию появляется дополнительный источник погрешности. При умножении двоичных чисел п п * = S(C*7))i"2-Z и y = S [(Л)]й-2~* Z-1 й=1 результат умножения х на [(-У/)]*-2“к, где k<r, не содержит ненулевых цифр правее (п + г)-го разряда. Поэтому округление не меняет этого числа. Для случая выражение х [(>у)]й-2—/г можно представить в следующем виде: n+r—k . . S [(л)]й-[(^)Ь-2’й+1 + п + S [(Л)Ы(А7)]г2-(*+г>, l^n'+r—k+l 132
где первая часть суммы'-при округлении остается неизменной, а вторая отбрасывается. При этом, если , ... п К[(№)]/• 2L<ft+z> < ^2’(й+г), /яа/2+Г—Й + 1 то операция округления на этом заканчивается. В противном слу- чае к оставшейся величине прибавляется 2 • Тогда погрешность произведения X [(»)]* •2~ft при &>г вы- разится следующим образом: [(»)]*• W„+r_ft+1-2"^^>- S z[(yy)]ft-[(^)lr2-(ft+0.' Суммарная погрешность по всем разрядам множителя имеет вид п 4- 2 [(Л>1И(*Д1,+^.„-2-1’+'+,)- k=r+l - S S [(x/)H(J7)k-2-(ft+z>. k=r+2 b=ti+r—k-\-2 Пусть l = n + Г-1— k + m. Тогда A = 2~8, где n n k—r 8 = S [(^)]n+^ft+r[O/)]ft-2-1- 2 X [(^)]и+г_й+ДОк-2-г. k=r+1 k=rA-2 1 = 2 Максимальная и минимальная величины погрешности А при за- данных п и г зависят от максимального и минимального значений & Эти значения были найдены В. М. Храпченко- и оказались рав- ными ' 183-
Число разрядов г имеет смысл брать так, чтобы выполнялось не- равенство Минимальные значения г, удовлетворяющие этому неравенству при заданных п, представлены в нижеследующей таблице. Операция умножения является операцией с боль- .. шим временем и встречается довольно часто (для универсальных машин умножение составляет около 12% всех выполняемых операций). Поэтому .желатель- но найти пути уменьшения времени выполнения умно- жения. Наиболее очевидное усовершенствование «состоит в том, что при нулевой цифре в очередном разряде множителя (прямого .кода множителя) не выполняется сложение содержимого сумматора с чис- лом, равным нулю. Такой прием позволяет экономить от 25 до 33% времени операции умножения. Второй способ сокращения ‘времени умножения связан с тем, что одновременно анализируется не один очередной разряд множителя, а группа из т разрядов , множителя. ‘Практически интерес представляет одно-’ временный анализ пары.или тройки соседних разрядов множителя. Большие значения т, не -давая сущест- венной экономии времени, требуют большого услож- нения схемы умножения. При одновременной расшиф-. ровке двух разрядов множителя возможны четыре случая, соответствующие четырем возможным двоич- . йым комбинациям в этих разрядах. В случае комби- нации 00 происходит сдвиг содержимого сумматора и регистра множителя сразу на два разряда вправо. При комбинации 01 происходит передача множимого в сум- матор и сдвиг множителя и содержимого сумматор# на два разряда вправо. При комбинации 10 сначала происходит сдвиг множителя и содержимого сумма- тора’на два разряда вправо, а потом передача мно- .ш. ' ' •
жимого в сумматор. Наконец, при комбинации 11 можно воспользоваться обычной схемой умножения. При обычной схеме умножения время, необходимое для умножения на два разряда „ множителя, равно 2(ts + tc)- Если считать, что все парные комбинации равновероятны, то математическое ожидание времени умножения на два разряда множителя при одновре- менной расшифровке двух разрядов множителя равно 7-2-c + |(^ + 2tc)+^(2ts + 2tc). При условии, . что тс = 0,5?е (см. § 1.9), экономия, получаемая при одновременной расшифровке двух разрядов множителя, имеет вид 2 (ТЕ + Тс ) - 12ts_4 Третьим способом повышения скорости выполне- ния операции умножения является переход к избыточ- ной системе симметричного типа (квазиканонической модифицированной системе). Этот вопрос будет рас- сматриваться в § 2.4. Некоторый интерес представляет для машин малой производительности отказ от выполнения операции умножения и замена этой операции операцией сумми- рования двоичных логарифмов сомно- жителей. Переход от числа к его дво- ичному логарифму осуществляется без использования таб- лиц логарифмов на основе следующего метода. Показанная на рис. 2.2 логариф- мическая кривая аппроксимиру е т с я ломаной линией с узлами в точках О и 2*. На рис. 2.2 аппроксимирующая ломаная показана пунктиром. За приближенные значения логарифма чис- - -135
ла х берут значение ординаты аппроксимирующей ло- маной в точке х. При такой замене возникает погреш- ность, отличная от нуля только для узловых точек. В нижеследующей таблице приведены для сравнения точные и приближенные значения двоичных логариф- мов для некоторого набора значений х. Таблица 2.1 (-V)io <lOg2 JT>l0 U). (a logs (И 10g2X)2 1 0,00000 0,0001 0,000 0С0,0000 2 1,00000 00010 1,000 001,0000 » 3 1,58495 00011 1,500 001,1000 4 2,00000 00100 2,000 010,0000 5 2,32193 ' 00101 2,250 010,0100 6 2,58496 00110 2,500 010,1000 7 2,80735 СОШ 2,750 010,1100 . 8 3,00000 01000 3,000 011,0000 9 3,16992 01001 3,125 011,0010 » 10 3,32193 01010 3,250 011,0100 11 3,45942 01011 3,375 011,0110 12 3,58496 01100 3,500 011,1000 Как следует из предложенного метода аппроксима- ции, переход от двоичного числа к его двоичному логарифму осуществляется весьма просто и состоит в следующем: характеристика логарифма равна числу разрядов в записи двоичного числа х без единицы, мантисса логарифма равна самой двоичной записи числа без старшей единицы. Аналогично осуществ- ляется и обратный переход от логарифмов к двоич- ным числам. Например, для (х)10=15 имеем: (х)2 = >=1111 и (Iog215}2 = 3,0111. При таком подходе максимальная погрешность про- изведения может достигать 11,1%, а максимальная погрешность деления — 12,5%. Поэтому метод замены умножения чисел суммированием их логарифмов или замены деления вычитанием логарифмов может исполь- зоваться только в машинах с достаточно большой разрядной сеткой при условий принятия мер против распространения погрешности (см. § 1.8). Как будет показано в следующем параграфе, обо- рудование, используемое для выполнения умножения 136
используется и при реализации операций деления и извлечения квадратного корня. Поэтому при реализа- ции в машине умножения в виде выполнения опера- ций над логарифмами чисел необходимо и операции деления и извлечения квадратного, корня осуществ- лять как операции над логарифмами''чисел. С этой же точки зрения следует расценивать всякие методы, приводящие к ускорению операции умножения, кото- рые требуют либо дополнительного оборудования, либо отказа от основной схемы умножения, исполь- зующей два регистра и сумматор в совокупности со схемами сдвига. § 2.3. Деление и извлечение квадратного корня в двоичной системе Перейдем к рассмотрению операции двоичного деления. По сравнению с общей схемой деления схема двоичного деления существенно проще. Это связано с тем, что для определения одной цифры частного в двоичной системе всегда требуется толь- ко одно вычитание делителя, сдвинутого на соответ- ствующее число разрядов, из последнего остатка. Если эта разность неотрицательна, то очередная циф- ра частного равна единице, в противном случае она равна нулю. Пример 2.15. Разделить число (х)2 = 2-2-0,11011 на число (у)2 = 23-0,11101, используя для записи порядков дополнительный модифицированный код, а для записи мантисс — прямой код. Записываем порядки и мантиссы в соответствую- щих кодах: [/>х]мд = 11.110, [^]мд = 00.011, [mjn = — 0.11Щ1, [/Др]п =0.11101. Производим вычитание по- рядков. Для этого берем [—Ру]мд= Н.Ю1. А (рХ = Ц-1Ю = 11-101 п-on' V 137
Для определения знака мантиссы частного используем операцию ф для содержимого знаковых разрядов исходных мантисс: 0ф0 = 0. п 00.11011 У н.оосп д, 11.11110- W 00.11101 т100.11011 ф 11,10010 д-^00.01101- ф 11.11001 |11101 0,1 1 1 1 - + 1 т100. оопо- 11.11101 т100.00011 ® 11.11111 100.00010-- исходный делитель 0,11101 сдвинутый делитель 0,01110 сдвинутый делитель 0,00111 сдвинутый делитель 0,00011 сдвинутый делитель 0,00001 сдвинутый делитель 0,00000 Деление прекращено. Окончательно /— \ = “5*0,11111. \У/2 Для ускорения деления можно пользоваться схе- мой деления без восстановления остатка. В такой схеме последний положительный остаток посылается на специальный регистр, и там хранится. Если при очередном вычитании сдвинутого делителя новый остаток получился положительным, то он посылается на этот регистр и запоминается там вместо предыду- - щего положительного остатка. Если же результат- - очередного вычитания отрицателен, то вместо при бавления к нему положительного делителя на его место засылается из регистра последний положитель- ный остаток. Другой способ деления без восстановления остатка основан на схеме, обоснование которой будет дано в § 2.4 при рассмотрении двоичной системы счисле- ния с цифрами {—1,1}. В этом способе деления до- пускаются как положительные, так и отрицательные остатки, при вычитании делителя. Если очередной ’ остаток положителен, то в частное пишется единица, . а на следующем цикле работы происходит вычитание 138
делителя из сдвинутого на один разряд влево остатка. Если же очередной остаток отрицателен, то в частное пишется нуль, а на следующем цикле работы проис- ходит прибавление делителя к сдвинутом;/ на один разряд влево остатку. Пример 2.16. Разделить число (х)2= 10011 на чис- ло (.У)г= 0,11001 по способу без восстановления ос- татка. Переходим к модифицированным дополнительным кодам. И,д = 00.10011, Ымд = 00.11001, [-.у]мд = = 11.00111. Знак частного определяется из операции 0®0 = 0 m 00.10011 |'11001 о? 11.00111 0,1 1 0 1 о 11.11010-------------’ + " ф 11.10100 00.11001 iOO.Ol юг------—-----— ф 00.11010 11.00111 ЮО, 00001--------------— ф 00.00010 11.00111 11.01001----:-------------- ф 11.1 010 00.11001 i00.01011------------------ • ф 00.10110 11.00111 11.41101----------------------- вычитание делителя сдвиг остатка влево прибавление делителя сдвиг остатка влево вычитание делителя сдвиг остатка влево вычитание делителя сдвиг остатка влево прибавление делителя сдвиг остатка влево вычитание делителя деление прекращено. Окончательный ответ /—\ =0,11010. \-У / 2 Подобно умножению операцию деления можно про- изводить непосредственно в дополнительном или об- ратном кодах. При таком делении можно воспользо- ваться результатами теорем 2.1 и 2.2, относящимися к правилам умножения в кодах, отличных от прямого. Если нам необходимы правила выполнения операций деления в дополнительном или обратном кодах, то соответствующие схемы для умножения можно исполь- . 139
зовать следующим образом. -Из того, что следует Поэтому операция деления сводится к серии опера- ций, обратных тем, которые необходимо было реали- зовать при умножении в дополнительном или обрат- ном кодах. При этом делимое играет роль произ- ведения, делитель — множимого, а частное — множи- теля. Такое сопоставление делителя и частного удобно, «гак как подобно множителю частное получается в виде последовательности значений цифр. Правила деления в дополнительном коде вы- глядят следующим образом. 1. Определяется знак частного с помощью опера- ции ф над содержимым знакового разряда делимого и делителя. " 2. Если частное положительно, то переход к пунк- ту 3. В противном случае к делимому прибавляется код делителя. 3. Остаток сдвигается на один разряд влево (или делитель сдвигается на один разряд вправо). 4. ' Из остатка вычитается делитель. 5. Если разность имеет тот же знак, что и дели- тель, то очередная цифра частного равна 1. Остатком на очередном шаге является полученная разность. Возвращение к пункту 3. Если разность имеет знак, противоположный знаку делителя, то очередная цифра частного равна 0. 6. Для восстановчения остатка происходит прибав- ление к полученной разности кода делителя. После этоГо происходит возвращение к пункту 3. 140
11.011001 11.100011- © 11.000110 oo.iioooi ll.llulll- 11.101110 00.110001 „^o.oiiiii- g? ii.ooiiii 11.101110 © 11.011100 00.1 loom mI(X).00H01- tnj-LOOlHl 11.0111.0 © 10.111000 00.110001 11.101001- © 11.010010 oo.iioodi ffil00.OJ0011- ш_1Е00Ш1 и.оюэю' lll.ooilll 110010 J вычитание делителя вычитание делителя вычитание делителя восстановление остатка вычитание делителя восстановление остатка вычитание делителя вычитание делителя восстановление остатка деление закончено. / =0,110010. Пример 2.17. Разделить в модифицированном до- полнительном коде число (х>2=— 0,100111 на число (у)2=— 0,110001. Переходим к дополнительным модифицированным кодам: рс]мд = 11.011001, [_у]мд = 11.001111. Определяем знак частного. 1ф1 —0. Деление в обратном коде осуществляется анало- гичным образом. Пример 2.18. Разделить число (х}2 =— 0,100111 на число (_у)2 = 0,110001 в' модифицированном обратном коде. Имеем Им0 = 11.011000 и [_у]м0 = 00.110001. Знак частного получается как 1ф0 = 1. 141
ш 11.011000 00.110001 1 1 00.001001 и 00.001010 00.0101000 11.001110 11.100010 00.110001 ЕВ 1 i_ 00.010011 t ЕВ 00.010100 00.101000 11.001110 11.110110 • 00.110001 * 1 |_ 00.100111 t И 00.101000 01.010000 11.001110 1 , 1 00.011110 - + Ш 00.011111 00.111110 11.001110 1 1 00.001100 t Ш 00.001101 0).011010 11.001110 11.101000 00.110001 |J 1 0 0 0 1 001101 вычитание делителя восстановление остатка вычитание делителя восстановление остатка вычитание делителя вычитание делителя вычитание делителя восстановление остатка 1 00.011001 I t 00.011010 , 00.110100 1 11.001110 вычитание делителя 1 00.000010 I t ] 00.000011 1 11.001110 11.010001 вычитание делителя Окончательный ответ — 0,110010. У Jmo = 11.001101, или
Несмотря на то что деление принадлежит к редко встречающимся операциям (для универсальных вычис- лительных машин деление составляет всего 2% от общего числа операций), проблема уменьшения вре- мени деления все-таки актуальна. С одной стороны, даже малое уменьшение времени выполнения деления может оказаться весьма эффективным для специали- зированных машин, с другой стороны, общее время, затрачиваемое на выполнение деления, столь велико, что возможно найти пути его существенного сокра- щения. Идея первого метода убыстрения деления состоит в том, что при образовании очередного остатка может случиться, что этот остаток будет либо слишком мал по абсолютной величине, либо слишком велик. На основе анализа величины остатка в этом случае можно будет определить не одну очередную цифру частного, а целую группу цифр. При изложении такого метода убыстрения деления будем предполагать, что делитель является нормали- зованным числом (т. е. в первом числовом разряде дедителя стоит единица). Рассмотрим четыре случая. 1. Остаток положителен и т его первых разрядов занимают нули. В- этом случае в частное можно за- писать т — 1 нулей, сдвинуть делитель на т разря- дов и вычислять очередную цифру частного. 2. Остаток отрицателен и т его первых разрядов занимают единицы. Очевидно, что несколько последо- вательно определяемых остатков будут положительны и в разряды частного, будет записана соответствую- щая группа из единиц. Покажем, что эта группа бу- дет состоять из (т — 1)-й единицы. Обозначим через Ro полученный малый отрицательный остаток, а через q нормализованный делитель. Тогда новый остаток Rx может быть выражен как = 2х-/?0 + q. Ясно, что при т — 1 > 1 Rr > 0. Следующий остаток R2 имеет вид ~ 21 • Ri — q — ‘ Ro + q- При т — 1 > 2 /?2 > 0 и т- Д- Для всех 1 < т имеем /?z4-2z-/?0 + q и Ri>0, если tn — 1 > I. Отсюда Rm_x>Q^ и необходимость записи в частное группы из т— 1 единицы доказана, 143
3. Остаток положителен и близок к q. Вычтем из /?0 q. Получим величину R^ = R0~q (в дополнитель- ном или обратном коде), которая является достаточно малой по модулю отрицательной величиной. Пусть в старших разрядах R'o стоит группа из т единиц. Покажем тогда, что в частное можно записать группу из (т~ 1)-й единицы.. Ri = Z'-Rq — q = 2'-R’0 + Q- При m — 1 > 1 Ri > 0 и т. д. R, = 2l-R'o + q и Rj > 0 при m— 1 > t. Последний остаток Rm = 2m • R'o + q. Этот , остаток получается сдвигом R'o на т единиц влево и прибавлением к результату сдвига делителя. 4. Остаток отрицателен и близок по модулю к q. ^Образуем 7?" = Ro + q. В /?" в первых т разрядах стоят нули. Поэтому в частное записывается (т — 1) нуль. Пример 2.19. Разделить (х}2 = 0,1111110010111 на (j/)2 == 0,1000001000001 по вышеописанному методу фор- мирования групп цифр частного. Вычисления будем вести в дополнительном моди- фицированном коде по способу без восстановления остатка. Знак частного 0ф0 = 0. 00.11111100000111 1000001000001 1 11.0111110111111 1111100011000 дОО.ОИНОЮЮНО — t r+t [ ’11.0111110111111 11.1111100010101 -----1 11.0001010100000 00.1000001000001 11.1001011100001 00.1000001000001 ,00.0001100100010 00.1100100010000 11.0111110111111 ,00.0100011001111 00.1000110011110 11.0111110111111 ,00.0000101011101 00.1010111010000 остаток близок к q передача в частное группы из 4 единиц и сдвиг остатка на 5 разрядов влево остаток близок к q передача в частное группы из 2 нулей и сдвиг остатка на 3 разряда влево сдвиг остатка на один разряд влево, в частное 1 передача в частное группы из 3 нулей и сдвиг остатка на 4 разряда влево деление прекращено; / —\ 1,111100011000. XJ7 / 2 Операция извлечения квадратного корня из данного числа не принадлежит к числу арифметических опера- 144
ций. Однако при работе универсальных вычислитель- ных машин эта операция встречается не так уж редко (около 1% от общего числа операций, выполняемых машиной). В большинстве современных машин извле- чение корня представляет собой специальную стан- дартную подпрограмму, позволяющую с помощью несложного итерационного процесса вычислять зна- чение корня. Примером итерационной формулы, при- годной для вычисления значений корня, может слу- жить формула вида уй = 0,5( —-------F_yft_A где на- чальное значениеу0 может быть любым числом, отлич- ным от нуля. Однако в некоторых универсальных вычислительных машинах и многих специализирован- ных* машинах операция извлечения квадратного корня выполняется схемно. Связано это с тем, что для схем- ной реализации такой операции практически почти не требуется усложнение схемы машины, ибо в двоичной системе счисления логика операций извлечения квад- ратного корня почти совпадает с логикой операции деления.. Для пояснения сущности алгоритма вычисления значения корня предположим, что мы уже определили (т— 1) цифру в выражении корня и ищем т-ю цифру. Обозначим подкоренное выражение через х = О, хгх2... хп. Очевидно, что 0. У1У2 Ут-\ есть наиболь- шее число, квадрат которого не превосходит х. Пусть = *- (0, У1У2 -Ут-1)2 и адт_г = х-(0, УгУ2 ...ym_iV)2. Если w„,_i > 0, то очевидно, что ут — 1. Если же wm_l < 0, то ут = 0, Преобразуем выражение для следующим образом: = х - (0, уху2... ут_! + 2~т)2 = = [х- (0, угу2 ...уга_У1- 2-2-га-0, У1у2 ... Ут-1—2~2т= = угу2...ym^oi. Итак, для получения значения wm_l необходимо на- писать справа от 0, У1У2 ••• Ут-i комбинацию 01, сдви- нуть полученное число на .(/га—1) разряд вправо и Б-79.—Ю 145
вычесть полученный результат из wm_P Если при этом вычитании разность будет неотрицательной, то оче- редная цифра корня есть 1 и полученная разность играет роль остатка при вычислении очередной цифры корня. Если разность получится отрицательной, то очередная цифра корня есть 0 и роль остатка на сле- дующем шаге вычислений играет тот остаток, кото- рый использовался на данном шаге (т. е. wm = Для восстановления остатка надо к полученной отри- цательной разности прибавить число О, У1У2 ••• Ут-№- Для нахождения первой цифры корня надо взять число О, J1J2, равное 0,01. Выбор такого начального при- ближения определяется тем, что подкоренное'выра- жение предполагается нормализованным числом. * Пример 2.20. Извлечь квадратный корень из числа (х)2 = 0,100101, используя модифицированный допол- нительный код. 00.100101 *р 11.110000 ,00.010101 00.101010 Ф 11,011000 ,00.000010 ЛГ, 00.000100 tp 11.001100 ил 11.010000 " ' Ш 00.110100 ,00.000100 пч 00.001000 • ОР 11.001110 посылка в сумматор числа прибавление кода числа — 0,01 сдвиг влево на один разряд прибавление кода числа—0,101 сдвиг влево на один разряд прибавление кода числа — 0,1101 восстановление остатка сдвиг влево на один разряд прибавление кода числа — 0,11001 пл 11.010110 07 00.110010 . ,00.001000 ИЛ 00.010000 Ф 11.001111 И< 11.011111 W 00.110001 ,00.010000 ИЛ 00.100000 ф 11.010000 ИЛ 11.110000 Ф 00.110000 ,00.100000 / восстановление остатка сдвиг влево на один разряд прибавление кода числа — 0,140001 восстановление остатка сдвиг влево на один разряд Прибавление кода числа — 0,110000 восстановление остатка 146
Окончательный ответ (Кх)2 = 0,110000. Как и в случае деления, можно ускорить процесс извлечения квадратного корня за счет исключения тактов, необходимых для восстановления Остатков. Как и раньше, для этого требуется дополнительное оборудование (наличие специального регистра, где хранится' последний положительный остаток) или пе- рейти к извлечению корня в специальной двоичной системе с цифрами {—1,1}. Эта система будет нами рассмотрена в следующем параграфе. При извлечении квадратного корня на машине с полулогарифмической формой представления необхо- димо предварительно проанализировать порядок числа. Если порядок четный, то порядок корня есть порядок подкоренного выражения, деленный на 2 (сдвинутый на один разряд влево). В этом случае корень извле- кается из нормализованной мантиссы. Если же поря- док подкоренного выражения нечетный, то сначала мантисса подкоренного выражения сдвигается на один разряд влево, увеличивая порядок на единицу, а затем происходит извлечение корня по правилам представ- ления с четным порядком. — Задачи 1. В двоичной системе найти.сумму, разность, произведение и частное чисел <х)2 = 0,1101100 и (у)2 = — 0,10011101. Сложение выполнить в дополнительном модифицированном коде, а вычита- ние — в модифицированном обратном коде. 2. Найти сумму, разность, произведение и частное для чисел (х)2 = 2~'-ОДЮ! и (j/>2 = 21.0,1001. Все- операции выполнить в модифицированном дополнительном коде. 3. Извлечь квадратный корень из числа (х)2 = 25.0,101. 4. Сформулировать правила извлечения квадратного корня для случая, когда подкоренное выражение представлено дополни- тельным кодом. § 2.4. Двоичные системы счисления с цифрами {-1,1} и {-1, О, 1} В этом параграфе мы рассмотрим использование двух неканонических систем счисления. Система с цифрами {— 1,1} не принадлежит к каноническим си- стемам счисления, так как среди цифр этой системы нет цифры с количественным эквивалентом, равным нулю. Это приводит к тому, что в подобной системе оказывается невозможным конечным образом предста- 10* - 147
вить некоторые числа. В частности, в подобной систе- ме невозможно конечным образом представить любое целое четное число или число нуль. Заметим, что между системой с цифрами {—.1,1} и обычной двоичной системой можно установить сле- дующую связь. Запишем число 2т в обычной системе 2т = 10... 0. Число нулей в этой записи справа от единицы равно т. Рассмотрим теперь число т—1 ’ У= S 2ft=ll...l, коД которого содержит т единиц. Так как т—1 ' * v 2m — 2ft — 10... 0 — 11 ...1 == 00... 01, Й=1 То мы получаем связь между двумя рассматриваемыми двоичными системами в следующем виде: 111... 1 = = 00...01. Для нечетных чисел это дает правило пе- ревода числа из системы {0,1} в систему {—1,1}. * Пример 2.21. Перевести число {х)2 = 10011 в двоич- ную систему с цифрами {—1,1}. Перевод осуществляем путем просмотра кода дан- ного числа слева направо. Единица, стоящая в нуле- вом разряде, сохраняется. Группа цифр 001 на осно- вании вышеприведенного соотношения заменяется на группу 111. Левая единица обычной двоичной записи сохраняется. Окончательно, (х)2 = 11111. Черточка над- двойкой, стоящей в индексе, означает, что код записан в системе с основанием два и цифрами {—1,1}. Для получения конечного представления как чет- ных, так и нечетных чисел в системе с цифрами {—1,1} можно воспользоваться системой представле- ния, предложенной Баньковским. В этой системе ко- личественный эквивалент любого числа х вычисляется согласно соотношению 1Л У [ед-2'—i-. (2.D Слагаемое — 2-1, которое добавляется к записи числа в виде соотношения (1.1), позволяет конечным обра- зом представлять в системе с цифрами любые '148
числа. При этом для нечетных чисел содержимое разряда с номером «минус один» равно + 1, и эта единица уничтожает влияние корректирующего сла- гаемого в соотношении- (2.1), а для четных чисел содержимое разряда с номером «минус один» равно—1, что в совокупности с корректирующим слагаемым дает возможность получения минус единицы. Тогда нуль можно представить как 1,1, ибо, учитывая корректи- рующее слагаемое, мы получим Ы°—1-2*-1—2-1=0. Аналогично число 4, например, представимо в системе Баньковского как 111,1. Для перевода чисел в систему с цифрами {—1,1}, удовлетворяющую соотношению (2.1), необходимо проделать следующее. Если переводимое число являет- ся нечетным, то его перевод осуществляется так, как это показано в примере 2.21, а затем в разряд с но- мером «минус один» записывается цифра + 1. Если переводимое число четно, то оно предварительно уве- личивается на единицу, а после этого переводится как нечетное число при условии, что к полученному результату в разряде с номером «минус единица» дописывается цифра — 1. Пример 2.22. Перевести в систему Баньковского число (х)2= 110110. Так как исходное число является четным, то вместо него осуществляем перевод числа 110111. На основа- нии алгоритма перевода получаем 1111111. Оконча- тельно (л)2 — 1111111,1. При записи в системе с цифрами {-1,1} дробей можно при п двоичных' разрядов после запятой всегда считать (с точностью до единицы младшего разряда), что переводимое число является нечетным. Это поз- воляет получать для дробей приближенные представ- ления в системе с цифрами {—1,1}. В более удобной фор'ме правило перевода дробей в рассматриваемую систему можно представить следующим образом. Если исходная дробь имеет вид 0,XjZ2... хп, то после пере- вода она имеет вид l,lXiX2... хп, где х^=1, если xt = 0, и xz=l, если Xj=l. Пример 2.23. Перевести в систему с цифрами {—1,1} двоичную дробь (х)2 = 0,101. На основании сформулированного правила перевода получаем (х)2 = 149
= 1,1111. Проверим полученный результат. Для исход- ной дроби имеем л = 1-2~1 + 0-2~2. + 1.2~3 = —. 8 Для кода в системе {—1,1} ? л = 1-20+Т-2-1 4- 1-2“2+Т.2~3+ Ьг-4^-1. 16 Ошибка перевода равна одной единице минус четвер- того разряда. Представление в системе с цифрами {—1,1} облег- чает выполнение операций умножения, деления и извлечения квадратного корня. Это облегчение свя- зано с тем, что если множитель, делитель или подко- ”ренное выражение рассматривать как числа, представ- ленные в системе с цифрами {—1,1},. то выполнение операций в обычной двоичной системе с дополнитель- ными или обратными кодами чисел становятся весьма удобными для реализации на машине. При этом факти- чески множитель, делитель или подкоренное выраже- ние представлены в обычной двоичной системе и лишь интерпретируются как представленные в системе {—1,1}. Для пояснения сказанного рассмотрим более подробно связь между дополнительным кодом обычной двоичной системы и представлением дробей в системе с цифрами 1Л1- Для этого при записи дополни- тельного кода в обычной двоичной системе будем перед знаковым разрядом ставить еще один дополни- тельный разряд, содержимое которого будет противо- положно содержимому знакового разряда. Тогда, если число х положительно, то, по определению [л]д = х, но при добавлении- указанного дополнительного раз- ряда [л]д = 10, х1х2^,..хп==2 + х. Штрихом здесь отме- чено введенное нами специальное представление числа. Если-х отрицательно, то содержимое дополнительно- го разряда есть нуль и рс]д = 2 + х. Итак, в рассмат- риваемом представлении всегда имеет место соотно- шение [х]д = 2 + х. Таким образом, общее правило перевода дробей лю- бого-знака из двоичной системы с цифрами {0,1} в систему с цифрами {—1,1} может выполняться путем 150
перехода к записи дроби в измененном дополнитель- ном коде, заменой каждой цифры нуль в этом пред- ставлении на минус единицу и сдвига вправо получен- ного результата на один разряд. Полностью аналогич- ные рассуждения можно повторить и для случая обратного кода. Представления чисел в двоичной системе можно рассматривать как бесконечные. Если рассматриваемые дроби используют для своей записи п разрядов после запятой, то в случае дополнитель- ного кода или в случае измененного • представления положительного числа в обратном коде необходимо считать, что все цифры, стоящие справа от ц-го раз- ряда после запятой, являются нулями. Это означает, что после перехода в систему {—1,1} все цифры запи- си, стоящие справа от (/z+ 1)-го разряда после запятой, * оо равны минус единице. Но — У 2~k = — 2“(п+1). По- этому такой бесконечный хвост из минус единиц экви- валентен добавлению цифры 1 в (п + 1)-й разряд за- писи числа. Для отрицательного числа, записанного в .обратном коде, получается бесконечный хвост из елиниц, который эквивалентен прибавлению единицы в (п + 1)-й разряд представления данного числа в системе {—1,1}. Окончательно -Хзн-Хзн ... Хп 2 \ если [х]д =ХзнЛСзн*Х^ ... Хп Х^нХзнХу ... Хп + 2 ‘ \ если [х]о == ХзнХ7зн*Х| ... Хп-, (2.2) где ~ (1, если X; = 1; xz = J 1 I 1, если xz = 0. Рассмотрим использование системы {—1,1} для производства умножения в дополнительном коде. . Пусть множитель в дополнительном коде имеет вид [_У]д ~_Узн_Узн_У1 ...уп. Так КаК У = _Узн.Узн.У1 - -Уп 2 ( + \ то х-узн_Узнуг ...уп~ 2~(п+1) • х. Процесс умножения начинается с посылки кода числа —х, которая экви- валентна (из-за последующего (п 4-1)'-го сдвига час- 151
тичных произведений вправо) добавлению слагаемого вида —2~(п+1)-х. Процесс самого умножения обычен и сводится к прибавлению в сумматор кода множи- мого, если очередная цифра множителя есть единица, или к прибавлению в сумматор кода — х, если очеред- ная цифра множителя есть нуль (т. е. 1 при представ- лении с помощью (2.2)). Пример 2.24. Перемножить.по описанному способу числа (х)2 = 0,110101 и (у)2 = 0,101101. Переходя для множимого к обычному модифицированному дополни- тельному коду, а для множителя к измененному до- полнительному коду, получим [х]вд = 00.110101, [“ х]мд — 11.001011, [^ = 10.101101. В системе {— 1,1} множитель имеет вид = 1,1111111 -2“7. дч 11.001011 ш 00.110101 посылка на сумматор кода числа — х прибавление х 100.000000 сдвиг вправо на один разряд ич 00.00 000 w 11.001011 вычитание х 11:001011 ИЧ 11.100101 сдвиг вправо на один разряд w 00.110101 прибавление х ,00.011010 дч 00 001101 сдвиг вправо на один разряд w 00.110101 прибавление х 01.000010 дч 00.100001 сдвиг вправо на один разряд ш 11.001011 вычитание х 11.101100 ** дч 11.110110 сдвиг вправо на один разряд ш 00.11'101 прибавление х ,00.101011 ДЧ 00.010101 сдвиг вправо на один разряд ш 11.001011 вычитание х 11.100000 ДЧ 11.1100QO сдвиг вправо на один разряд ш 00.110101 прибавление х ,00.100101 00.100101 Окончательно (ху)а~ 0,100101. 152
Организация деления в дополнительном коде с по- мощью перехода к представлению чисел в системе {—1,1} рассматривалась в § 2,3 (без упоминания о системе {—1,1}). Л, Особенно эффективно система с цифрами — 1 и 1 может быть использована при организации машинной операции извлечения квадратного корня из числа х. Один из наиболее известных методов получения значения подкоренного' выражения в системе {—1,1} состоит'в следующе'м. На сумматор записывается код х, сдвинутый на один разряд вправо. Пусть найдены у0, y^yz —У£_1 разложения корня в системе {—11}. Цифра ys определяется знаком числа, находящегося в данный момент в сумматоре s-го остатка (vs). Если vs > 0, то уя = 1, если же vs < 0, то 5^=1. ’Для получения очередного остатка выполняются следующие дейст- вия: к4.+1 = »5-54 (S Дг'2 !-у4-2 (5+1)). <=о Значение v г получается из wj+1 сдвигом влево на один раз- ряд. Обоснование этого метода здесь не приводится. Отметим только, что все действия необходимо выполнять по правилам системы {—1,1}, а при получении результата можно трактовать его непосредственно в двоичной системе, заменяя цифры 1 в ре- зультате на цифры 0. Перейдем теперь к рассмотрению избыточной двоичной системы с цифрами {—1,0, 1}. Такая систе- ма является модифицированной квазиканонической системой счисления и для нее справедливы все ут- верждения, изложенные в первой главе относительно подобных систем. Поэтому в настоящем параграфе мы рассмотрим лишь соображения, связанные со спе- цификой этой системы, используемой при ускорении операции умножения в двоичных вычислительных ма- шинах. Ускорение этой операции основывается на том, что при умножении в системе с цифрами {—1,0, 1} число передач множимого в сумматоре может быть сокра- щено за счет замены группы из I единиц множителя, стоящих в соседних разрядах, на группу 10... 01, в . которой содержится I — 1 нуль, и левая единица стоит в соседнем старшем разряде по сравнению с место- положением левой единицы группы в записи множи- теля. Если при умножении такты сложения при нуле- 153
Вой цифре множителя опускаются, то за счет такого преобразования множителя можно получить сущест- венное ускорение операции умножения. Например, при множителе 1 110111 101 обычный способ умноже- ния дает восемь тактов сложения, а переход к умно- жению в системе {— 1, 0, _1} (при этом множитель преобретает вид 10011 000101) — всего пять тактов сложения (плюс два такта преобразования минус мно- жимого в дополнительный или обратный код). Пример 2.25. Умножить число (х)2 = 0,110110001 на число (_у)2 = 0,111011110, используя для представления множителя систему с цифрами (—1, 0, 1}. Предполагая, что сложение в машине осуществ- ляется в обратном коде, переходим к обратному мо- дифицированному коду для множимого и минус мно- । жимого [х]м0 =00.110110001, [—х]мо = 11.001001110. Для • множителя используем переход в избыточную двоич- ную систему: 00.000000000 00.000000000 И.001001110 11.001001110 11.111100100 00.110110001 100.110010101 I - t 00.110010110 ,00.011001011 11.001001110 11.100011001 11.111100011 00.110110001 100.110010100 I t 00.110010101 1,001100010. сдвиг на один разряд вправо вычитание множимого сдвиг на четыре разряда вправо прибавление множимого сдвиг вправо на один разряд вычитание множимого сдвиг на три разряда вправо прибавление множимого Окончательно {ху}3 ~ 0,110010101. Некоторые преимущества система с цифрами {—1, 0, 1} дает и при реализации операций деления и извлечения квадратного корня. Преобразование де- лимого в систему с цифрами {—1, 0, 1} позволяет 154
получить большие группы, состоящие из нулей. Далее- можно использовать прием сокращения деления, опи- санный' нами § 2.2. Задачи 1. В системе с цифрами {—1, 1}- записать числа (х)2 = 0,1101 и <^>г = 0,0111. Найти их сумму, разность и произведение. 2. Можно ли построить систему с цифрами {—1 и 1|, отли- чающуюся от системы, определяемой соотношением (2.1), кон- стантой? 3. Рассмотреть правила производства операций в двоичной квазиканонической системе счисления.
ГЛАВА ТРЕТЬЯ ДРУГИЕ СИСТЕМЫ СЧИСЛЕНИЯ С НАТУРАЛЬНЫМ ОСНОВАНИЕМ § 3.1. Троичные системы счисления Как было показано в § 1.9, троичная система счис- » ления представляет собой интерес среди других систем с натуральным основанием; Как следует из оценоч- ной функции F(S), введенной в § 1.9, троичная си- стема счисления дает наиболее экономное представ- ление числовой информации в вычислительной машине. Это утверждение справедливо лишь при выполнении '•условия, что в схемах вычислительной машины исполь- зуются элементы, имеющие три устойчивых состояния. В настоящее время подобные элементы, которые удов- летворяли бы проектировщиков по своим конструк- тивным параметрам, не существуют. Тем не менее уже созданы и выпускаются'серийно вычислительные ма- шины, работающие в троичной системе. В Советском Союзе такой машиной является серийная Машина «Сетунь». Несмотря на то что в таких машинах вместо одного троичного элемента используются два двоич- ных элемента, эти машины обладают определенными преимуществами перед двоичными машинами с точки зрения выполнения основных арифметических опера- ций. Возможны три канонические троичные системы: две смещенные с цифрами {0, 1, 2} и { — 2, —1, 0} и одна симметричная с цифрами {—1, 0, 1}. Рассмотрим сначала смещенные системы. В силу их полной идентичности по своим свойствам будем рассматривать лишь систему с цифрами {0, 1,2}. В этой системе представимы лишь положительные . числа. Для отрицательных чисел необходимо введение дополнительного или обратного кода. При этом для устранения возможных переполнений (нарушений нор- 159
мализации влево) при реализации сложения необходи- мо введение модифицированного дополнительного или обратного кода (см. § 1.4). Таблицы сложения без учета переноса и умножения в одном разряде для этой системы имеют вид: Сумма Произведение 0 1 2 0 1 2 0 0 1 2 0 0 0 ' 1 1 2 0(1) 0 1 2 2 2 0(1) 1(1) 0 2 1(1) В скобках указан перенос в старший разряд. Пример 3.1. Найти в смещенной троичной системе сумму, разность, произведение/ и частное чисел (х)ю = 5,7 и (j/)I0 = 201,4. Разрядная сетка машины имеет шесть разрядов, не считая знакового, форма представления естественная. Частное вычислить с точ- ностью до З"3. Для перевода десятичных чисел в троичный код используем универсальные алгоритмы, описанные в § 1.1. . _ 5 |3 0,7X3 = 2,1 _201 I 3 3 113. 0,1 X 3 = 0,3 201 67 I з — ”б 0,3 х 3 = 0,9 q 66 22 I 3 2 ° 0,9X3 = 2,7. 0 у-21 713 1 — 2 IJ- 1 0 0,4X3 =1,2 <х)3 = 12,2002, (у)з = 21110,1. В машину с естественным представлением эти-чис- ла будут записаны как (х)3 = 0,122002 и (_у)3 — 0,211101. При этом масштаб первого числа есть З2, а второго числа — З5. Для нахождения их суммы и разности программист должен уравнять их масштабы. Для этого первое из чисел записывается как (х)3 = 0,000122 с масштабом 3s. Теперь операции сложения и вычитания становятся возможными. При вычитании используем модифициро- ванный обратный код’ и 157
Имо = 00.000122 = 00.211101 Имо = 00.000122 [~_У]мо = 22.011121 [x-j]M0 = 22.100020 [x+j]M0 = 00.212000 Совпадение знакового и контрольного разрядов сви- детельствует об отсутствии переполнения'(х+_у)3 = = 0,212; <х — у)3 = — 0,122202. делитель 0,211101 00.122002 1 2 1 1 1 0 1 22.011121 з 22.210200- 1 00.112011 . 100.122001 J+ 1 00.122002 1 22.201112 100.100121 I_______i з '00.100122 1 22.201112 100.002011 J_______t , 00.002012 ’ 22.201112 j 22.210201- 1 00.021110 100.002011 I+ । 00.002012 1 22,220111 . i 22.222200- 1 00.002111 ’ 100.002011 I t I 00.002012 1 22.222011 100.001100 J t I 00.001101 1 22.2220Ц 0,2 0 2 сдвинутый сдвинутый сдвинутый делитель делитель делитель 0,021110 0,002111 0,000211 . 100.000112 4 J t m 00.000120 03 ' 22.222011 22.222201- — > =0,202. У /з 158.
Для нахождения произведения и частного исполь» зуем прямой код: [х]„ =0.122002 и [ у]п =0.211101. Зна- ки произведения и частного определяются на основа- нии операции Д. ОД0 = 0. к, 122002 *_211101_ 10210Д1 122002 122002 122002 + 000000 122002 112010221202 <ХУ)3 = 0,112011. Программист должен учесть, что сумма и разность, полученные машиной, имеют масштаб З5, произведе- ние — масштаб З7, а частное — масштаб З-3. . Из рассмотренного примера видно, что. смещенные троичные системы счисления менее эффективны', чем обычная двоичная система с цифрами {0,1}. Операция алгебраического сложения в этой системе не проще, чем в двоичной, а операции умножения и деления, поскольку они требуют либо специальных устройств для одноразрядного умножения, либо серии сложений или вычитаний для получения одной цифры, произве- дения или частного значительно сложнее, чем соот- ветствующие операции в двоичной системе. Поэтому смещенные троичные системы не применяются при построении вычислительных машин и вычислительных систем. Интерес к троичной системе проявляется в связи с тем, что эта система является минимальной (в смысле величины основания) системой,., в которой возможен симметричный выбор цифр при сохранении неизбыточ- ности системы. Именно в такой системе счисления работают те вычислительные машины, которые исполь- зуют для представления числовой информации и опе- раций над нею троичную систему счисления. Для симметричной троичной системы счисления справедливы все методы выполнения операций, опи- 159
Санные [нами в первой главе дЛя симметричных си- стем. Пример 3.2. Перевести числа (х)]0 = 6,1 и (_у)ю = = 0,002 в симметричную троичную систему, учитывая, что в машине используется полулогарифмическая фор- ма представления, в которой для записи порядков используется четыре разряда, а для записи мантисс — шесть разрядов. Найти в симметричной троичной системе (x+j)3, (х — у}3 и <<у)3. 6 | 3 6. 2 |_3 0 0 0,1 Х3 = о,3 0,3X3 = 0,9 0,9X3 = 2,7 0,7X3 = 2,1 0,002 X 3 = 0,006 • 0,006 x 3 = 0,018 0,018X3 = 0,054 0,054 X 3 = 0,162 0,162X3 = 0,486 0,486 X 3 “ 1,458 - Таким образом, в смещенной троичной системе (х)3= = 20,0022 и (_р)2 =-^0,000001. Для перехода к сим- метричной системе заменим цифру .2 на комбина- цию Г1 1Т0,0000 000,0000 000,0000 000,0000 000,0110 000,0011 110,0101 Переходя к нормализованному представлению в полулогарифмической форме, получим (х)3= 33*0,110010 и (_У)з = 35-0,10000, или (х)3 = 001010,11010 и (у}3 = = 002110,100000. Здесь слева от черты написаны порядки чисел, справа от черты — нормализованные мантиссы. Теперь находим сумму, разность и произведение (х)3 и <J>3. Для суммирования и вычитания увеличиваем порядок .у до порядка х. Тогда (у)3 = 001010,000000. Следовательно, и сумма и произведение (х)3 и (_у)3 совпадают с (х)3. 160
Для нахождения произведения суммируем порядки сомножителей + </\>з = 0010 <^>3 = 0021 <7^>з = °°Т1 Перемножаем мантиссы v 110010 Х 1^ 0110010 •Для устранения нарушения нормализации вправо сдвигаем мантиссу произведения влево на один раз- ряд и уменьшаем порядок на единицу. Окончательно (ху)3 = 00Т0 |0,1100.10. Рассмотрим правила деления для троичной симме- тричной системы. Общая схема алгоритма деления остается прежней и сводится к последовательному вычитанию сдвинутого делителя, умноженного на оче- редную цифру частного, из последнего полученного остатка. Очередная цифра частного определяется по следующему правилу: если остаток, полученный после очередного вычитания, с учетом сносимой цифры де- ;лимого содержит столько же цифр, что и делитель, то очередная цифра частного равна 1, если знаки остатка и делителя совпадают, и равна — 1 в против- ном случае. Если же остаток содержит после сноса очередной цифры делимого меньше цифр, чем дели- тель, то очередная цифра частного есть нуль. Сдвиг делителя происходит только при получении нулевой цифры в старшем разряде разности. До получения такой цифры единицы со своими, знаками подписы- ваются друг под другом в одном разряде частного (таких единиц может быть не более двух). После окон- чания деления частное представляется двумя троич- ными числами, подписанными друг под другом. Для получения окончательного ответа необходимо эта числа просуммировать. S-79.-11 161
Пример 3.3. Разделить число (х}3 = 0,1101 на число (.У)з = 0,1001. П01 I 1001 ~ 1201 !10001 _ 01000 Tool 0001000 “ 1001 0001 Окончательно /= 1,1000. X У / з . <х)з = 10ПОШ1 на Пример 3.4. Разделить число (^)з=111. 101101Г1Т ill 111 I—Ш________ - , 1001001 ,1001000 _ оооТоТ /л_\ =йоТ1оо1 111 \ У /г _ 111 111 _ 000111 111 000 Отметим общие достоинства симметричной троич- ной системы счисления. Будучи по своим характе- ристикам не намного сложнее двоичной системы счис- ления, симметричная троичная система требует мень- шего расхода оборудования для представления данного диапазона чисел по сравнению с двоичной системой. Отсутствие необходимости введения специальных ко- дов для отрицательных чисел существенно сокращает время, необходимое для производства операций в машине. Практически единственным усложнением, ха- рактерным для рассматриваемой системы счисления, является малое удобство операции деления. Однако, так как процент операции деления для универсальных машин невелик (около 2% от общего числа машин- 162
ных операций), то с этим недостатком можно вполне примириться. Препятствия, стоящие на пути использования троич- ных систем счисления в вычислительных машинах,-— это препятствия технического порядка. До сих пор еще не создано экономичных и. эффективных в рабо- те элементов с тремя устойчивыми состояниями. Как только такие элементы будут созданы, по-видимому, большинство вычислительных машин универсального типа и многие специализированные машины будут проектироваться так, чтобы они работали в симме- тричной троичной системе счисления. Задачи 1. Найти сумму, разность и произведение чисел <х)10 = 0,56. и = —0,28 в троичной’системе с цифрами |—2, —1, 0|. Для представления использовать шесть разрядов, кроме знакового и контрольного. Сложение и вычитание выполнить в модифициро- ванном дополнительном коде. 2. Разделить число 0,11011 на число 0,11101. Исходные числа заданы в симметричной троичной системе счисления. 3. Сформулировать общие правила деления для симметричных канонических систем. §3.2. Системы счисления с.основанием 2г Системы счисления, основание которых представ- ляет целую степень Двойки, представляют определен- ный интерес в связи с наличием у них свойства про- стого перевода записи чисел в этих системах в двоич- ную запись. Это свойство характеризуется следую- щей теоремой. Теорема 3.1. Для перевода записи любого числа х из системы счисления с основанием 21 в двоичную си- стему необходимо записать каждую цифру системы 21 ее двоичным кодом в I двоичных разрядах.' Доказательство. Заметим, что м {х)4^ X [(«Л(2У; L, Л1>0, k=-L причем 0 < (ау) < 21. Так как число различных цифр в - системе с основанием 21 равно 2\ то при использова- 11* . - 133
НИИ двоичной записи в I двоичных разрядах можно. записать двоичным кодом все 21 цифр исходной систе- мы счисления. Произведем такую замену М 1-1 • W/- S (S WU-2'К. k=—L r=0 или М 1—1 = S s [(Шь,-2Й+'. й=—L г=0 Положим lk + r—q. При k = — L, г = 0,- q = — lL, а при k — M, r=l — 1, q = lM+ 1—1. Окончательно IM+l-l q——lL Пример 3.5. Перевести число (x)s = 57,201 в двоич- ную систему. Для перевода запишем цифры восьмиричной систе- мы в трех разрядах их двоичным кодом (0) = (000), (2) = (010), (4) = (100), (6) = (110), (1) = (001), (3) = (011), (5) = (101), (7) = (111). Заменяем восьмиричные цифры в записи числа их . двоичными эквивалентами. Получим (х)2= 101111,010000001. Для проверки полученного результата переведем на основании (1.1) восьмиричную и двоичную записи исходного числа в десятичный код 5-8 + 7-8° + 2-8-1 + 0«8~2 + 1.8~3 = 47 — ; > 512 1 -25 + 0-24 + 1-23 + 1 -22 + 1-21 + 1 -2° + 0-2-1 + + Ь2“2 + 0-2~3 + 0-2“4 + 0-275 + 0-2“6 + + 0-2~7 + 0-2~8 + 1*2-э = 47— . 512 - Таким образом, перевод числа, записанного в системе • счисления с основанием 2\ сводится лишь к замене каждой цифры в исходной записи ее двоичным экви- 164
валентом. Именно простота перевода в двоичную систему счисления является причиной того, что в современных вычислительных машинах для ввода информации в машину используют, как правило, не десятичную систему счисления, а восьмиричную или шестнадцатиричную запись чисел. Связано это с тем, что ввод информации в машину непосредственно в двоичном коде явно нецелесообразен. Несмотря на то что при таком вводе машина не теряет времени на переработку вводимой информации, большой эко- номии машинного времени при таком способе не полу- чается. Это связано с большими затратами времени на ручное кодирование исходной информации в двоич- ном коде, порождающем огромную массу трудно обнаруживаемых ошибок. Практически человек не в состоянии работать с длинными .двоичными кодами, записанными в виде больших массивов. В связи с этим вся вводимая в машину информация должна быть представлена каким-либо более удобным для человека кодом. Таким кодом для ..программиста, очевидно, является десятичная запись всей вводимой информа- ции. Однако, удобная для человека, эта запись отни- мает у машины, работающей в двоичной системе счисления, весьма много времени на перевод десятич- ной информации в двоичный код. При таком переводе часто используется операция деления, которая резко снижает точность результата. Вместо операции целения стремятся использовать операцию умножения и сдвиги, но при большом числе таких операций точность результата также не слиш- ком высока. Системы счисления с основанием 21 представляют собой компромиссное решение. С одной стороны, эти системы более удобны для человека, так как, напри- мер, восьмиричная' запись чисел весьма близка к десятичной записи. С другой стороны, перевод из этих систем в двоичный код практически не требует ма- шинного времени и дает точный результат. Замена цифр системы с основанием 21 их двоичными эквива- лента-ми осуществляется схемным путем, и результат записывается в память машины одновременно с вводом соответствующей цифры в исходной системе счис- ления. 165
Для ввода информации в машину практически используются восьмиричная и шестнадцатиричная системы счисления.-- Четверичная система дает еще слишком длинные и однообразные- записи чисел, а тридцатидвухричная система имеет слишком много цифр и поэтому неудобна для программиста. Существует несколько вычислительных машин,-для которых система счисления с основанием 2г является внутренней системой, в которой работает машина. Так, например, машины «Атлас» и «Бендикс G-20» работают в восьмиричной системе счисления, а машина «Телефункен Т-4» — в шестнадцатиричнбй системе счисления. ч Для обратного перевода информации из систем с основанием S = 21 в десятичную систему (при выдаче информации из вычислительных машин) в hhxj исполь- зуются специальные алгоритмы перевода. Необходи- мость в таких алгоритмах связана с тем, что универ- сальный алгоритм перевода, описанный нами в § 1.1, весьма громоздок и требует выполнения большого числа операций в системе счисления с основани- ем 21. Системы счисления с основанием, являющимся сте- пенью двойки, могут быть использованы для повы- шения точности вычислений на вычислительных маши- нах. Правомочность этого утверждения вытекает из следующих соображений. Пусть некоторое двоичное число записано с высокой степенью точности и для этой записи использовано т ячеек памяти машины. Обозначим через dt группу разрядов числа х, запи- санную в i-ю ячейку памяти. При этом —1. Через k обозначим количество разрядов в разрядной сетке (ячейке памяти) машины. Тогда т—1 х = ^dfi1. i=0 Здесь R = 2k может рассматриваться как новое основание системы счисления, a dl — как цифры запи- си числа х в этой системе счисления. Ясно, что пере- ход от двоичной системы к системе с основанием 2й можно рассматривать как средство, позволяющее увеличить точность представления чисел в машине. 1€б
При этом использование т ячеек памяти совсем не- обязательно. При записи двоичного числа в одной ячейке памяти может быть получено увеличение скорости вычисле- ний при переходе к системе счисления с основанием 2*. Правда, в последнем случае это возможно лишь при полулогарифмической форме представления инфор- маций в вычислительной машине. В этом случае мантисса числа представляется в обычной двоичной системе, а порядок считается запи- санным в системе счисления с основанием 2ft. Мантис- са считается нормализованной, если она по модулю меньше единицы, но не меньше 2~6. Таким приемном удается избежать большого числа нормализаций ре- зультирующей мантиссы, что приводит к большей точности вычислений на машинах. При существующих ограничениях на длину разрядной сетки в машине для представления мантисс ,(20—30 двоичных разрядов) невыгодно выбирать большое значение k, так как при большом k полулогарифмическая форма представления становится малоэффективной из-за того,- что почти все числа оказываются нормализованными и диапазон от- носительной погрешности растет. Наиболее разумны значения k, лежащие в пределах от 3 до 5, что соот- ветствует использованию в качестве основания систе- мы счисления значений 8, 16 и 32. 7 - Переход на такое представление чисел в машинах с полулогарифмической формой представления число- вой информации приводит к заметному повышению производительности за счет уменьшения процента операций типа сдвиг мантиссы влево и уменьшения порядков. По данным статистики такие операции составляют около 9% от общего числа операций, выполняемых вычислительной-машиной универсального типа при работе в режиме с -плавающей запятой. Пример 3.6. При Л = 4 найти сумму двух чисел (х)2 = 24-0,11011101 и (у)2 = 26.0,11010010. При переходе на шестнадцатиричные порядки по- лучаем <х)2/6 = 24’ -0,11011101 и <У>2/6 = 242-0,00110100. При таком переходе обе мантиссы нормализованы, ибо по модулю они заключены в Диапазоне от 167
до 1 без включения 1. Два крайних правых разряда числа у исчезли при сдвиге мантиссы этого числа на два разряда вправо. Для реализации сложения урав- ниваем порядки, увеличивая меньший порядок до большего. Так как разница порядков равна в нашем случае единице, то мантисса тх сдвигается вправо на четыре разряда z ,0.00001101 * 0.00110100 0.01000001 Результирующая мантисса является нормализованной. £сли бы была использована обычная двоичная система, те, как нетрудно видеть, результирующая мантисса имела бы нарушение нормализации влево, что привело ёы к необходимости затраты машинного времени на сдвиг результирующей мантиссы на один разряд вправо и на увеличение порядка результата на одну единицу. Оценим тот выигрыш во времени, к которому при- водит использование записи двоичного числа в системе счисления с основанием 2ft для порядков и сохране- нием двоичной записи для мантисс. Разобьем полное время операции * на два слагае- мых, первое из которых есть время, затрачиваемое непосредственно на операцию сложения, а второе — время, затрачиваемое на нормализацию результата» При этом для последовательности из I операций Л = /(1 — р — q) /-сел и п т2 = 1^ (Pi + qi)Ka. i=l Здесь t есть отношение времени суммирования к времени сдвига" в данном сумматоре; pt и ^—ве- роятности выполнения операции выравнивания поряд- ков и нормализации на i порядков (0 < i < п); р — ве- роятность того, что разность порядков слагаемых такова, что при выравнивании порядков мантисса * Под операцией понимается либо одно сложение или вычи- тание, либо один шаг в операции умножения или деления. 168
числа с меньшим порядком при сдвиге вправо дает машинный нуль; q — вероятность того, что одно из •слагаемых равно нулю. Если используется представление порядка в системе € основанием 2ft, то время выполнения I операций есть п Tk = 1 {(1 ~Р “ я) * + J] (Pi + 1=1 Здесь — означает целую часть числа —. Это соот- L k J k ношение справедливо в предположении, что переход к системе с основанием_26 исключает необходимость нормализации вправо и выравнивание порядков и нор- мализацию влево на 1, 2, , Л—1 разряд. Последнее предположение приводит к тому, что при г > Л умень- шение времени нормализаций числа при переходе к представлению порядков в системе с основанием 2* таково, что это время уменьшается на величину Выбор оптимально- го значения k проис- ходит в соответствии с исследованием пове- дения функции v(A) = ^-100%, т которая показывает, во сколько раз проис- ходит уменьшение времени выполнения последовательности из I операций при пере- ходе от двоичного представления к пред- ставлению рассматри- ваемого типа. Поведение этой функции существенно класса задач, так как оно предопределяется средними зависит от рассматриваемого
значениями pt, q^pvt q, характерными для атих задач» На рис. 3.1 показаны графики, отражающие общий вид функции v(&) для случая, когда в качестве решае- мых на машине задач рассматривались задачи числен- ного решения уравнений в частных производных. Как видно из этих графиков, значение А = 4, например, является оптимальным, так как для всех программ оно дает экономию более чем в два раза. Усреднение по пока- занным на рис. 3.1 программам дает при k = 4 экономию во вре- мени в 2,5 раза. На рис. 3.2 для тех же пяти программ приведены кривые, по- казывающие влияние отдельных составляю- щих времени опера- ции на общее время операции. Если при обычном двоичном представлении (А='1) основное время уходит на операцию нормализации, то при А = 4 общее время операции в основном со- стоит из времени непосредственного суммирования. Для четырех программ из пяти,, исследовавшихся на машине, время нормализации составило лишь 50% от Ъбщего числа времени операции. Полученная оценка является завышенной, так как мы исключили из рассмотрения необходимость норма- лизации результата вправо, что возможно и при пере- ходе к представлению порядков по основанию 2fe. Однако это завышение не является существенным, и результаты оценки функции v (k) практически пра- вильно отражают описываемый процесс. Для реализации описанной методики выполнения операций необходимо ввести некоторое дополнитель- ное оборудование. Если при сдвиге вправо мы теряем разряды мантиссы, то при последующем сдвиге влево ошибка из младшего разряда мантиссы может пере- меститься в старшие разряды и стать весьма большой. 370
Для устранения этой неприятности необходимо при переходе к представлению порядков в системе счис- ления с основанием 2й добавить к мантиссе справа k дополнительных разрядов. Однако рост длины раз- рядной сетки на представление числа выражается не линейной функцией p(k) = k, а представляет собой функцию, показанную на рис. 3.3. . Объясняется это тем, что при переходе записи порядков -в системе счисления с основанием 2й число разрядов, отводимых для хранения порядков чисел, при сохранении диапа- зона представления чисел становится меньшим и выс- вобождающиеся разряды могут быть использованы в качестве допол- нительных для запщ си мантиссы числа. Поясним это на при- мере. Пусть в дво- ичной системе для записи порядков ис- пользовалось пять разрядов. Если те- перь порядки запи- сываются в шест- надцатиричной сис- теме, то для сохра- нения того же диа- пазона изменения порядков 2-31, 231 достаточно всего двух разрядов, ибо диапазон 16-3, 163 перекрывает диапазон, используемый при двоичном представлении. Освободившийся разряд порядка может быть исполь- зован для записи мантиссы. Введем оценочную функцию показывающую, во сколько раз уменьшается время выполнения операции сложения на один разряд допол- нительного оборудования. График этой функции строится на основе графиков функций v(k) и Он приведен на рис. 3.4. В Качестве оптимальных значений k, как видно из этого графика, следует при- нять £ — 2,4. Из. этих значений & = 4 более предпоч- 171
тительно, так как оно при двух дополнительных раз- рядах обеспечивает более существенное ускорение операции сложения. Некоторые трудности вызывает описанное пред- ставление чисел при реализации операции деления. Так как сдвиг влево и вправо происходит сразу на k разрядов, то возможность получения целой части частного становится нежелательной. Для устранения такой. возможности можно путем предва- рительной проверки мантисс делимого и делителя выяснить, какая из мантисс боль- ше. Если мантисса де- лимого не меньше ман- тиссы делителя (по абсолютной величине), то необходимо изме- нить мантиссу делимо- го с помощью сдвига ее вправо на k разрядов с соответствующим измене- нием порядка делимого. Пример 3.7. Разделить число (х)216= 162-0,11010110 на -число (j)2(16= 161-0,00111100. Для осуществления деления сравниваем между собой величины мантисс. Для этого вычитаем модуль мантиссы делителя из модуля мантиссы делимого. Вычитание заменяем сложением в модифицированном дополнительном коде 00111010110 ^[-^]мд = 11.11000100 .00.10011010 Положительный результат вычитания свидетель- ствует о том, что мантисса делимого больше ман- тиссы делителя. Поэтому преобразуем число х сле- дующим образом: (х)2,16=163-0<000011010110. Правые четыре разряда при этом не теряются, так как для их представления имеются дополнительные разряды, 172 • • ' '
о которых речь шла выше. Дальнейшее деление совершается по обычным правилам при условии, что все сдвиги происходят сразу на четыре разряда. Задачи 1. Найти сумму и произведение чисел <л)10 = 56.4 и <_у)10=—1,25 в системе счисления с основанием 32, использовав для представ- ления чисел полулогарифмическую форму, в которой для записи порядка отведено два разряда, а для записи мантисс — 20 разрядов. 2. <%>2/4 = 4s-0,1100111000, <у>2/4 = 44-0,1111000101. Найти их частное в четверичной системе.
Глава четвертая СИСТЕМЫ СЧИСЛЕНИЯ С ОСНОВАНИЕМ, НЕ ЯВЛЯЮЩИМСЯ НАТУРАЛЬНЫМ ЧИСЛОМ § 4.1, Системы счисления с отрицательным целым основанием В этом и следующем параграфах мы рассмотрим проблему использования в вычислительных машинах .систем счисления естественного типа, основание ко- торых не является ' натуральным числом. Обладая рядом специфических черт, такие системы в некото- рых случаях могут оказаться более эффективными, ? нежели канонические системы счисления. Будем предполагать, что основание системы счис» ления есть целое отрицательное число R (R < 0). Потребуем, чтобы для рассматриваемых систем вы- полнялось соотношение, аналогичное соотношению (1.1) для систем с натуральным основанием, —оо *= S IW- i=+oo (4Л) Выполнение требований однозначности, конечности и эффективности представления чисел в рассматри- ваемой системе счисления определяется следующими теоремами, приводимыми нами без доказательств. ТеореМа 4.1. В системе счисления с основанием R < — 1 и цифрами {0,-1, — 2,1} можно представить любое действительное число в виде раз- ложения (4.1). 174
Теорема 4.2. Если, некоторое число представляется в системе счисления с отрицательным целочисленным основанием конечным образом, то его представление в виде (4.1) является единственным. Теорема 4.3. Неединственным образом в данной системе с отрицательным основанием R представ- ляются только числа вида z-=^T^T+r'^+1’ (4-2) где 7 = ± 1, аги k —любые целые числа. Эти числа имеют два различных бесконечных ^представления вида (4.1). Доказательство теорем Jпредоставляется провести читателям. Опишем правила перевода чисел в систему счисле- , ния с отрицательным основанием /?. Общий алгоритм перевода целых чисел посредством последователь- ного деления на основание системы счисления и пере- вода дробных чисел посредством последовательного умножения на основание системы, построенный нами для канонических систем счисления, пригоден после некоторого изменения и для перевода чисел в систему счисления с отрицательным основанием. Это измене- ние связано с тем, что при использовании последова- тельного деления все- остатки должны быть положи- тельными числами, меньшими R. При умножении аналогичное требование предъявляется к целым частям получаемых произведений. Для выполнения этого требования в случае перевода целых чисел при нали- чии отрицательного делимого и отрицательного дели- теля к частному, получающемуся на некотором шаге деления, прибавляется единица. В случае перевода дробных чисел дробная часть, используемая на каж- дом шаге перевода, должна удовлетворять условию* 1*1 <• 1 Л <• 1 1Я1 + 1 1«| + 1 * (4.3) * Здесь (х) означает дробную часть числа х. 175
Для выполнения требования (4.3) необходимо на каж- дом шаге перевода производить соответствующее преобразование оставшейся дробной части так, чтобы она удовлетворяла этому требованию. Пример 4.1. Перевести число (х)10 = 302 в систему счисления с основанием /? = —4. 302 | —4 300 —75 I 2 76 1Q | -4 1 16 _4 [-4 3 ~4 1 I ~4 0 0 <х>_4 = 10312. Пример 4.2. Перевести (х)10 == 0,89 в систему счис- ления с основанием —4. Для минус четверичной системы соотношение (4.3) 'имеет вид —0,8 < {х} < 0,2. Так как исходное число не удовлетворяет этому ограничению, то представ- ляем его в виде числа 1—0,11. Далее используем правила перевода дробных чисел с помощью после- довательного умножения, проверяя на каждом шаге выполнение ограничений для дробной части произве- дения и корректируя эту дробную часть, когда огра- ничения не выполняются. - х-°^| . 0,44 ограничения не выполнены v 1—0,56 х —4 - 2,24 ограничения не выполнены ..3—0,76 х —4 3,04 ограничения выполнены „ 3 0,04 х —4 —0,16 ограничения выполнены 176
s. О—0,16 х —4 0,64 ограничения не..выполнены 1—0,36 И. Т. Д. Окончательно (4-4 ~ 1,13301. Пример 4.3. Перевести число (4ю = — 21,2 в систе- му счисления с основанием R — — 9. Перевод целой и дробной части осуществляем раздельно —21 |—9 _з I—9 6 о Отсюда <—21>10 = <36)_д. Соотношение (4.3) для минус девятиричной системы имеет вид — 0,9 < (4 <0,1. Тогда X 0,2 1—0,8 —9 ограничения не выполнены X 7,2 8—0,8 -9 ограничения не выполнены 7,2 8—0,8 ограничения не выполнены и т. д. Окончательный ответ (х)_9 = 37,888 ... — 38. При переводе дробной части числа можно прене- бречь проверкой выполнения ограничения (4.3). Однако в этом случае целые части получаемых произведений могут получаться отрицательными. Для приведения их к положительным значениям заметим, что для любой отрицательной цифры а имеет место соотно- шение а=1(— R — а). Таким образом, при получении отрицательных целых частей в произведении следует в данном разряде писать цифру, дополняющую полу- ченную до — R, а в соседний левый разряд прибав- лять единицу, учитывая возможный перенос из этого разряда в более старшие разряды записи числа. Б-79,—12 . 177
Пример 4.4. Перевести по описанному способу в систему с основанием —4 число (х)10 = 0,89. ,.0,89 Х —4 —3,56 v И —0,56 . 2?24 v 2 0,24 х —4 —0,96 v 10—0,96 » ' 3,84 И Т. Д. Окончательный ответ (х)_4—1,1303. Можно рассмотреть другой подход к проблеме перевода чисел в систему счисления с отрицательным основанием. Преобразуем соотношение (4.1) следую- щим образом —оо *= S (- 1У[Ц)Ъ1Я1г. В соответствии с этим будем считать, что число л представлено в системе счисления с положительным основанием |х| и цифрами (0, ±1, ± 2, ... , ± |/?| — 1). Такая система является избыточной системой. Введем условие, что положительные значения цифр могут быть использованы в записи числа только в разрядах с четными номерами. (включая нулевой разряд), а отрицательные эквиваленты цифр могут быть исполь- зованы лишь в разрядах с нечетными номерами. В этом случае при последовательном делении на |/?| необходимо, чтобы первый остаток от деления был бы положительным, следующий — отрицательным, сле- дующий — снова положительным и т. д. При переводе дробных частей исходного числа первая целая часть произведения должна быть отрицательной, следую- щая — положительной, следующая — снова отрицатель- ной и т. д. При этом дробные части, получаемые в процессе последовательного умножения на |/?|, должны попеременно удовлетворять двум ограниче- ниям. Исходное число должно удовлетворять ограни- 178
чению (4.3), дробная часть, полученная после первого шага, ограничению вида < {Л} < —LEJ— . (4.4) |Я| + 1 ' ' |7?| + 1 к ’ следующая дробная часть — снова огр'аничению (4.3) и т. д. Прчмер 4.5. Перевести в систему счисления с ос- нованием — 4 десятичное число 27,89 с помощью метода перехода к системе с положительным Основа- нием и введением системы избыточных цифр. Как уже указывалось выше, для системы счисления с основанием —4 соотношение (4.3) имеет вид — 0,8 < {%} <0,2. Поэтому преобразуем исходное число в число 28—0,11. Далее в соответствии с вышеописанными правилами осуществляем перевод целой и дробной части полученного числа 28 I 4 ~28 |__ 0 _7 I 4 0 <28>10 = <210>_4 ’ —0,11 удовлетворяет (4.3) 2 4 —0,44 —1+0,56 удовлетворяет (4.4) 2,24 v 3—0,76 удовлетворяет (4.3) 2 4 ' —3.04 v—3—0,04 удовлетворяет (4.4) х . 4 —0,16 у. 0—0,16 удовлетворяет (4.3) 2 4 —0,64 —1+0,36 удовлетворяет (4.4) И Т. Д. Окончательный ответ (4-4 — 210,13301. 12* 179
При автоматическом переводе на вычислительной машине второй способ перевода,-использующий пере- ход к избыточной системе с положительным основанием, в ряде случаев может оказаться весьма перспективным» Укажем, наконец, еще на один способ перевода чисел в систему счисления с основанием R, который пригоден, если известно кодирование этого же числа в системе счисления с основанием | R |. Обозначим через и fe; цифры i-ro разряда в записи числа в системах счисления с основанием |/?| и R соответ- ственно. Тогда для положительного''числа х правила перевода имеют следующий простой вид [(М = [Ц)Ь для четных I и [ад=[(п]г+1+к|/?1- «э]г для нечетных i. Для отрицательного числа х эти правила для чет- ных и нечетных i соответственно таковы: [«=[d)ki + КI я I - «Д и [(fey)L=[(а,)]г. Если (fly) = 0, то (fey) = 0 независимо от номера I. Пример 4.6. Перевести числа (x)w = 0,2407 и (у)ю = 4762 в систему счисления с основанием R = - 10. Так как переводимые числа положительны, то по- следовательно получаем для первого числа (2)ю = (18)_io> (2О1о = (4)_ю, (0)ю=(0)_ю, (7)10=(7)_10. Окончательно (х)_]0= 1;8407. Для второго числа' (2)10 = (2)_10, (6)10 = (14)_10, (7)10 = (7)_10, (4)10=(16)_10 и (у)_10 = 16842. Пример 4.7. Перевести число (х)6 = — 20541 в систему счисления с основанием —6. Так как данное число отрицательно, то получаем последовательно .(1)6 = (15)_6, (4)6 = (4)_6, (5)6==(11)_6, (0)_6, (2)6 = (14)_6. Окончательно (х)_6 = 141155. Рассмотрим теперь выполнение ' арифметических' операций в системах счисления с отрицательным ос-. 180
кованием. Рассмотрение начнем с операции сложения- вычитания. При выполнении алгебраического сложе- ния правила образования суммы в данном разряде и переноса в старший разряд имеют вид Л+1 — pz + yz + /л L 1ЯГ и Здесь xt и yt означают значения цифр г-м разряде суммируемых чисел, а квадратные скобки в формуле для переноса означают ‘ближайшее меньшее целое число с учетом знака (например, [— 0,7] = — 1). Таким образом, в системах с отрицательным основанием значение переноса в соседний разряд может принимать три различных значения —1, 0 и 1. Вышеприведенные соотношения позволяют строить правила сложения для любого значения R и реализовать это сложение. Пример 4.8. Найти сумму чисел (х}_5 = 4012 и (у)_5 = 1003. Правила сложения для одного разряда в системе счис- ления с основанием — 5 выглядят следующим образом. Таблица 4.1 Pi xi yt si Pi+1 Pi xl >z st Pi+i 0 0 0 0 0 1 2 3 1 —1 0 0 1 1 0 1 2 4 2 —1 0 0 2 2 0 1 3 3 2 —1 0 0 3 3 0 1 3 4 3 -1 0 0 4 4 0 1 4 4 4 —1 0 1 1 2 0 —1 0 0 4 1 0 1 2 3 0 —1 0 1 0 • 0 0 1 3 4 0 -1 JO 3 2 0 0 1 4 0 —1 •» —1 0 3 2 0 0 2 2 4 0 —1 0 4 3 0 0 2 3 0 —1 —1 1 1 1 0 0 2 4 1 ^1 —1 1 2 2 0 0 3 3 1 —1 —1 1 3 3 0 0 3 4 2 —1 —1 1 4 4 0 0 4 4 3 —1 —1 2 2 3 - 0 1 1 1 3 0 —1 2 3 4 0 1 1 2 4 0 —1 2 4 0 —1 1 1 3 0 —1 —1 3 3 0 —1 1 1 4 1 —1 —1 3 4 1 —1 1 2 - 2 0 —1 —1 4 4 2 -1 181
Используя эти правила, находим сумму данных чисел » ,4012 - *"1003 140000 Для проверки правильности ответа воспользуемся -соотношением (4.1) х = 4• (- 5)3 + 0• (- 5)2 + 1 • (—5)1 +^2 (- 5)° == - 503; у = 1 •(- 5)3Н 0-(— 5)2 + О-(-Ъ)1 +]3• (-5)° = -122; х +>1 •(- 5)s + 4- (-’5)4 + 0-(-5)3 + . + 0-(-’5)2 +’0-(-5)4 +0.(-:5)°= -625. v Пример 4.9. Найти разность чисел (х)_5 = 0,4012 •и (у)_5 = 0,103. Для нахождения разности запишем число —у в системе счисления с основанием —5. Для этого воспользуемся описанным выше алгорит- мом’ перевода: у = 1-(—5)-1 + 0-(— 5)-2 +3-(—5)-3== e2S == —— = — 0,224. Соотношение (4.3) для минус пяти- 125 5 1 ричной системы имеет вид— — <{%}<—:. Используя 6 6 его при умножении исходного числа на —5, получаем последовательно число 1,412, код которого соответ- ствует искомому коду числа 0,224 в минус пятирич- ной системе счисления. Далее производим сложение кодов .0,4012 '• 14120 0,3132 Окончательный ответ (х—у}_5 = 0,3132.| Для проверки правильности результата используем соотношение (4.1) - х ==4-(—5)-1 + 0-(—5)-2 4-1-(-5)“3 + + 2-(-5)“4= ——; — ; ' 625 Л 625 у = 3 • (- 5)-1 + 1 • (- 5)"2 + 3 • (- 5)-3 + + 2-(—5)-4 = ——. ' 625 182
Операция умножения выполняется обычным обра- зом с помощью использования таблицы умножения в одном разряде и правил сложения. Пример 4.10. Найти произведение чисел (x)_s — 0,203 и (у)_5 = 0,132. Таблица умножения в одном разряде для минус пятиричной системы имеет следующий вид. Табл иц.а 4.2 0 1 2 3 4 0 0 0 0 0 0 1 0 1 2 3 4 2 0 2 4 -1,1 -1,3 3 0 3 -1,1 —1,4 -2,2 4 0 4 —1,3 —2,2 —3,1 Как следует из этой таблицы, при умножении возможны положительные и отрицательные переносы в соседний разряд, причем в отличие от сложения отрицательные переносы могут принимать не только значение, равное — 1, а и значения, равные —-2 и —3. Поэтому необходимо расширить таблицу сложения, рассмотренную в примере (4.8), .для случая, когда одно из слагаемых принимает значение —2 или — 3. Отрицательных переносов можно избежать, если пред- положить, что переносы могут осуществляться не только в соседний левый разряд, но и в соседний, с ним разряд. Тогда, учитывая, что — 1 = 14, — 2 = 13 и —3 = 12, мы получаем возможность оперировать только с положительными переносами v 203 - 132 14041 + 14244 203 010131 Окончательный ответ (ху)_5 = 10131. 183
Умея производить операции умножения и сложения, можно для данного кода числа х в системе счисления с отрицательным основанием R находить код числа — х в этой системе, не производя вычислений с помощью описанного выше алгоритма перевода. Метод построе- ния кода числа — х по коду числа х следует из соотношения (4.4): — х — (— R — 1) х + Rx. Пример 4.11. По коду числа (х)_6 0,105 найти код числа —Л’. Для решения задачи воспользуемся соотношением (4.4) — х = 5х + (— 6) л v 105 , 15,021 Л 5 1,05 15021 1 511 Правильность результатов может быть проверена на основании соотношения (4.1) • х = 1. (_ er1 + о- (- б)-2 + 5.(- б)-3 ~ ; Z1O -х = 1.(-6)° + 5.(-6)-1 + + 1-(-6Г2 + 1-(-6)-3 = ^.. 21о Рассмотрим более подробно систему счисления с основанием R = — 2. В такой системе счисления подобно двоичной канонической системе имеются лишь две различные цифры 0 и 1. Таким образом, система счисления с.основанием —2 может быть реализована при использовании обычных элементов памяти и ло- гических элементов, используемых при конструирова- нии двоичных машин. В нижеследующей таблице приведено кодирование нескольких первых целых положительных и отрица- тельных чисел в системе с основанием —2.. Это ко- дирование найдено с помощью вышеописанного ме- тода перевода целых чисел в систему счисления с ос- нованием R <—1. 184 .
Таблица 4.3 разряда Число 16 —8 4 —2 1 0 0 0 0 0 0 1 0 0 0 0 1 2 0 0 1 1 0 - 3 0 0. 1 1 1 4 0 0 1 0 0 5 0 0 1 0 1 6 1 1 0 1 0 7 1 1 0 1 1 8 1 1 0 0 0 9 1 1 0 0 1 —1 0 0 0 1 1 —2 0 0 0 1 0 —3 0 1 1 0 1 —4 0 1 *1 0 0 -5. 0 1 1 1 1 —6 0 1 1 1 0 —7 0 1 0 0 1 —8 0 1 0 0 0 —9 0 1 0 1 1 Эта таблица еще раз указывает на одно из преиму- ществ системы счисления с отрицательным основанием. Положительные и отрицательные числа в таких сис- темах, как и в симметричных канонических системах,, представляются естественным образом без использова- ния специальных знаковых разрядов и кодов. Для минус двоичной системы правила перевода из двоичной системы и обратно особенно просты. Для положительных х эти правила имеют вид: для четных разрядов цифры сохраняются без изменений, а для нечетных разрядов при наличии единицы в-системе с основанием 2 и системе с основанием —2 имеем 11, где левая единица прибавляется к содержимому сосед- него левого разряда в записи числа в системе R— — 2. Для отрицательных чисел х эти правила сохраняются с заменой правил для четных разрядов на правила для нечетных разрядов, и наоборот. В более компактной форме правила перевода из двоичной системы счисления в систему с основа- нием — 2 могут быть сформулированы следующим образом. 185-
Для положительных чисел х: 1) под данным числом подписывается число, у ко- торого в четных разрядах пишутся единицы, если в соседнем справа разряде у исходного числа имеется единица; 2) полученные числа суммируются по правилам сложения в системе с основанием —2. Для отрицательных чисел х эти правила имеют вид: 1) под данным числом подписывается число, у ко- торого в нечетных разрядах пишутся единицы, если в соседнем справа разряде у исходного числа имеется единица; 2) полученные числа суммируются по правилам сложения в системе с основанием —2. Пример 4.12. Перевести числа (х)2— —1101011 и {у}<г = 1001011 в систему счисления с основанием — 2. Для использования вышеописанного метода соста- вим сначала таблицу, определяющую правила сложе- ния в системе счисления с основанием —2. ,01101011 ,1001011 10000010 0010100 10010101 101Ш1 л Для системы с R = — 2 упрощается и соотноше- ние (4.4), дающее правила перехода от кода положи- тельного числа х к коду отрицательного числа —х. В рассматриваемом случае соотношение (4.4) прини- мает вид'" — х = х + 2х. 186
Таким образом, для получения в минус двоичной системе кода отрицательного числа достаточно сдви- нуть на один разряд влево код положительного числа и прибавить к нему несдвинутый код этого же числа. Пример 4.13. По коду (л)_2 = 0,1101С01 найти код числа —л. В соответствии с вышесказанным получаем гт_ 1,1010010 0,1101001 <—л)_2^ 0,01 ПОП Для проверки используем соотношение (4.1) х = 1 • (- 2)"1 -Ь 1 • (- 2)“2 + 0 • (- 2)“3 + 1 • (- 2)“4 + + о.(_ 2Г5 + о-(- 2Г6 + 1. (- 2)-7 = -4=0-(-2)-1 + Н-2)~г 4- 1-(—2)-3'+!•(—2)-4-Ь + 0 • (- 2)~5 + 1 • (- 2)~е + 1 • (- 2)-7 = Л-. 12о Отметим, что при сложении перенос, равный —1, может быть заменен переносами единиц в два сосед- них разряда справа от данного разряда. Пример 4.14. Найти разность чисел (л)2 = 0,1101 и (у)2 = — 0,0010 в минус двоичной системе счисления. Переведем данные двоичные числа в систему счисления /? = —2. При этом вместо кода числа убу- дем искать код числа —у, так как вычитание в ми- нус двоичной системе заменяется сложением с заме- ной знака вычитаемого на противоположный. ,0.1101 ,0,0010 1,0000 0,0100 <л)_2 = 1,1101" (у)_2 = о,опо Далее осуществляем сложение по вышеприведеи* ным правилам , 1,1101 ^0,0110 (х — у)_2= 1,0011 Операция умножения в минус двоичной системе организуется так же, как в обычной двоичной систе- ме. Таблица умножения этих систем одинакова, и об- 187
щая схема умножения, показанная на рис. 2.1, остает- ся прежней. Единственное отличие состоит в том, что сумматор на этой схеме является сумматором, рабо- тающим по правилам сложения в системе счисления с основанием — 2. Пример 4.15. Найти произведение чисел (л:)_2=0,1101 и. <у)_2= 1,0010. v 1101 Л 10010 0000 1101 + 0000 0000 - * 1101 00101010 Окончательный ответ (ху)_2 — 0,0010. В связи с результатом, полученным в примере4.15, заменим, что в ’системе счисления с основанием —2 правила округления зависят от того, до какого (четного или нечетного) разряда производится округление. Если первый отбрасываемый разряд является нечетным, то при единице в этом разряде происходит отбрасывание излишних разрядов, а при нуле в первом отбрасывае- мом разряде происходит прибавление единицы в пос- ледний остающийся разряд. При отбрасывании первого четного разряда правила округления обычные. Перейдем теперь к описанию процесса деления в системе счисления с основанием — 2. Логика вы- полнения деления в этой системе отлична от выпол- нения деления в обычных системах, так как операция вычитания делителя из остатков должна происходить по правилам минус двоичной системы, а разряды част- ного не одинаковы по своей структуре. Пусть необ- ходимо разделить число х на число у. Пусть 2V(y) = max {уП1-2~п'..Уг?, У<2% Через _yft обозначим делитель, сдвинутый на k раз- рядов; yk = (— 2)ft -у. г * Правила деления имеют следующий вид. 1. Для начала деления необходимо сдвинуть дели- тель так, чтобы выполнялось равенство N(х) = N(yk)- 188
. 2. Находится разность ц/+1 = 'vl—yk, где ^—оста- ток на /-м шаге деления и w0 = x. 3. Если N(^+1) < то очередная цифра част- ного равна единице. Делитель сдвигается на г раз- рядов так, чтобы выполнялось равенство N(vi+1) = — N(yk~r), а в разряды частного с номерами (Л — 1),..., (k — г + 1) записываются нули. Переход к пунк- ту 2 при замене I на i + 1. 4. Если N(vi+^ = N(yk), то в соответствующий разряд частного записывается единица. Возвращение к пункту 2 с заменой i на i +1. 5. Если 7V(^;+i) > N(y)k, то очередная цифра част- ного равна нулю. Делитель сдвигается на один разряд (k заменяется на k—\), возвращение к пункту 2. Пример 4.16. Разделить число — 11001 на чис- ло {у)-2~ 1Н. Начальный сдвиг делителя 11100 11001 1111 11100 111 _ 01101— ОШО 00111---- “00111 00000------ сдвиг делителя на один разряд сдвиг делителя на один разряд Пример 4.17. Разделить число (x)_? = 10010 на число (у)_2 = ПО. Начальный сдвиг делителя Г1000 10010 |110 пооо поп — И tt 11010—1 11000 00010---- 00011 сдвиг делителя на один разряд 00'41 00011 189
Используя схему деления, можно построить алго- ритм для выполнения операции извлечения квадрат- ного корня в системе счисления с основанием —2. Однако этот алгоритм является довольно сложным, и мы его рассматривать не будем. В. заключение этого параграфа заметим, что систе- ма счисления с основанием —2 была использована при построении вычислительной машины, спроектиро- ванной в Варшавском политехническом институте. Задачи 1. Найти правила обнаружения переполнения разрядной сетки при работе машины в системе с основанием —2, если в этой ма- шине используется естественная форма представления чисел. ' 2. Сформулировать правила деления длд системы с основа- нием — 3 и разделить в этой системе число (х) =201 на число ОО-з-НО. 3. Сформулировать правила округления для систем с бтрнца- тельным основанием. * § 4.2. Системы счисления с комплексным основанием Будем рассматривать множество цифр А = {ах,а^,..., аг}, в которых количественные эквиваленты, со- поставляемые aj, могут принимать комплексные значе- ния. Обобщим на этот случай соотношение вида (1.1) z = S [(«Д pft; Р = а + bi- (4-5) £=4-со Если некоторое комплексное число z представимо в виде (4.5), то это представление будем называть записью числа z в системе счисления с основанием р (в общем рассматриваемом случае р предполагается комплексным числом). Определение 4.1. Система счисления с ком- плексным основанием р называется арифметической системой, если выполнены следующие три условия: число — 1 представимо конечным образом в виде (4.5), сумма и произведение любых пар цифр из А прёд- ставимы в виде (4.5) конечным образом. Лемма 4.1. Если в арифметической системе пред- ставимы числа zx и z^ то в этой системе предста- вимы числа z-l z2, Zx-z^, —zi и — zv iso
Справедливость леммы вытекает из того, что для позиционных систем существуют алгоритмы сложе- ния, умножения и инвертирования (см. главу первую). Следствие 4.1. Всякая система счисления, в ко- торой представимо любое комплексное число, являет- ся арифметической системой. Заметим, что обратное, конечно, неверно, т. е. не во всякой арифметической системе представимы все комплексные числа. В качестве примера арифметической системы рас- смотрим систему с основанием р = — *2е и систе- 2 2 . — — та мой цифр Д = {0,1, е , е }. Покажем, что эта система является арифметической. Для этого составим таблицу попарного умножения и суммирования цифр системы и таблицу инвертирования цифр (умножения их на —1). Для удобства записи обозначим соответ- ственно цифры рассматриваемой системы как a, b,c-ad. Таблица 4.5 Умножение Сомножители а ь С а а а а а а ь а ь с d с а с d b d а d Ь С Таблица 4.6 Сложение Слагаемые а ь С d а а Ь с d ь ъ ас'И bd cd с с bd abd be d d cd be abc 191
Таблица 4.7 Инвертирование Цифры а b с d Инверсии а с d b + d b 4- с Как видно из этих таблиц, в рассматриваемой системе выполнены все условия определения (4.1). Следовательно, система, которую мы выбрали, являет- ся арифметической системой. —-я- « Теорема 4.4. В системе с основанием р = — 2е 2 . 2 14 ---14 и цифрами А= {0, 1, е , е } представимо любое комплексное число: _ Доказательство. Заметим, что (—2)6=/йрй, 1 при k = 3m, е при k = 3m + 1, 2 . —з"“ е при k = Зт + 1. В силу теоремы 4.1 любое действительное число х представимо в следующем виде *=£КйЛ-(-2)*, k „ где (о,) = 0,1. Отсюда л = 2[(«;)]й•'/*•₽ или х — ^а.кф й й Здесь О- при1(ау)]й=0, 1 при .Щ)]й =1 и k = Зт, ай=1 T’tZ е при [(«;)]*= 1 и /Ь = Зт+1, е при [(аДК = 1 и k = 3m + 2. 192
Но любое комплексное число z может быть пред- ставлено как z — ut + и2е + сие , где ir, и2, us есть некоторые действительные числа. Заменяя щ их выражениями, полученными выше, получаем утверж- дение теоремы. Рассмотрим теперь класс систем счисления с ком- плексным основанием р, которые характеризуются тем, что все цифры в А являются действительными поло- жительными числами. Такое множество цифр в даль- нейшем будем обозначать как D. £> = {0, 1, 2,..., R — 1}. Система счисления с таким множеством цифр носит название нормальной системы счисления. Лемма 4.2. Нормальная система счисления, в ко- торой числа R u-R представляются как R= YakPk (4.6) И (4.7) где ak(RD и fikQD, является арифметической систе- мой кодирования. . Любое число из множества D Q<.ajr<.R--l. Следовательно, — aJX = aJ2 — R и ау1 + а}-2 — aj3 + R, если Оу, 4- aJ2 > R. У читывая (4.6) и (4.7), заключаем, что числа —aJt и а^ + aj2 являются р-ми целыми*. Далее имеем: aj}aj2 = £ ajr. По индукции заключаем, г что последняя сумма также является р-м целым чис- лом. Таким образом, условия определения 4.1 выпол- няются. Следовательно, рассматриваемая система является арифметической. Теорема 4.5. Любое комплексное число z предста- вимо в нормальной системе, если в этой системе числа R и —R имеют разложения вида (4.6) и (4.7). * Т. е. в системе с основанием р представляются конечным образом. Б-79.—13 ' 193
До к аза тел ь ств о. Пусть z = А + Bi. Очевидно, л п П , В z—A—B-------р или ь - ъ ; z =X + Вх р, где Д и Вх — действительные числа. Из теоремы 4.1 -следует, что эти числа представимы в системе с осно- ванием — R. Таким образом' k , к где &k^D. Все величины, входящие в.последнюю фор- мулу, представимы. в нормальной системе, которая является арифметической (см.’лемму 4.2). Следова- »тельно, согласно лемме 4.1, число z также предста- вимо в данной системе, что и требовалось доказать Теорема 4.5 дает возможность свести доказатель- ство теорем о том, что любое комплексное число может быть представимо’ в данной системе кодирова ния, к доказательству того, что в этой системе су- ♦ ществуют разложения вида (4.6) и (4.7) для чисел R и —R*. Именно этим методом доказательства мы и будем пользоваться в дальнейшем. Теорема 4.6. Любое комплексное число z предста- ивмо в системе (р = — 1 +ir, D = {Q, 1}). Доказательство. По условию R = 2. Легко показать, что 2=р3 + р2, . . •— 2 = р4 + р3 + р2" Таким образом, (/?)р==1100; (— R)p — 11100, что и требовалось доказать Приведем некоторые примеры двоичных кодов по основанию р.= 7 — 1, иллюстрирующие то, что система •теоремы 4.6 является арифметической: <2,> =1110111 (2, =30; (гД =0001110 (22 = 1 +г); • • Это достаточное условие существования разложения любого комплексного числа в данной системе кодирования, 494 s
(А й === —'3 4~ 3t). (g3 == —.4 + г); (24 — —: 3f); (23 + 24 = — 4.—? 2Z), (2S = —5 + г); (26 = — о — 20; (2В — Zg — — 2 + 30 =0011010 (23>р = 0010011 (24)р =0110011 <2S + 24)р = 0010100 (2^=0010010 (26>P = 0010101 <2Е-гв)р =0011011 И Т. Д. Теорема 4.7« Любое комплексное число z пред- ставимо в нормальной системе с р = ± iVR. Доказательство. Нетрудно убедиться в том, что или что /? = Р4 + (/?-1)р2; ~Я = Р2 при /?==/?— 1 (/?)₽ = 10/J00; (-/?)₽« 100, . и требовалось доказать. Система теоремы 4.7 обладает двумя важными свойствами. Свойство 4.1. Действительные числа Д имеют в системе (р = ± IК R; D) разложения, у которых нечетные разряды а2га+1 = 0 (яг —целое число). Согласно теореме 4.1 число Д представимо в .сис теме (—R, D), т. е. RT. т или = R)2m. т Обозначив ат — *2я»« получаем причем «^ = 0 13* при * k — 2т -Ь I 1»з
Свойство 4.2. Мнимые числа 1А имеют в систе- ме (р = ± i D) разложения, у которых четные разряды а2т = 0. Имеем 1А = + i V R (± A/V R). Но согласно свой- ству 4.1 действительное число (±Д/ИЯ)=2Хр2'"- » т Следовательно, т Обозначив а^ = а2/и+1 = «л (й = 2т+1), получаем М = £айр*, й йричем afr = 0 при k =* 2т *. Теорема 4.8. Любое комплексное число предста- вимо в системе D), где «Р = ± arccos (- pj/2 VR); р, < (/?; 2 /^)mIn « ₽! целое положительное. Доказательство. Покажем, что <7?)Р =а3й2а10; ( R\ — Р2Р1Ф причем а3 — 1; а2 = Pj — 1; 04 = R — *рх; 02 = 1; ₽!<(/?; 2/^)га1я. Для доказательства этих соотношений необходимо и достаточно доказать справедливость следующих четырех соотношений: R V R cos 3<р +7? (Pt — 1) cos 2<р + (R — PJ cos f = R-, R V R sin 3<p + R (p, — 1) sin 2<p —V R(R — РЭ sin ? = 0; * Теорему 4.7 можно рассматривать как следствие свойств 196 -
7?cos2<p + cos 7? sin 2? + J/7?₽, sln <p = 0. Используя условие cos <f> = — ₽г/2 V~R и известные тригонометрические формулы, выражающие синус и косинус кратных углов через степень cos <р, нетрудно убедиться в том, что последние четыре равенства являются тождественными. Теорема доказана. Из доказательства следует <—/?>₽ —1 Pi 0.- Для иллюстрации ‘запишем коды некоторых харак» терных чисел в рассматриваемой системе: . <- 1>Р= 1 Pi Я-U <—₽>₽= 1 Pi; <-р)Р = 1 ₽i Я-1 0; <р>₽= 1 —1 /г-Рг В®связи с тем что может принимать несколько значений при постоянном R, существует несколько !?ипов позиционных кодов в системах рассматриваемого типа. В качестве примера в нижеследующей таблице приведены^возможные коды при различных R и рь Таблица 4.8 R \ 1 . 2 3 4 5 6 2 1010 - 3 1020 1110 .4 1030 1120 1210 . 5 1040 ИЗО 1220 1310 6 1050 1140 1230 1320 J 10^0 1150 1240 1330 1420 8 1070 1160 1250 1340 1430 9 1080 1170 1260 1350 1440 10 1090 1180 1270 1360 1450 1540 Из систем теоремы 4.8 можно выделить системы с определенным аргументом основания, т. е. с фикси- рованным; значенйем cos $г/2 У R, 197
• • 2 3 & • • Полагая ф*—+--те;’'4;те; ± находим, что лю- .3 4 - 6 бое комплексное число представимо в следующих системах: ' . - ’ __± — с/ . __ а) (р = V Re 3 ; £>), если & == V R* или. R= Р,, т, е. при /? = 4; 9; 16; 25;... .._ ± -г ™ ---- » б) (р = / Re ; £>), если ₽, = К27? или т, е. при /? = 8, 18; 32; 50;... 5 . . в) (р==К^е 6 ; D), если =V, 3/? или . е. при /?—12;27; 48, 75;... Приведенное теоремы показывают, что существуют несколько тйпов позиционных кодов комплексных чисел по различным основаниям. Например, суще- ствуют- б типов двоиЧных_кодов комплексных чисел по основаниям-вида р = К 2е\ где ? = ± ; ± у ± arccos (~ И 2/4). Приведем для иллюстрации и сравнения коды чисел 2, — 2 и —1 во всех существующих системах двоичного кодирования, включая известные системы кодирования действительных, чисел. Таблица 4.9 ? <2>,. ' ..<л ±1/2 В 1 сч ' +1 10100. 100 101 -1 ±i , 3 J Ч п 4 1100 цюо. 11101 /~У2\ + arccos : 1 X 4 / 1рю ! 110 ш —2- .0 .110 = 10 <lli 2 ‘ 0 10 Г.’? . — 198
Ниже мы более подробно рассмотрим систе- мы кодирования, в которых аргумент Ф основания р = У Z?ez’ принимает значения ’1 , '2 ,3 г , 5 Ф = + — тг. + —ir, 4-it; v 4-к “2 3 4 ---6 (см. теоремы 4.6, 4.7, 4.8). Все .основания такого вида сведены в таблицу, где приведены также коды (/?) и (—/?) по каждому из этих оснований. Выделение та- ких систем кодирования связано с тем, что соответ- ствующие коды обладают рядом свойств, упрощающих некоторые вычислительные операции. Таблица 4.10 V <-Л>Р я 1 1 0 Я—1 0 0 1 0 0 -1 + / 3 2 110 0 11100 к сч | с«э +1 4, 9, 16... 1 (KR-IHR-VR) "о 1 V~R о » 3 Н эт — 4 8, 18, 32... 1 (У2я —1) (R —2 J/2/?)0 1 V2R 0 » 5 ±в* 12, 27, 48..'. 1(УЗ₽-1)(Я-/ЗЯ)0 1 V3R 0 Таким образом, мы показали, что существует це- лый ряд различных позиционных систем счисления с комплексным основанием, и выявили ряд достаточ- ных и необходимых условий для существования по- добных систем, В следующем параграфе мы рас- смотрим производство арифметических операций в по- добных системах, а затем дадим ряд методов пере- вода чисел в запись в нормальных системах счисления. Задачи 1. Проверить, будет ли арифметической нормальная система с основанием р = R2. 2. Построить пример арифметической системы, которая не , 199
давала бы возможности представления всех комплексных чисел 3. Можно ли .построить арифметическую систему с основанием Р-2 + ~-? О 4. Доказать теорему:, для любого числа в арифметической системе не существует двух; различных конечных разложений, § 4.3. Арифметические операции с комплексными числами Арифметические вычисления в Системах счисления с комплексным основанием производятся в Основном так же, как обычно. Трудность таких вычислений заключается в том, что перенос при сложении отли- чается от единицы. Пример 4.18. Сложение кодов в системе (₽ — 2(Z—1); D={0; ...; 6; 7», где <7?>р - 1340 134 перенос 8-ми (R) 134 перенос 8-ми (7?) 134 перенос 8-ми (7?) 134 перенос 8-ми (а-) 1341 перенос 16-ти (27?) 134J 134 перенос 8-ми (7?) 134 перенос 8-ми (7?) , 716 ’’’ 534 слагаемые 0000134302 сумма Здесь надо отметить два усложняющих процесса обстоятельства: а) возникновение «многоэтажного* переноса, когда разрядная сумма > 2/?; б) бесконечность переносов при конечной сумме (наблюдается не всегда). Применив правило «134 + + 13 + 1 =0*, можно избежать указанных трудностей: 134 134 134 134 134302' переносы слагаемые сумма 200
Аналогичный прием применим при любых В сущности. с подобными явлениями мы встречались и при рассмотрении систем счисления с отрицатель- ными основаниями. Остальные арифметические действия можно про- изводить двояко: либо сводить их к многократному сложению, либо пользоваться «таблицами инвертиро- вания» и «таблицами умножения», составленными для данной системы кодов. Последний способ рассмотрим на примере. Пример 4.19. Рассматриваем систему кодирования предыдущего примера. Инвертирование (умножение на — 1) одноразрядных кодов в данной системе опи- сывается таблицей. ° Таблица 4.11 . «</? 1 2 3 4 5 6 7 <-«>₽ 147 146 145 144 143 142 141 Произведем вычитание с помощью этой таблицы: 147 перенос (— 1) 145 перенос (—3) _117 уменьшение 645 вычитаемое 15752 разность Умножение однорядных кодов в данной системе описывается таблицей. Таблица 4.12 Сомно- ( жители 1 2 3 4 5 6 7 1 1. 2 3 4 5 6 7 2 ! 2 4 6 1340 1342 1344 1346- 3 3 6 1341 1344 1347 122 125 4 •' •= 4 1340 1344 120 124 . 254 110 5 7 5 1342 1347 124 255 112 117 6 6 1344 122 254 112 1450 1456 7 7 1346 125 110 117 1456 1315 201
Произведем умножение с помощью этой таблицы: .7315 4 124 40 •134400 110000 244556 множимое множитель частичные произведения произведение Приведенные примеры показывают принципиальную возможность вычисления с позиционными кодами комплексных чисел. Однако методы вычислений, при- веденные в примерах, пригодны только для «ручного»'' £чета и не могут быть использованы при синтезе вычислительных устройств. Поэтому перейдем к более строгому описанию таких алгоритмов, которые могут быть реализованы в арифметических устройствах циф- ровых машин. При этом в конкретных, примерах син- теза этих алгоритмов мы будем неявно пользоваться приемами «ручного» счета для построения таблиц, описывающих ту или иную операцию. Пусть zA и z2— некоторые комплексные числа, г —результат операции v с . этими числами Z = ZtfZ^ а позиционные коды этих чисел в. некоторой системе (р; А) имеют вид (*i)P ==•<•«*- (г)р ==«... Рассмотрим класс поразрядных операций, т. е. операций сложения, вычитания, умножения на посто- янный коэффициент, в частности, на (— 1)-—инвер- тирование. Поразрядная операция Д с кодами производится последовательно над каждой парой чисел ak и (А-х разрядов исходных кодов) с учетом переноса из млад- ших разрядов, по формуле $k = Qk + и*» (4.8) 202
где Qk — ~ результат операции Д над А-ми, раз- . рядами кодов;,, ПА — перенос из младших разрядов в А-й разряд; S^— разрядный результат. Разрядный результат всегда можно представить в виде - . .^* = о*+ Р'Пй+1, ' (4.9) где — А-й разряд результирующего кода; ПА+1 — перенос из А-го разряда в (А + 1)-й разряд. . Существует два способа определения значений переноса. Поэтому поразрядная операция может про- изводиться по двум различным алгоритмам. Фактически эти алгоритмы уже были применены выше при описа- нии операций в системах с отрицательными основа- ниями: так, пример 4.9 иллюстрирует первый алгоритм сложения (перенос принимает больше двух значений), а пример 4.10 — второй алгоритм сложения (перенос распространяется в несколько старших -разрядов). Рассмотрим эти алгоритмы более подробно. Первый алгоритм поразрядных операций Пусть ” Тяь ’ Т/’ •••» 11’ То» где 7; — цифры из множества А. Тогда, согласно (4.9), (440) (Р*+1)р = "Си—1’ »*0» 1 т0 (4.11) где т; = 7У+1- • С использованием полученных соотношений со- ставляем последовательность элементарных операций для вычислений в А-м разряде. Алгоритм 4.1. Известны ай; РА; Щ. 1. Определяется число = 2. Определяется число Sk по (4.8). 3. Определяется код (S^)p- 4, Определяется по (4.10). 203
5. Определяется (Пд+1)р вида (4.11). 6. Определяется ПЛ+1 по коду (H*+i)p. 7. Выполняются операции 1—6 для (А + 1)-го раз- ряда. Полученная форма записи алгоритма не дает на- глядного представления о его сложности и особен- ностях и неудобна для практического применения. . Поэтому она используется только для получения другой формы записи алгоритма — построения таб- лицы, описывающей поразрядную операцию для Л-го разряда. Эта таблица является законченной только в том случае, если удовлетворяет двум условиям: * а) если перенос Щи принимает некоторое значе- ние, то и перенос ПА принимает это же значение; б) в таблице присутствует любая возможная ком- бинация значений чисел а4; fift; Щ. Эти условия в дальнейшем будем называть усло- виями полноты таблицы поразрядной операции. Рассмотрим некоторые примеры синтеза таблиц поразрядных операций согласно алгоритму 4.1 и вы- числений с помощью полученных таблиц. Пример 4.20. Инвертирование кодов в системе (p = i —1; Д = {0; 1}) (см. теорему 4.6). Имеется код <г)р = -• • где a* = 0; 1. : Необходимо определить код (*-z)p. <-z)p==...aft..., где eft = 0; 1. Очевидно, Qk= — ай. Применяя алгоритм 4.1, строим таблицу, удовлетворяющую условиям полноты: пере- носы ПА+1 и П4 принимают значения из общего пяти- элементного множества П==-{0; 1; i- -1; 1 + /} и в таблице присутствуют все возможные пары чисел, одно из которых принадлежит множеству А, а дру- гое — множеству П. 204
Таблица 4.13 ак Qk sk Пй+1 <пй+1'₽ 0 1 0 0 0 ™—1 0 —1 1 1 1 0 0 1 0 1 + / 0 1 1 + i 1+1 0 —1 1 + i i 1 1 1 1 0 1 — i 1 0 1 — i — i 0 -1 — i — 1 — i 1 1 1 1 0 i i 0 1 I i 0 1 i 1 1 1 1 0 1 1 0 1 1 1 0 —1 1 0 1 0 0 0 Используя табл. 4.13, легко выполнить операцию инвертирования с любым кодом из данной системы, например, I I — 1 Г+ i переносы 1 0 1 исходный код 1 1 0 .0 1 результат 1 1+1 0 0 1 i — i '1+1 переносы 1 1 : 1 0 0 1 0 0 1 исходный код 1 1 0 1 0 1 0 1 результат Пример 4.21« Сложение кодов в системе P = K2ez₽; А = {0; 1}, где cos == — 1/2 lz2 (см. теорему 4.8). В этом случае Qft = aft + принимает три значения: Qft = 0; 1; 2, так как aft = 0; 1 и .₽* = 0; 1. Применяя алгоритм 4.1, строим таблицу, описывающую процесс сложения. В ней для сокращения объема: 1) не записаны комбинации разрядов aft и даю- щие в сумме Qk, 2) величина Sk не приводится, а записывается только код (5ft)p; ' 3) код {Sk)f записывается в клетке, находящейся на пересечении строки Qk и столбца ПА (например, 205
при Qk = 1 и п* = р2 код (Sk = 1 + Р2)р = 101 записы- вается на пересечении-второй строки и пятого столбца). Таблица 4Л4 . 0 1 • 10 11 100 101 111 ИЮ Qk . .. . 0 1 . ₽ -₽ ₽г р’+ 1 -1 —р б 0 1 10 11 100 101 111 1110 1 1 1010 11 11100 101 •1110 0 1111 » 2 1010 1011 11100 11101 1110 1111 1 1000 Эта таблица удовлетворяет условиям полноты, так как в ней прису ствуют все возможные комбинации значений Qk и ilft, а код (ПД принимает те же зна- чения, что и код (ПА+1)р, состоящий из старших раз- рядов кода (Sk) (например, при (5^ = 1110 код <ПА+1)₽ = Ш, но код (ПА)р = 111 также присутствует в таблице). Рассмотрим примеры сложения с использованием построенной таблицы. + -1 1 р2+1 0 1 1 1 -:1 1 0 ₽2+1 переносы слагаемое 1 слагаемое 2 1 1 1 1 1 0 0 0 0 0 1 0 1 сумма -Г - -1 р р р2+1 переносы 1 0 0 0 1 0 1 слагаемое 1 4- 10 0 0 0 1 1 . 0 1 слагаемое 2 1 110 1 1 1 0 1 0 сумма Пример 4.22. Инвертирование кодов в системе - о (р — — 2е ; А = {а; b; с; с/}). (см. теорему 4.4). Согласно алгоритму 4.1, используя таблицы одноряд- ного сложения и инвертирования, строим таблицу, Описывающую процесс инвертирования и удовлетво- ряющую условиям полноты. В этой таблице на пере- сечении строк Qk и столбцов П* записывается пара чисел (Щ+1; ofc). ' 206 .
Т а-б л и ц a 4.15 <0 Зв» , и» а с . d -с -d а а а; а а; b .а; с a; d с; b d~ с b; d ь — ь с; b а; а — d-d b; с с; d a; d а; с с — с d; с — с; d _ а\ а —ь-,ь cr,d d; а а; b. d ~d b; d —* с; с — d-,b~ ft; а а\ с а; b Ь; а Воспользовавшись табл. 4.15, произведем инверти- рование некоторых кодов. b —d с а — b.d d Ь с - переносы инвертируемый код а а а b ь d b b с с с результат с — bdad а а с переносы с abed с а а Ь , инвертируемый код а b с е а с а с b результат Второй алгоритм поразрядных операций Будем, в отличие от алгоритма 4.1, исходить из представления числа Sk в виде Sk — pm’Pk^m +---Ь tfPk+j + • - • + (4.12) где ак — А-й разряд результирующего ; кода; Pk+j — частичный перенос из А-го разряда в (А + /)-й разряд;- -яг —максимальное число частичных переносов. Очевидно, при такой структуре числа Sk перенос , Щ в k-й разряд складывается из т частичных пере-, носов Рц, образующихся в т младших разрядах с но- мерами k— 1; А — 2; А— т. Итак, т Ък = ЪРы (4.13) >1 Для того чтобы число было р-м целым, частич- ные переносы^- также должны быть р-ми целыми числами. Других ограничений на числа pkj не накла- дывается, поэтому они в общем случае могут отли- чаться от чисел множества А. 207у..
-Назовем выражение вида Pk+m> — >Pk+p >A+j °л квазикодом разрядного результата, а выражение вида (^й-Н )~ — Pk+m* •" iPk+P "• ’ Pk+t квазикодом переноса из k-го разряда. Используя полученные соотношения, составляем по- следовательность элементарных операций в А-м разряде. Алгоритм 4.2. Известны числа aft; рА7 при /= 1; 2;...; т. 1. Определяется число Qk — 2. Определяется число ПА по (4.13). , 3. Определяется Sk по (4.8). 4. Определяется квазикод (Sft)~. 5. Определяется ак из кода (Sft)~ . 6. Определяется квазикод (П'А)~, т.. е. частичные переносы из А-го разряда. * 7. Выполняются операции 1—6 для (А-Ы)-го разряда. Алгоритм 4.2 для данной поразрядной операции в данной системе кодирования может иметь несколько вариантов в связи с тем, что существует несколько квазикодов для числа Sk*. В частности, квазикод может совпадать с позиционным кодом, если значе- ния частичных переносов выбраны из множества Л. В общем случае различные-разряды квазикода прини- мают значения из множеств, отличающихся от А не только значениями элементов, но и мощностью (коли- чеством элементов). Например, часть разрядов квази- кодов может иметь всегда нулевое значение (опреде- ляется на пустом множестве), часть разрядов — прини- мать значение из множества Л, часть разрядов — из множества Л7 Л и т. д. Последовательность оцераций алгоритма 4.2 ис- пользуется для синтеза таблиц подразрядных операций по форме таблицы, удовлетворяющей условиям пол- ноты, которые в» этом случае формируются несколько иначе: * В отличие от этого алгоритм 4.1 имеет лишь один вариант, поскольку позиционный код <S*)p является конечным и, согласно следствию 4.1 из леммы 4.1, единственным. 208
а) перенос ПА принимает все возможные значения, соответствующие любой комбинации чисел Pk+j\ б) в таблице присутствует любая возможная ком- бинация aft; LLft. Очевидно, согласно алгоритму 4.2, имеющему не- сколько вариантов, может быть построено несколько типов таблиц для данной поразрядной операции в дан- ной системе кодирования. Рассмотрим некоторые примеры синтеза таблиц поразрядных операций, согласно алгоритму 4.2, и вы- числений с помощью полученных таблиц. Пример 4.23. Инвентирование кодов в системе 2 . (р = 2е3 ; D = {0; 1; 2; 3}) (см. теорему 4.8). В данном случае Qk — —- принимает четыре зна- чения: Q/r = 0; —1; —2; —3; так как аА = 0; 1; 2; 3. Используя алгоритм 4.2, строим таблицу^ в которой числа Sk и их квазикоды (Sk)f записываются на пере- сечении строк Qk и столбцов ПА в виде пары В этой таблице квазикоды (Sft)~ чисел Sk сов- ₽ * ₽ падают с позиционными кодами по основанию р (Sfc)f тех же чисел Sk, т. е. основаны на представлении числа Sk в виде = р2-А+2 + P'A+i + °*- Таблица 4.16 *k <4 nk 0 1 2 3 0 0 0; 0 1; 1 2; 2 3; 3 1 —1 123 0; 0 1; 1 2; 2 2 —2 —2; 122 —1; 123 0; 0 1; 1 3 —3 “3; 121 -2; 122 * -1; .123 0; 0 Как следует из табл. 4.16, частичные переносы Аг+2 принимают значения из множества {0;2}. В связи с этим перенос в данный разряд может принимать четыре различных значения, соответствующих всем возможным комбинациям из двух частичных перено- сов в данный разряд. Таким образом, Пй = 0; 1; 2; 3. Б-79.-14 209
Все эти значения П6 (так же, как и все значения Qft) присутствуют в таблице, следовательно, она удовлет- воряет условиям полноты. Ниже приведен пример вычислений с помощью табл. 4.16 12 12 12 12 переносы 12 ] 3203132 исходный ряд 123322232 результат Пример 4.24. Сложение кодов в системе (p—i- 1; D-{0- 1}) (см. теорему 4.6). * Для описания этой операции построим, согласно алгоритму 4.2, сокращенную таблицу, содержащую только величину Sk и квазикод (5ft)p, все разряды которого принимают значения 0 или 1. В этом случае квазикод совпадает с позиционным кодом, но два его разряда всегда имеют нулевое значение. Следова- .тельно, в k-м разряде вырабатывается не более шести частичных переносов, равных 1. Значит, и в k-й раз- ряд может поступить не более шести частичных переноса, т. е. 0<ПА<6. Так как 0<Qft<2 при сложении данных кодов, то 0<Sk= Qk + Щ<8. Все 8 значений Sk присутствуют в таблице, следовательно, она удовлетворяет условиям полноты. - Таблица 4.17 риантов алгоритма 4.2 построим еще две таблицы,; 210 в
описывающие сложение в данной системе. В этих таблицах принято обозначение: — 1 = 1. ' Как следует из табл. 4.18, в /г-й разряд может поступить одновременно три частичных переноса (перенос частичный, всегда равный нулю, мы не рас- сматриваем): 0<Д<1, следовательно, -1<Рд,<1, 1 < Щ = pki + р^+ Pkt < 3, . откуда Таблица 4.18 Таблица 4.19 % \Sbl~ к ₽ + ле со ч- ле CJ ч- ч- о44 со + •й: CJ Ч- ле 7 ле -1 0 1 2 1 3 4 ‘ 5 1 0 0 0 0 "1 1 1 0 0 1 1 0 - 0 1 0 0 1 .1 0 0 0 0 0 0 0 0 0 1' 1 1 Г ! 1 to кэ w । 1 0 0 0 0 Г 1 0 Г 1 0 0 f Г 0 1 Т 0 0 Т Т 0 0 0 0 0 0 0 1 0 1 0 1 0 1 Таким образом, табл. 4.18 является полной. Анало гично доказывается полнота табл. 4.19. Выбор того или иного варианта алгоритма 4.2 определяется минимальным числом значений, которые принимает перенос Пй. С этой точки зрения последние таблицы соответствуют оптимальным вариантам, а предшествующая таблица — худшему варианту. Рассмотрим пример сложения согласно табл. 4.19: 10 0 0 110 lie'- ll0 ' 1 11° 1 1 Т о 11010011 + 11 10 0 10 1 1 14* квазикоды переноса слагаемые 1 1 10 10 1 ГО 0 сумма 211
Перейдем к рассмотрению более сложных опера- ций, не являющихся поразрядными. Умножение. Необходимо найти произведение z = zX'Z2, где числа zx и z2 имеют соответственно крды (zi)p ~ алг»•••»аь ••• (z2)p “ РдЬ » Рй’ Рт“ Код произведения определяется следующим обра- зом Н = <^)р-(^>р, или N * (*)₽== W <*!>₽• k=n Умножение на pft равносильно сдвигу на k разря- дов, а умножение на является поразрядной опера- цией, причем при действительных значениях эта операция сводится к рй-кратному сложению и вычи- танию. Такиь/ образом, умножение кодов в арифметиче- ской системе сводится к последовательно выполняе- мым поразрядным и сдвиговым операциям. Деление. Деление позиционных кодов комплекс- ных чисел во многом аналогично обычному делению и состоит из циклов «сдвиг — вычитание сравнение». Отличие состоит только в этапе сравнения. Для дей- ствительных положительных чисел сравнение произ- водится по предыдущему и последующему знаку ос- татка. В нашем случае этот метод не годится, по- скольку не приходится говорить о знаке комплексного числа. Сравнение по знаку можно было бы заменить сравнением по модулю (для положительных чисел это о'дно и то же, ибо сохранение знака остатка свиде- тельствует об уменьшении его модуля). Но для ком- плексных чисел сравнение модулей является сложной операцией. Поэтому сравнение остатков при делении производится по «длине кода» остатка, т. е. по номе- ру старшего значащего (не равного нулю) разряда кода остатка. Критерием правильности очередного вычитания служит сохранение или уменьшение «длины- кода» остатка. 212
Алгоритм деления выглядит следующим образом (для А-го цикла деления). Алгоритм 4.3. Известны коды делимого и дели- теля и код «-го остатка (z^ )р. 1. Определяется код pv’(z2)f сдвигом' делителя (z2)p на v = М — N — h разрядов. 2. Вычисляется сдвинутый делитель pw-(z2)p из А-го остатка (^+,)Р=<4й))Р“Рг'-(^>Р- Разность совпадает с (А + 1)-м остатком. 3. Сравниваются номера старших значащих разрядов А-го и (А + 1)-го остатков, обозначенных соответствен- - но через Hh и Hh+1, с целью определения нового зна- чения частного, номера очередного цикла и величины остатка для последующего цикла деления. Эти данные находятся в соответствии со следующей таблицей. 4. Выполняются операции 1, 2, 3 с новыми значе- ниями номера цикла и предыдущего остатка. Деление производится, начиная с А — 0, при кото- ром за остаток принимается делимое, до получения заданного числа разрядов в частном. Частное обра- зуется суммированием единиц у-го разряда, получен- ных в пункте 3. ' Таблица 4.20 Условия 4 ? Результаты сравнения частное номер следующего цикла предыдущий оста- ток для следую- щего цикла а) <нк Увеличивается на единицу Л-го Увеличивается на единицу <+1)>Р - разряда 6) Hh+l =Hh Остается без <+1)>₽ изменений в) >нк Остается без из- менений Увеличивается на единицу <4Л)>Р Задачи I. Для системы (р = г — 1; £> = {0, 1}) иайти сумму, разность, произведение и частное Zi и z2, если (Zi)p = 1001 й (z2)p = 1101. 2. Для системы (р = 1^2-, D = {0, 1}) найти правила сложения и найти в этой системе сумму чисел <Z|>p = 1031 и <z2>p =0101. . 213-
: § 4.4. Алгоритмы кодирования и декодирования в системах счисления с комплексным основанием В настоящем параграфё мы рассмотрим два типа алгоритмов перевода чисел из-некоторой системы счисления (pt, Л.)‘ в систе- му (Ра> Ла), где и р2 — некоторые. комплексные числа. Так как в общем случае классы чисел, представимых в рассматриваемых системах, могут не совпадать, то при необходимости мы будем приписывать кодам чисел знаки «плюс», «минус» и «знак мни- мости /». Первый тип алгоритмов связан с операциями деления и умно- жения в исходной системе счисления (р^ Л]), а второй- тип алго- ритмов основан на выполнении логических и арифметических опе- раций в той системе счисления, в которой мы ищем запись исход- ного числа. Для реализации алгоритмов перевода введем две специальные логические операции. О пределение 4.2. Преобразование кода (z)„ = .... а ...а .а . ' z₽ am—J+l am—J am—j—V а код <ZW>„ = .... 0 a /0... 0 a . . 0,... , ' 'P am—j >- - д(т—1)—j у а штук. {де a; m, j — целые числа и 0 < / в — 1 называются выделением кода из кода <z>0. ~ ГО) * Если я'=2 и j—О, то код <z' '> — <z4)p называется четным кодом числа z, если же а = 2 и j= 1, то код (z^1^ — (zH)p на- зывается нечетным Кодом числа z. Получение кодов <z4 ) и <zH )р называется выделением четного и нечетного кодов из.кода (z^. Преобразование, обратное выделению, называется совмеще- нием кодов. Если, например, (z)p = 2034, 103 и а = 3, то (z4>p = 2004, 003, <zH >р = 0030, 000; <z(2)>₽ = 0000, 100. Заметим, что если числу z соответствует’ разложение Z = X “й ₽й—1 > то числу z^ соответствует разложение z^ =» к V ат-} ’ V О) — М ,'Р И Z=£j2 *“* am—J r т у=0 Определение 4.3. Преобразование кода (z)p =.... ak!... в код (z)^ = ... 0 a’S(fe+1) 00. • 0<x'fe 0. где а* = a'ks называется • 5—1 нуль расширением кода (z)p в s раз; обратное преобразование кода (z)^ в код <z>p называется сжатием кода (z)^ в s раз. В ряде случаев в дальнейшем код, получающийся сжатием ко- да -<z)p в s раз, будем обозначать как (z)^). 214
Пример расширения: если (z>p = 1023, 103 и s — З, то <z)J3'= = 1000002003, (ЮЮООООЗ. Для расширения и сжатия кодов существует эквивалентная операция над соответствующими разложениями, которая заключа- ется в том, что каждый разряд разложения умножается на основа- - ние разложения в некоторой степени ршй. В дальнейшем эту опе- рацию будем называть «поразрядным умножением» и обозначать -с символом (х) : z Q<) рш6. Нетрудно убедиться, что при со == s — 1 поразрядное умноже- ние соответствует расширению кода в s раз, а при <о= — —1 s сжатию кода в 5 раз. Действительно, умножение й-го разряда раз- ложения asp* на pmft дает а^=ЗДЙ(“+,). Таким образом, /г-й разряд ak переходит при таком умножении на [(<» + l)ft]-e место: aft = a^(co+ 1). В частности, при со— s— 1 ag.= а ПРИ “ “ —— 1 ak — ak[S • что и требовалось показать. — — л Итак, (z><*> = <z © <z>p = <z (x) p 5 >p. .Непосредственный перевод p-x целых чисел и р-х правильных дробей достаточно подробно' описан в § 4.1. При переводе р-х смешанных дробей возникает необходимость в разбиении данного числа на два составляющих: р-е целое й р-е правильное дробные числа. В общем случае при комплексном основании такое разбие- ние является сложной задачей: необходимо из данного числа вы- делить число так, чтобы остаток оказался р-м целым. Задача зна- чительно облегчается, если заранее известно, что данное’число является действительным. Поэтому перевод комплексных чисел желательно сводить к переводу действительных чисел, т, е. вы- полнять в следующем порядке: а) выделение Re Z и -i- Im z числа z в системе (pt, At); б) перевод (pi -* р2) р-х смешанных дробных действительных чисел Re z и — Im z; - i 1 в) совмещение чисел Rez и — Imz в системе (р2, Лг) по фор- (Im z\ ----J • / i J < Теперь рассмотрим перевод в системе (ра, Л2), где код числа неизвестен. Если известно разложение некоторого числа z по ос- нованию р( Z = 2afe.pf . где . 215
то разложение этого же числа по другому основанию р2 может быть найдено по формуле 2 = 2 ’ (4.14) k где ^=РгР2- _ (4-15) Все величины в формуле (4.14) представимы разложениями по основанию р2, поэтому вычисление по этой формуле может произ- водиться в системе (р2, Л2) и дает искомое разложение * це ₽йел2. Величина в общем случае зависит от р* и р| • В связи с этим формула (4.14) требует большого объема вычисления и прак- тически не применима. Однако задача значительно облегчается, когда константы /? обеих систем равны между собой и множества At и А2 совпадают. В этом случае величину можно определить как функцию только от р2 и свести вычисление по формуле (4.14) к небольшому числу элементарных операций. Ниже доказывается последнее утверждение применительно к системам вида (р; £>), где р = +/? или р = У/?Л Доказатель- ство разбито на две части: 1) определение величин для всех возможных случаев; 2) использование полученных в 1) ^результатов для перевода Pi -► р2 при постоянном R. Будем искать величину в виде «й= р^-е**7 . (4.16) где с — целое число, зависящее от k. Пусть ₽i~ Л (/?)•*'’• И Р2=/2(/?)-е'Х z Из сравнения формул (4.15) и (4.16) находим . ikt I/i (Я)1* Wi-tf-wl/sl bex ~ [/2(/?)]ft+- . . Согласно последней формуле для различных pt и р2 при со- блюдении условия «с — целое число» величины с, b и у принимают следующие значения. т 216
Таблица 4.21 л (я) AIR) k С b . I R R любое 0 1 fi —fa Vr V~R любое '0 1 . Vi — ?2 R VR : любое k I fl — 2?3 VR R четное k ~ 2 1 1 fi — ~fa R нечетное fe—1 .. 2 1 ~г<р» 1 2 ,— >e Vr 1 fi —-^-fa Пусть й — наименьшее целое число, удовлетворяющее усло- вию eteT = 1. Любое k представимо в виде k = am—j, (4.17) где у = 0; 1; 2;...; я —1; т — целое число. Отсюда следует, что = (4.18) где j определяется через k по формуле (4.17). Возвращаясь к формуле (4.14) и учитывая (4.16) и (4.18), на- ходим ' Z = S “*₽2.Р2&е“/Л • k Согласно определению 4.2, число z представимо в виде а—1 . /-0 где т Последняя формула включает операцию поразрядного умноже- ния на ₽2 (см. определение 4.3) и поэтому преобразуется к виду . (4.1» т 217
Величина bj —be~,1't, входящая в эту ’ формулу, легко может быть подсчитана для различных pt, р2, j по данным предыдущей таблицы. Для некоторых наиболее важных случаев значения вели- чии приведены в табл. 4.22, где указаны такие значения чисел Tf и а. Таблица 4.22 ± R ±zK7? R ±zp<z? ±zjO? ₽2 ±z/7? + Я ±iVR — R R Т 0 Л 0; я +1. кэ|я а 1 2 2 2 1 4 1 1 1 1 - 1 1 ,bj 7=1 .-1 -1 -1 _ i + Vr + Vr 7 = 2 -1 7 = 3 Величина у aam_j Рг”2 А входящая в формулу (4.19), опреде- * т дяется операцией выделения (см. определение 4Л) из известного кода числа 2 по. основанию р,, поскольку коды этой величины по основаниям р| и р2 совпадают в связи с равенством констант R. Таким образом, формула (4.19) содержит известные величины и поэтому может быть использована для перевода. При этом вычис- ления производятся по следующему алгоритму. Алгоритм 4.4. Известен код (z)pj . 1. Определяются коды (6е~‘Л) для всех j, (7) 2. Выделяются из 'кода <z)pi коды (z )Р1- 3. Производится поразрядное умножение кодов (z^) на р£. 4. Производится умножением в системе (р2, D) результатов пункта 3 на код для получения кодов (z^)Pj согласно формуле (4.19). 218
5. Производится сложение в.системе (р2, D) по формуле о—1 <*>Ря = S <z >Р,- /=о Из табл. 4.21 следует, что' пункт 3 этого алгоритма может включать поразрядное умножение на р*, что равносильно расши- рению вдвое соответствующих кодов (см, определение 4.3); пораз- k рядное умножение на р2 , что равносильно сжатию вдвое соот* * - _ fe—1 ветствующих кодов, и поразрядное умножение на р2 2 . Очевид- fe-i fe+i но, р2 2 = ₽2₽2 2 Следовательно, поразрядное умножение на р2 2 для соответ- ствующих кодов равносильно сдвигу влево на один разряд с по- следующим сжатием сдвинутого кода в два раза. Итак, перевод в некоторую систему по алгоритму 4.4 связан с выполнением ряда операций в этой же системе. Рассмотрим наиболее важные случаи перевода по алгоритму 4.4, перечисленные в последней таблице, и м^тод использования этого алгоритма для перевода при любых р! и р2. Применяя алгоритмы 4.4 и используя данные табл. 4.21 и 4.22, получаем следующие формулы перевода для частных случаев, . I. При pi — + /? или pi + i и pg = — pi имеем: <z)p2 = <z4>p, - <ztt>Pj . - (4.20) Вычисления по этой формуле производятся в системе с осно- ванием р2, при этом^коды (z4)pi и (zH )Pj формально (при выпол- нении операции) рассматриваются как коды по основанию р2. Пример 4.25. pt = 4; р2 = — 4. Известен код числа z по основанию ?! (z>₽i = 22313. Находим четный и нечетный коды этого же числа <z4)pi= 20303; 2010. Используя формулу (4.20), получаем 20303 ~~ 2010 (z>„ <= 21033 ' 'Ps 2. При pi —— /? н + имеем (г = и + /о>рг - р? ® <н>Р1 + (Z>p5 [ft ® <0Р11 (4.21) 219
'Пример 4;26. ₽t — — 4; р2 = 2i. Известные коды чисел и и v по основанию ₽! \ <и>р1 = 21033; <%=ПЗ. Кроме того, имеем (z)pj = 10,2. Поразрядное умножение иа р2 соответствует операции расши- :рения в два раза. Следовательно, р2 ® <и)Р1 = 201000303 и р2 <х) (х) (0pj = 10103. Используя соотношение (4.21), получаем (и + o>pi =-201000303 + 10,2-103 = 201000303 + 102000,2 = = 201102303,2. Соотношение (4.21) может быть преобразовано следующим образом £ = и + р2 —= р* (х) <И)Р1 + р2 [р* (X) <V')P1 ], (4.22) где - Это соотношение отличается от (4.21) тем, что содержит операцию умножения кодов в системе с основанием pt, но не содержит опе- рации умножения на (z)p2 в системе счисления с основанием р2. Пример 4.27. р, = — 4, p2 = 2Z. Пусть, как. в примере 4.26, <и>₽1 = 21033 и (o)pj-= 113. Учитывая, что S = //—=1,2, находим ум- \ + к Д / Pi \2/р, ножением в системе с основанием pt код («/^ = 113'1,2=120,2. Далее Р2 ® <«>Р1 =201000303 и о* ® <o')pit= 10200,02. Применяя формулу (4.22), получаем (и + p2«',)fs = 201000303 + 10.10200,02 = 201102303,2, 3. При pi = + z Уд и р2 = — Д имеем — А- , 1 \ —fe—1 <2>₽2=Р2 2 ® <Ч.+\+у£/ [₽2 2 ® <*«>₽,] (4'23) Пример 4.28. pi = 2/, р2 = — 4. Известен код <z)pi = 201102303,2. Находим <z4)pi = 201000303,0; <zH)pi = 102000,2. k n ~ "о* Поразрядное умножение на р2 равносильно сжатию вдвое, следовательно, _А р22® <г4>р = 21033,0. ;220
_k_ Поразрядное умножение на ₽2 2 равносильно сдвигу иа один разряд влево с последующим сжатием в два раза. Таким образом, k—1 код р2 2 (х) (zH )Р1 получается следующими преобразованиями кола <zH^pi /г—г (zH 102000,2 1020002,0 -» 1202,0 = ₽2 2 ® <zH )р>. Код (+ l//?)ps = \ — ^/=0^‘ Применяя формулу (4.23), на- ходим (z)p2 == 21033 + Z-0,2-1202 = 21033 + г-113. Формула (4.23) может быть преобразована _ fe _ k--i <г>Р1 = Р2 2 ® <Ч> + г[₽2 ? ® <гн>Р1Ь <4-24) где <4>fI=<*H>fl <* 17Гя>;,. Последняя формула, в отличие от формулы (4.23), содержит опе- рацию умножения в системе с основанием pt, но не содержит опе- рации умножения в системе с основанием р2. Пример 4.29. pt = 2Z; р2 = — 4. Пусть (z)fi =201102303,2. Используя результаты примера- 4.28, находим Р2 2 ® <г4>р, =21033; <zH>pi = 102000, 2. Кроме того, имеем <+ 1/ГЛ>Р1=<-1/2>р1 = 0,02. -Умножением в системе с основанием pi находим <гн>р, = 102000,2-0,02 = 1010,300. Далее получаем _ 1 <?;>Р1= 1010,3-> 10103->113 = ₽2 2 ®<4>р,. Таким образом, (z>pi = 21033 + i« 113, что совпадает с результатом примера 4.28. Рассмотренные примеры показывают, что перевод по алгорит- му 4.4 производится по формулам, содержащим небольшое число элементарных операций. В связи с этим целесообразно использо- вать перевод при постоянном R как некоторый промежуточный этап для перевода Pl -»р2 при неравных fi- * Если г = и + iv, то zH = iv, a zH = о/ft. 221
Перевод комплексных чисел (р, = e"Pl) ->(р2 — при любых-основаниях с использованием алгоритма’ 4.4 произво- дится в следующем порядке: __ а) перевод комплексных чисел (pi = е'¥‘) —> (—/?1). по ал - горитму 4.4; . , б) перевод действительных положительных чисел (—7?i)-> ->(-я2); в) перевод комплексных чисел (— /?2) -> (р2 = е/,р2) по ал- горитму ,4.4. Пример 4. 30. Найдем код у~. Имеем_ (1/V2) = 0,71... Осуществляя перевод (10) -> (2), нахо- дим (1/^)2 = 0,1011... Производя вычитание по_формуле (4.20) гГсистеме с основанием (—2), определяем <1/^2)2: 0,0001 “0,1010 * 1 1,1111... Расширяя^и^сдвигая полученный код, окончательно получаем </)г = 10,1010101... Из всех, систем кодирования, рассмотренных в этом параграфе, наибольший. практический интерес представляют системы (р = + z К-/?! D). Это связано с тем, что алгебраическое сложение действительных и мнимых частей чисел в этой системе может осуществляться независимо и одновременно согласно свойствам 4.1 и 4.2. Кроме того, алгебраическое сложение этих частей произ- водится, фактически, по правилам сложения действительных чисел в системах (р = — /?; D). И, наконец, кодирование и декодирова- ние в этих системах осуществляются наиболее просто. Задачи 1. р, = — 2, р2 = 2, (н>₽1 = 1101, (»>ft = 1100. Найти <2)h с псь мощью алгоритма первого типа. 2. pj = 4, р2= —i, <«>Р1=2001, (»>р1 =22. Найти (z>h с- по- мощью алгоритма второго типа.
Г лава пятая СИСТЕМЫ СЧИСЛЕНИЯ, ПОСТРОЕННЫЕ ПО ПРИНЦИПУ ВЕСОМОЗНАЧНОСТИ РАЗРЯДОВ § 5.1. Общие определения Начиная с этой главы, рассматриваются системы счисления, отличные от естественных систем. Системы счисления такого рода обладают целым рядом инте- ресных свойств с точки зрения использования их в вычислительных машинах, хотя, как правило, их при- менение усложняет оборудование для проведения арифметических операций по сравнению с оборудова- нием, используемом при работе с естественными си- стемами счисления. В весомозначных системах каждый разряд в записи числа характеризуется своим весом д, величина ко- торого определяется на основании соотношения (0.1) п - 1 К«/)1о ’ .Здесь at означает любую цифру из алфавита цифр Очевидно, что для возможности работы с весо- мозначными системами надо иметь возможность на- хождения весов разрядов на Основании некоторого метода, отличного от прямого задания всех весов, ибо это потребовало бы задания бесконечного списка весов. Это означает, что весомозначная система счис- ления лишь тогда эффективно задана, когда задано некоторое правило для определения веса очередного разряда числа на основе уже известных весов. Если естественную систему счисления рассматривать как 223
весомозначную, то правило вычисления весов для этой системы имеет вид Pi^S-p^ Ра Другим примером может служить система счета пятками по два, о которой говорилось во введении. В этой системе веса разрядов задаются с помощью следующего соотношения Ргй+i = 2° 10 , Ргь — Весьма важную роль для кода в остатках, кото- рый мы будем рассматривать в шестой главе, играет весомозначная система счисления, в которой веса разрядов определяются следующим образом. Пусть дан упорядоченный набор натуральных чисел (1, дъ ..., qn, ...}. Тогда Го=1’ (5.1) Pk = - Qk- Определение 5.1. Весомозначная система счис- ления, в которой веса разрядов определяются с по- мощью соотношения (5.1), называется полиадической системой счисления. Рассмотрим еще один класс весомозначных систем. Пусть мы представляем числовую информацию в п раз- рядах. Разобъем эти разряды на группы i\, г2,..., rm. Здесь гг группа соседних разрядов. Обозначим через tt число разрядов, входящих в данную группу. Возь- мем некоторое множество натуральных оснований St, S2,..., Sm и сопоставим каждой выделенной группе однозначным образом одно из оснований. Далее бу- дем считать, что влево от выделенных групп проис- ходит периодическое повторение выделенных групп с однозначно сопоставленными им основаниями. Еди- ница переноса из одной сопокупности групп в сле- дующую совокупность групп возникает с весом р = Si • S2 ... 5^. Таким образом, полученную весо- мозначнуф систему можно рассматривать как систему с натуральным основанием Р, в которой цифры коди- руются в 5г-ичных цифрах. 224
Поясним сказанное на примере следующей систе- мы. Пусть мы имеем представление, в котором перио- дически повторяются две группы разрядов: группа, состоящая .из трех двоичных разрядов, и группа, со- стоящая из двух троичных разрядов. В этом случае веса разрядов будут, формироваться так, как это по- казано для первых десяти разрядов, в нижеследую- щей таблице: Номер разряда 0 1 2 -3 4 5 6 7 8 9 Вес разряда 1 2 4 8 24 72 144 288 576 1728 Эту систему можно рассматривать как систему 1 с основанием 8 — 24, у которой каждый разряд коди- руется группой из пяти разрядов: трех двоичных и двух троичных. Рассмотренная выше система счета пятками по два является системой подобного же типа. По суще- ству она является десятичной системой, в которой каждый разряд представлен в виде совокупности двух разрядов: одного двоичного и одного пятиричного. В общем случае система такого типа определяет веса разрядов для любого z, если задана матрица следующего вида t/n—l ••• ^1 $т $т—1 — (5.2) В первой строке матрицы указано число разрядов, отводимых в данной группе для записи цифр по основа- нию, указанному в этом же столбце во второй строке матрицы. Зная такую матрицу для одной группы и считая, что для остальных групп она идентична, можно вычислить вес любого разряда в записи числа. Определение 5.2. Весомозначные системы счис- ления, задаваемые с помощью матриц вида (5.2), на- зываются смешанными системами счисления. Оценим расход оборудования, необходимый для записи чисел из некоторого диапазона при использо- вании смешанной системы, задаваемой с помощью матрицы (5.2). Для этого построим аналог оценочной функции F(S), рассмотренной нами для естественных систем счисления в § 1.9. Как и в случае получения Б-79.-15 225-
функции F(S), будем строить оценочную функцию в предположении, что в каждом разряде представле- ния числа используются ^-позиционные элементы и их сложность прямо пропорциональна числу их устой- чивых состояний. Для смешанной системы оценочную функцию можно выразитв следующим образом т $2$2 ••• 1 ‘ 2^/Iog2S/ ' /=1 * t t t При условии, что log2 (Si1 • S2 • ... функция G (W) показывает, во сколько раз оборудование, ис- пользованное при смешанной системе для представ- ления в машине некоторого диапазона чисел, больше оборудования в случае двоичной системы, представ- * ляющей такой же диапазон чисел. Теорема 5.1. Если F(S/.)<F(S/2)<...<F(SJ, F(\)<G(U7)<F(SJ. Доказательство. Убедимся в справедливости теоремы для случая двух и трех оснований, исполь- зуемых в смешанной системе. Из неравенства F(Si) < < ^(^)> или < < si. 21og2SZi 21og2SZj ’ следует, что l s, t, st *1 *1 ’Ч, ‘2 «Г ’ 21og2SA 21og2Sz'’ Добавим к обеим частям этого неравенства один раз величину t.Sit 2 log2 Si‘, а в другой раз величину ^210^4/ 226
В первом случае получим Л \ 2 log2 (S% • $£) < 2 log2 (thS. + t. S.), или S/i _ $;, = /; (5.) < *' + Sh 21og2 S% 2Io&\ ‘‘ 21og2(S%.s2!) Во"втором случае 2 log2 + tt SJ < it Sl2 2 log2 (S% • ), или t; S.- + f; t; S, S; >1 l| 12 Is *2 __ _____2g __ f C \ t. t, t; oino c 21og2(S/-.$/!) 210g2S£ ^10S2 4 . Но так как F(S(. ) < F(Sr ), to f; S; 4- t; S: S; 11 h lz h. F(S 'i =_________ts tf ' *3' 9 loo- 21og2(SA. S^) ^‘og2\3 Из этого неравенства аналогично предыдущему опре- делим F {S-) < $‘2 < ^<г t<8 * ^'г < 2 log2 (S’'• • S‘2) 2 log2 (S^ • S% • ) И T. Д. .Читателю предлагается методом полной математи- ческой индукции доказать справедливость теоремы для любого числа., групп разрядов и любых основа- ний, сопоставляемых этим группам. Смысл доказанной теоремы состоит в том, что смешанные системы по расходу оборудования зани- мают промежуточное положение между соответствую- щими каноническими системами. Например, система счета пятками по два требует большего расхода обо- рудования, чем двоичная система, но более эконо- мична по сравнению с пятиричной системой счисле- ния. В связи с этим можно утверждать, что переход от любой канонической системы с основанием S к смешанной системе описанного типа всегда (при S > 2) дает некоторую экономию оборудования. Наименьшее значение S может быть взято равным 6, так как шесть 15* 227
является первым целым числом, которое разлагается на множители, каждый из которых отличен от еди- ницы. Шестиричные разряды могут быть заменены группой из двух разрядов: одного двоичного и одного троичного. При этом расход оборудования на такую систему будет больше расхода на троичное представ- ление, но менщпе. расхода на двоичное представле- ние данного диапазона чисел. Вообще из того, что т t S= вытекает неравенство / (S) > Л’(Л’,) £=1 (2 = 1, 2, ... , т). Но с другой стороны, при любых tt max^GS), F(S2),..., F(Sm)}. ^оэтому всегда имеет место неравенство F(S)>O(W). В силу технических трудностей реализации эле- ментов с большим числом устойчивых состояний ин- тересно рассмотреть случай, когда все цифры сме- шанной системы кодируются двоичным кодом. Для канонических систем оценочная функция в этом слу- чае рассматривалась в § 1.9 (функция <J>(S), задавае- мая соотношением (1.19)). В случае смешанных систем аналогом этой функции является следующая оценоч- ная функция g { (^1) (^>г) ~Ь •— №т) __ Iog2(^.S^ ... S^) - m £/(-log2Sz. i=l где )(S) = k при S — 2k и X (S) = [log2 S] + 1 при S=^2ft. Аналогично тому, как это было доказано для функ- „ции G(W'), для E(U7) можно доказать следующую теорему. Теорема 5.2. Если 228
то Ф(\)<3(^ХФ(5/га). Доказательство. Если мы имеем систему счисления с основанием S = S^S^ ... s'™ и заменяем каждые q разрядов в записи числа в этой системе ее двоичным эквивалентом, то Е (U7) = Ы—,-----= 2=Х------.. , ™ t.q log2S log2 f] S/ /=1 Так как log2S(.<k(S(.)< log2^ + l и то log2 S < S // (Sz) < log2 S + S 1=1 Z=1 » tn Так как X(S) и JXH-S) являются целыми, то из по- /=1 лученного неравенства и того, что log2 S < X (S) < log2 S + 1, вытекает S(U<> > ф(5). Например, переход от десятичной канонической системы к двоично-кодированной двоично-пятиричной системе не меняет количества необходимого обору- дования, а переход от пятнадцатиричной канониче- ской системы к троично-пятиричной двоично-кодиро- ванной системе дает увеличение необходимого обо- рудования на 25%. § 5.2. Двоично-десятичное кодирование Наибольший практический интерес представляет собой смешанная система, в которой каждый разряд канонической десятичной системы заменяется q двоич- ными разрядами с весами рх, ... , pq. Такие системы 229
обычно называют -двоично-десятичными, системами или двоично-десятичными кодами. Как следует из функции Х(5), при 5=10 минимальное количество двоичных разрядов, с помощью которых можно полу- чить однозначное кодирование всех десяти цифр де- сятичной системы, равно четырем. Поэтому имеет смысл рассматривать только тот случай, когда <? > 4. ‘В основном мы ограничимся случаем, когда каждый (^десятичный разряд в записи числа заменяется группой из четырех двоичных разрядов. Эти четверки двоич- ных разрядов мы будем называть тетрадами.' Число различных двоичных тетрад равно 16, а число различных кодируемых десятичных цифр —десяти. В связи с этим -возникает возможность неоднознач- ного, выбора десяти тетрад из шестнадцати и неодно- значность сопоставления выбранных десяти тетрад десяти десятичным цифрам. Общее число различных способов кодирования (учитывая и абсолютно бес- смысленные, например, сопоставление одной двоичной тетраде всех 10 десятичных цифр) равно 29 миллиар- дам. Среди этого множества кодирований нам необ- ходимо отобрать лишь те способы кодирования, ко- I торые являются с некоторой точки зрения удобными для их использования в вычислительных машинах. Требования, которым должно удовлетворять дво- . ично-десятичное кодирование, при намерении исполь- зовать двоично-десятичную систему в вычислительной машине были впервые полностью сформулированы Рутисхаузером. Рутисхаузер потребовал, чтобы дво- . ично-десятичное представление удовлетворяло сле- дующим пяти требованиям. 1. Требование единственности. Каждой деся- тичной цифре должна взаимно однозначно сопостав- ляться некоторая двоичная тетрада. Выполнение этого требования необходимо для возможности работы с двоично-десятичным представлением и эффективности процесса декодирования. 2. Требование упорядоченности. Большим десятичным цифрам должны соответствовать большие двоичные тетрады. Возможно выполнение противо- положного требования: большим десятичным цифрам должны соответствовать меньшие тетрады. Необхо- димость выполнения этого требования связана с вы- 230
полнением в двоично-десятичном представлении опе- рации сравнения. 3. Требование четности. Четным десятичным цифрам должны соответствовать четные тетрады, а нечетным десятичным цифрам — нечетные тетрады. Возможно выполнение противоположного требования: четным десятичным цифрам должны соответствовать нечетные тетрады, а нечетным десятичным цифрам — четные тетрады (тетрада называется четной, если в крайнем правом разряде тетрады стоит нуль). Необ- ходимость выполнения требования четности вытекает из требований правильного округления при двоично- десятичном представлении и большей простоты вы- полнения операций деления, извлечения корня и не- которых логических операций. 4. Требование дополнительности. Если деся- тичные цифры at и «у таковы, что at + a,j = 9, то, если цифре az сопоставлена тетрада цифре а} должна быть сопоставлена тетрада в кото- рой mi получается из 7/zz заменой нуля на единицу и единицы на нуль. Выполнение требования дополни- тельности необходимо для возможности введения в двоично-десятичной системе аналогов дополнитель- ного и обратного кодов, используемых при операции алгебраического сложения. 5. Требование весомозначности. Должна су- ществовать такая четверка целых чисел рх, р2, Рг, р$, называемых весами, что для любой цифры at десятич- ной системы выполняется следующее: если есть- тетрада, сопоставляемая данной цифре при вы- бранном способе кодирования, то at = mipi -J- + m3jp3 + пцр4. (5.5) Выполнение этого требования облегчает логику опе- раций в двоично-десятичной системе и алгоритм де- кодирования. Целью наших ближайших исследований будет на- хождение всех кодов, которые удовлетворяют всем или почти всем из требований Рутисхаузера. С этой целью мы прежде всего рассмотрим коды, которые являются весомозначными. Кроме того, всегда в дальнейшем будем предполагать, что все коды; ко- 231
торые мы изучаем, обязательно обладают свойством единственности. При q двоичных разрядах число раз- личных кодов,- которые можно записать в этих раз- рядах, равно 2'7. Если при данном способе кодирова- ния мы используем только L кодов из этого множества, то говорят, что используемый код имеет длину L. Таким образом, при кодировании цифр q двоичными разрядами длина кода заключена в пределах 1 < L < 2’. Число различных кодов длины L оценивается как . - (5.6) L (2<> — Z.)! V ’ Свойства кодов, удовлетворяющих требованию весо- мозначности, были исследованы И. Клиром. Им же была получена полная таблица всех весомозначных кодов при д = 4 длины десять. Как следует из соот- ношения (5.6), общее число кодов с такими парамет- рами равно 161:6! Однако большинство из этих ко- дов не является весомозначными. Для нахождения всех весомозначных кодов рассмотрим.. некоторые свойства, которым такие коды должны удовлетворять. . Прежде всего условимся в дальнейшем, что веса, сопоставляемые разрядам, упорядочены так, что рь Pk^-> если номер разряда kx больше номера раз- ряда Л2, т- е- Теорема 5.3. Для всех весов pk справедливо нера- венство Доказательство. Из условия упорядоченности весов по величине следует, что теорему необходимо доказать лишь для веса pQ^-, стоящего в левом стар- шем разряде. Сначала рассмотрим случай, Когда все веса являются положительными и р t = 2?-1 -J- г. Тогда для всех чисел х< 2?-1 + г + 1 соответствую- щие им двоичные коды должны иметь в старшем раз- ряде цифру нуль. Но 'в (q — 1)-м разряде при двоич- ном кодировании можно получить только 2?-1 раз- личных комбинаций. Таким образом, г не может быть положительным числом/ Для случая положительных весов теорема доказана. 232
Пусть теперь среди весов имеется z штук отри- цательных весов. Тогда для всех х < 29"1 + г — 2Z + 2 в старшем разряде двоичного кода должна стоять цифра нуль. Двоичные числа, для которых цифра, стоящая в Z-м разряде, равна нулю для всех- i > z — 1 у, для которых цифра, стоящая в i-м разряде, равна 1 для — 1, образуют множество, состоящее из 2?-1 — 2Z + 1 числа. Отсюда следует, что г не может быть положительным. . Следствие. Из доказанной теоремы следует, что при наличии отрицательных весов длина кода удовлетворяет неравенству Z < [29 — 2Z-J-1], которое может быть записано в другой форме как z < [log2'(2? —£ + 1)]. (5.7) Теорема. 5.4; Для кодов, имеющих только положи- тельные веса, справедливо неравенство} fe-i + 1 (5.8) /=о и 7’о = 1. Если для данного кода имеется z отрица- тельных весов, то справедливо неравенство ь—1 1л1< Ш1 + 1 (5-9) /=о и \р0\<^-^. Доказательство. Докажем справедливость теоремы для случая положительных весов. Если pQ > 1, то в силу договоренности об упорядочивании распо- ложения весов pt > 1 для всех I. Но это означает, что с помощью данного набора весов невозможно записать цифру 1. Таким образом, 1. .Если же для некоторого i не выполнено неравенство .(5.8), то из этого следует невозможность представления в данной системе весов всех чисел, величина которых лежит в пределах от ^-_i + Д_2 4- ... + р0 до pt. Для случая, когда среди весов кода есть отрица- тельные веса, справедливость теоремы вытекает из следующего. Если неравенство (5.9) не выполняется 233
для некоторого i — z, то с помощью такой системы весов невозможно представить число 1, если же оно не выполняется для некоторого i > z, то. число вида У/?у + 2 не может быть представлено в данной си- стеме весов. Справедливость неравенства (5.9) при I < z гарантируется соглашением об упорядочении весов в записи числа. Справедливость неравенства для |jpo | вытекает из следующего. Если 2 = 1, то с по- мощью (q— 1)-го положительного веса можно пред- ставить самое большее 29-1 различных чисел. Если х число меньшее, чем L, то 2?-1 — х число большее L (или равно ему). Отрицательный вес р0 может быть использован только при записи чисел, которые больше, чем |р0|. К таким .числам относятся числа вида /?0+ 1» р0 + 2, ... , L — 1 и все ' числа, не меньшие, чем L. В первое множество входит Z —1 +[/?0| чисел, а во второе множество, следовательно, входит х + L — 1 — —1/?0| + 2?-1 — x = L — 1 — |/>0| + 2?-1 число. Тем са- мым мы показали, что |/?0|<29-1 — 1 действительно справедливо. «’ Если число отрицательных весов больше единицы, то все рассуждения аналогичны при условии, что из множества положительных чисел необходимо вычесть множество отрицательных чисел, получающихся за счет использования рассматриваемого множества отри- цательных весов. Легко посчитать, что если число отрицательных весов есть z, то число этих чисел равно 2г-1 — 1. Теорема 5.5. Если множество весов содержит j раз вес, равный, по абсолютному значению pjt то ч £<2(/+1А (5.10) /-1 где 7=1, 2, .;. , q. Справедливость утверждения очевидна. Теорема 5.6. Для фиксированного q существует только один весовой код, длина которого равна 29. Веса этого кода удовлетворяют условию pt = 2l. Доказательство. Из соотношения (5.7) выте- кает, что код длины 29 может существовать только при 2 = 0, т. е. только при множестве весов, среди 234
которых нет отрицательных весов. В соответствии <7-1 € тем, что 1, и условием (5.8) получаем z=o результат теоремы. Из перечисленных теорем вытекает метод построе- ния весойозначных кодов. Перед тем как указать последовательность правил, приводящих к перечисле- нию всех весомозначных кодов, введем важное для дальнейшего понятие. Определение 5.3. Коды, получающиеся друг из друга простой перестановкой весов, образуют кодо- вую группу или просто группу. Перейдем теперь -к описанию процесса построения всех весомозначных кодов, удовлетворяющих требо- ванию единственности. Этот процесс состоит в вы- полнении следующих пяти шагов. 1. В соответствии с теоремой 5.4 выбирается до- пустимое значение-веса р0. Выбираются все такие веса. 2. Для выбранного р0 выбирается рг так, чтобы удовлетворялось неравенство (5.8) или неравенство (5.9). Путем перебора для данного р0 выбираются все возможные значения рг. Это же делается для всех других-значений р0, полученных на'первом шаге. Да- лее по множеству (pj строится множество допусти- мых значений р2 и т. д. 3. Перебор заканчивается, если перестают выпол- няться неравенства (5.7), (5.10) или условия теоре- мы (5.3). 4. Из построенных множеств весов отбрасываются те, которые не удовлетворяют неравенству <7-1 i—z 5. Найденные множества весов проверяются на ус- ловие, что с их помощью можно представить все не- обходимые числа. В нижеприведенной таблице указаны все 86 групп весомозначных двоично-десятичных кодов, использую- щих для кодирования десятичных цифр двоичные тетрады. 235
♦ « • • 1 ос?о<Т5СЯС?оо^*^*^*^*^*^^^^^‘М*^*4^*^сооооооооооооооооооо 00'00 оооооосооооооооо £ »₽,^еЛСЛСЛСЛСЛК>ЬЭГСКЭй5СС«^14а.£>»₽>СЛСЛСЛСЛС51-‘КЭ1'ОМСС»^»₽>>»ь»₽>145.»₽>»₽>£>Ф»>й'СпСпСПС5^ 1 ъ w 11“ 1 1 1 1 1 1 1 III оосо^юоосс^»—юю»--со>—^оло^гогоюю»--*-'»—totoiotowcoioto*—'—to \ ♦ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 .1 1 1 1 1 1 1 1 1 II 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 СлЮСл5^^^С^Ф*С^^00101—к»— ГО Ю >—1»—‘СОО5Ф^О0Сл^^^|4л>Ф*СО ГО; О) ГО<^СО^*^СТ>ГО^и₽»>^Ф*Ф* s> СлЭ 4й, Ц^.ир* 4^4*^|4^|4^СЛСп(^СлСЛСЯСЯСлСлСпСпСлСлСЛСлСпС)СПа5О^С)С75СПСПСГ!>С?О)СПО5СПСГ)С?С?О5 3> WbOCOCOCO^^^k>NONObDCOWCOWW^^^^h>^^^tON3tOlONOCOWC^WCOWCA?CO>^^^b>b> * s> КЭК51—КЭЬЭ,—К5КЭЫ1—КЭЬЭ1-‘1--‘>-‘ЬЭкТ|--‘ЬЭК>КЭЫЫОО>-*^>-1ЬЭЬЭ^->-‘>- 5> 1 11'1 1 II' 1 1111 Г 1 1 1 1 1 1 III III 1 I 1 1 ЬЭ1— WWMHII-HWMMWWW S И *. И № >- i-itO>-i-‘K(s.K>-**-‘WWW'-‘|-‘ S> Таблица 5,1
Теперь рассмотрим проблему построения кодов, удовлетворяющих не только требованию единствен- ности и требованию весомозначности, но и таких, для которых выполнено свойство дополнительности. Мно- жество этих кодов является подмножеством кодов, приведенных в табл. 5.1. Теорема 5.7. Для того чтобы весомозначный, код с положительными весами, для которого выполнено свойство единственности, удовлетворял бы требова- нию дополнительности, необходимо и достаточно, чтобы цифра 9 кодировалась тетрадой 1111 (т. е. сумма весов кода была бы равной девяти). Доказательство. Необходимость теоремы оче- видна. Для доказательства достаточности заметим., что если условие теоремы выполнено и некоторой цифре а, сопоставлена тетрада т^туп-ртц,, то цифре 9 —убу- дет сопоставлена тетрада 1111— тът2тхт0 — т^т^т^т^. Теорема доказана. Все коды, для которых выполнено одновременно требование единственности, весомозначности и допол- нительности, приведены в следующей таблице. Таблица 5.2 № Веса 1 5 2 11 2 4 3 1 1 3 4 2 2 1 4 3 3 2 1 Эта таблица получена из табл. 5.1 путем выбора из нее только тех кодов с положительными весами, которые удовлетворяют требованию дополнитель- ности. Рассмотрим теперь коды с одним отрицательным весом и найдем все коды, удовлетворяющие условию дополнительности. Как и для кодов с положительными весами, необходимым условием дополнительности кода является кодирование цифры 9 тетрадой 1111. Однако это условие уже не является достаточным. Для на- хождения достаточного условия докажем предвари- тельно несколько вспомогательных лемм. Условимся
веса, сопоставляемые разрядам тетрады, обозначать как р4, Рз> Р2. Pi- Предварительно заметим, что при наличии одного отрицательного веса (мы в дальнейшем будем .пред- полагать, что отрицательным весом является вес pj при кодировании десятичных цифр нельзя использовать тетраду 0001 и дополнительную к ней тетраду 1110. Таким образом, если требовать дополнительности ве- сомозначного кода, то число различных тетрад, кото- рые можно использовать для кодирования десятичных цифр, равно 14. Лемма 5.1. Не существует весомозначного кода с одним отрицательным весом, для которого бы было «выполнено свойство дополнительности, если все по- ложительные веса этого кода равны между собой. Если р2 = рг= р4, то тетрады 1000, 0100, 0010 ко- дируют одну и ту же десятичную цифру. По свойству дополнительности тетрады 0111, 1011, 1101 также ко- дируют только одну цифру. Аналогичное утвержде- ние верно и для тетрад 1100, ОНО и им дополнитель- ных ООН и 1001. Наконец, вышеприведенное утверж- дение справедливо и для тетрад вида 0101, 0011 и дополнительных к ним 1010, 1100. Учитывая это, можно утверждать, что при равенстве между собой всех трех положительных весов нет возможности обеспе- чить однозначное кодирование всех десяти цифр. Лемма 5.2. Для всех р1 имеет место pt < 8, где pL — положительные веса данного весомозначного кода. Предположим, что р4>8. .Тогда тетрады 1010, 1100 и 1000 не могут ’ быть использованы, ибо они кодируют цифры, не меньшие, чем цифра 9. Для циф- ры 9 необходимым условием является кодирование этой цифры тетрадой 1111. Поэтому нет возможности использовать при кодировании три вышеприведенные тетрады и три тетрады, дополнительные по отноше- нию к ним. Оставшегося числа тетрад (восемь) недо-- статочно для однозначного кодирования цифр. Лемма 5.3. Если в весомозначном коде есть два равных положительных веса, то их сумма не превос- ходит девяти. Пусть Ръ = р4 и р3 + р4 > 9. Тетрада 1100 при та- ком условии использована быть не может, а тетрады 1000 и 0100, а также дополнительные к ним- 0111 и 238
1011 дают одинаковое число.,Аналогичное утвержде- ние имеет место и для тетрад 1001 и 0101 и допол- нительных к ним ОНО и 1010. Оставшиеся тетрадыне обеспечивают однозначного кодирования всех деся- тичных цифр. Лемма 5.4. Сумма положительных весов весомо- значного кода с одним отрицательным весом не превосходит пятнадцати. Пусть + ръ + pt > 16. Отсюда Р2>16-Рз—А. А>16~ А~ А» р4> 16—А—А- Используя лемму 5.2, получим А + А > 8> А*+ А 8’ А + А 8 или А-А>0, А“А>0. А” А>0, -А — А>0, А~А>0. А-А>0- Система этих неравенств эквивалентна равенству А==А=А’ которое противоречит лемме 5.1. Лемма 5.5. Среди положительных весов весомознач- ного кода с одним отрицательным весом есть хотя бы- один вес, не превосходящий трех. Предположим противное. Пусть для всех положи- тельных весов справедливо, что pt > 3. Тогда “ А+А>6. А + А>6, А+А>6. В силу свойства дополнительности из этих неравенств вытекает, что Pi + А < 3, а+а<з, А + А < 3. Исходя из леммы 5.1, можно утверждать, что левые части этих неравенств не могут совпадать между собой. Кроме того, равенство pi + Pi=Q (1 = 2, 3, 4) невозможно, так как при этом число тетрад, с по- 239
мощью которых представляются десятичные цифры, ' меньше десяти, Поэтому I Pi + А = 2’ Но, pi + р2 + Ръ + = 9 и, подставляя в это равен- ство р2 и р5, выраженные через р\, получим р± — — Pi — 6. Но тогда 3 < р^ < 4. Повторяя аналогичные рассуждения относительно весов р2 и Pi > получим 3 <д-<4,5 (г = 2, 3, 4). Или р2 = Ра ~ А = 4. Это равенство противоречит лемме 5.1. Теорема 5.8. Существует только семнадцать групп. двоичмо-десятичных кодов, обладающих свойствами единственности и дополнительности. Эти коды получаются из табл. 5.1 путем выбора кодов, удовлетворяющих условию 10<р2+р3+р4 < 15 и условиям лемм. Все семнадцать групп кодов при- ведены в нижеследующей таблице. Таблица 5.3 № Веса кода 1 8 4 3 -6 2 8 4 2 -5 3 8 3 2 —4 4 7 5 3 —6 5 7 5 1 —4 6 7, 3 1 —2 7 6 5 2 —4 8 6 5 1 —3 9 6 4 2 -3 10 6 4 1 —2 11 6 3 2 —2 12 6 3 1 -1 13 6 2 2 —1 14 5 4 3 —3 15 5 3 2 —1 16 4 4 3 —2 17 4 4 3 —2 Теперь рассмотрим задачу о нахождении всех ко- дов, удовлетворяющих свойству дополнительности для кодов с двумя отрицательными весами. Будем предполагать, что веса рх и р2 являются отрицатель- ными, а веса р3 и р4— положительными. Тогда тетра- ды 0001, 0010, ООП и дополнительные к ним 1110, 240
1101, 1100 не могут быть использованы при кодиро- вании десятичных цифр. Таким образом' количество различных допустимых тетрад равно 10. Из того, что тетрада 1111 сопоставляется цифре 9, 'следует, что Рз + Р1~ 9 + IaI + IaI • Это равенство возможно только при выполнении неравенства р.А + р4 > 11. С дру- гой стороны, по-прежнему справедлива лемма 5.2. Таким образом, имеет место неравенство 11 <ps + + Р4< 16. Лемма 5.6. Один из двух положительных весов должен быть равен восьми. Предположим противное: р3 < 8 и р4 < 8. Тогда среди них нет веса, равного единице, ибо р&+ р4> 11. Отсюда для кодирования единицы необходимо pt + + Ру=1, где /== 1, 2, а / = 3, 4. Из этого равенства в силу свойства дополнительности вытекает pk + рт—8, где k и т определяются следующим образом I 2, i = 1, 14,/ = Однако равенство pk + рт = 8 в силу предположения невозможно. Лемма 5.7. Один из отрицательных весов должен равняться —1, а второй отрицательный вес должен быть равен 2—Pi, где pt — положительный вес, отлич- ный от восьми. Для доказательства леммы заметим, что из лем- мы 5.6 следует р4 = 8 и условие рг + Р2 + Рз + Pt = 9 принимает вид А+/?3= 1. Закодируем в данной системе весов цифру два. -Это кодирование возможно осуществить лишь одним из следующих двух спосо- бов: Рз + Р1 = 2 или 8+рг = 2 г = 1, 2. В силу допол- нительности одновременно с этими равенствами должны соответственно выполнять равенства 8 + pt = 7 или />з + р/ = 7. Из первой пары равенств. следует, что />! = — 1 и Pj = 2 — р3. Из второй пары равенств сле- дует, что Pi= — 6 w. pj = 7 — р3. Но так как />3<7, то второе равенство не дает решения. Теорема 5.9. Существует только две группы весо- мозначных двоично-десятичных кодов, обладающих £войствами единственности и дополнительности. Доказательство. Эти коды получаются из табл. 5.1 путем просмотра кодов с двумя отрицатель- Б-79.—16 ' 241
ными весами, удовлетворяющих лемме 5.7, и одним положительным весом, равным 8. Эти два кода суть коды 86 (-1) (-4) и 84(—2) (—1). Из теорем 5.7^5.8 и 5.9 вытекает, что имеется только 23 группы двоично-десятичных кодов, которые обладают свойствами весомозначности, дополнитель- ности и единственности. Эти группы кодов пере- числены в табл. 5.2 и 5.3 и в доказательстве тео- ремы 5.9. Рассмотрим теперь требование упорядоченности. Теорема 5.10. Если среди весов весомозначного кода есть хотя бы один отрицательный вес, то требова- ние упорядоченности не выполняется. Доказательство. Пусть вес рх является отри- цательным. Тогда тетрады для х1 и х2 т4т3т/) и т4т3т2\ находятся в. отношении m4m3m20 < m4m3m2l. На при этом кодируемые цифры находятся в отноше- нии Xj > х2, если цифре сопоставлена тетрада т4тйт.$, а цифре х2 — тетрада m4/n3m2l. Пусть pt (i ф 1) есть положительный вес (для определенности •возьмем 1 — 4). Тогда тетрада 1т3т2тг больше тетра- ды 0т3т2т1 и аналогичное отношение имеется между кодируемыми этими тетрадами цифрами. В силу этого- для весомозначных двоично-десятичных кодов, имею- щих отрицательные веса, требование упорядоченности; не может быть выполнено. Таким образом, четырем требованиям из пяти тре- бований Рутисхаузера удовлетворяет только четыре- группы кодов 5211, 4311, 4221 и 3321. В каждой из групп можно брать различные коды, производя пере- становку весов. Для йервой группы возможные ком- бинации порядка весов следующие: 5211, 5121, 5112, 1125, 1215, 2115, 1512 и т. д. Однако, учитывая тре- бование упорядоченности, мы можем использовать только коды 5211,5121. Аналогично для группы 4311 мож- но использовать лишь код 4311. Для оставшихся двух групп можно использовать коды 4221, 2421, 3321. Эти. коды приведены в нижеследующей таблице 5.4. Из рассмотрения этой таблицы вытекает следую- щая теорема. Теорема 5.11. Существует только два двоично- десятичных кода, удовлетворяющих требованиям Ру- тисхаузера. 242
Таблица 5.4 Цифры 5 2 11 5 12 1 4 3 11 4 2 2 1 2 4 2 1 .3 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 2 0 0 11 0 0 10 0 0 11 0 0 10 0 0 10 0 0 10 3 0 10 1 0 0 11 0 10 0 0 0 11 0 0 11 0 0 11 4 0 111 0 111 0 10 1 0 110 0 10 0 О 1 0 1 5 10 0 0 10 0 0 10 10 10 0 1 10 11 10 10 6 10 10 110 0 10 11 110 0 110 0 110 0 7 110 0 110 1 110 0 110 1 110 1 110 1 8 1110 1110 1110 1110 1110 1110 9 1111 1111 1111 1111 1111 1111 Как следует из табл. 5.4, эти два кода суть коды с весами 4221 и 2421. По тетрадам, используемым для кодирования, они отличаются только в тетрадах, используемых при кодировании цифр 4 и 5. Эти два кода принято называть кодами Эмери. Один из них (код 2421) был использован впервые швейцарской вычислительной машине, а затем получил достаточно широкое распространение. Свойства этих кУ>дов будут рассмотрены в § 5.4. Иногда к двоично-десятичным кодам предъявляются требова- ния, отличные от требований Рутисхаузера. Примером такого тре- бования является требование однозначного представления. По определению код удовлетворяет требованию однозначного пред- ставления, если каждой десятичной цифре может быть сопостав- лена при данном множестве весов только одна из шестнадцати тетрад. Примером кода, не' удовлетворяющего требованию одно- значности, может служить код 2421, в котором запись цифры 2 может выглядеть и как 1000, и как 0010. Лемма 5.8. Если веса кода положительны, то единственным двоично-десятичным кодом, удовлетворяющим требованию одно- значности, является код прямого замещения. Если все веса кода' положительны, то для кодирования циф- ры 1 необходим вес, равный единице. Для кодирования цифры 2 необходим вес, равный либо • единице, либо двум. Однако вес, равный единице, брать нельзя, так как такой вес уже есть и при наличии двух одинаковых единичных весов цифра 1 не будет кодироваться однозначно. Следовательно, второй вес может быть равен только двум. Далее, третий вес может быть равен двум, трем или четырем, ибо в противном случае будет невозможно за- кодировать цифру 4. Из этих весов необходимо выбрать вес, рав- ный четырем, так как в противном случае однозначность нару- шается. Наконец, при выборе четвертого веса единственной воз- можностью является выбор веса, равного восьми. 16* 243
Для кодов, имеющих отрицательные веса, критерий однознач- ного кодирования формулируется в следующей теореме, которую мы приводим без доказательства. Теорема 5.12. Для того чтобы система весов pt, ра, р&, р± давала однозначное представление десятичных цифр, необходимо 4 . и достаточно, чтобы неравенство^^Pt^Q выполнялось бы Г=1 для любых значений ₽,, взятых из множества {—1, 0, 1}, кроме случая, когда все берутся равными нулю. В нижеследующей таблице перечислены двоично-десятичные -коды, удовлетворяющие требованию однозначности. Таблица 5.5 Код № Код 1 2 3 4 J5 6 7 8 9 10 11 8 4 3 —6 8 6 1—4 8 4 2 —3 8 2 1—4 8 5 2 —4 8 4 2 —1 7 6 3 -5 8 4 3 -2 8 4 1—2 8 4 2 —5 8 3 2 —4 12 13 14 15 16 17 18 -19 20 21 22 8 4 1—6 7 5 3 —6 6 5 3 —7 8 1-2—4 8 6—1—4 8 7-2-4 8 3-2—4 8 4-2-3 8 2—1—4 8 5—2—4 8 4 2 1 Существует еще группа кодов, которые хотя и не удовлетворяют требованию весомозначности, но ока- зываются просто связанными с каким-либо весомо- значным кодом, обладая при этом весьма удобными: свойствами, связанными с простотой арифметических операций в таких кодах. Среди подобных кодов наи- более известны коды с. избытком относительно кода прямого замещения. Эти коды -получаются из кода прямого замещения с помощью добавления к каждоиГ тетраде кода прямого замещения некоторого постоян- ного числа, называемого избытком. В нижеследующей таблице приведены некоторые коды с избытком отно- сительно. кода прямого замещения. Кроме кодов, приведенных в этой таблице, воз- можны еще коды с избытком 11, 12, 13, 14 и 15. Од- нако все коды, начиная с кода с избытком 7, неинте- ресны для рассмотрения, так как все они не удовле- 244
Таблица 5.6 Избыток Кол 8421 . 1 2 3 4 5 6 7 8 9 10 0000 0001 0010 ООП 0100 0101 оно 0111 1000 1001 1010 0001 0010 ООП 0100 0101 оно 0111 1000 1001 1010 1011 0010 ООП 0100 0101 оно 0111 1000 1001 1010 1011 1100 ООП 0100 0101 оно 0111 1000 1001 1010 1011 1100 1101 0100 0101 оно 0111 1000 1001 1010 1011 1100 1101 1110 0101 оно 0111 1000 1001 1010 1011 1100 1101 1110 1111 оно 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0111 1000 1001 1010 1011 1100 1101 1110 1110 0000 0001 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 ООП творяют требованию упорядоченности. Коды с избыт- ками, меньшими семи, удовлетворяют требованиям единственности, четности и упорядоченности. Но лишь один из этих кодов (код с избытком три) удов- летворяет требованию дополнительности. Свойства кодов с избытком тесно связаны со свойствами кодов, имеющих отрицательные веса. Эта связь выражается в том, что для каждого кода с отрицательными ве- сами. сумма отрицательных весов представляет собой некоторый избыток над кодом с соответствующими положительными весами. Например, код 84 (— 2)(— 1) и код 8421 + 3 (код с избытком три) связаны между собой так, как показано в нижеследующей таблице. Таблица 5.7 Код Код Цифры 84 (-2) (-1) с избытком 3 0 0 0 0 0 0 0 11 1 0 111 0 10 0 2 0 110 0 10 1 3 0 10 1 0 110 4 0 10 0 0 111 5 10 11 10 0 0 6 10 10 10 0 1 7 10 0 1 10 10 8 10 0 0 10 11 9 1111 110 0 245
Если через т3 и т4 обозначить цифры, стоящие в*разрядах кода 84(—2)(—1), соответствующих отри- цательным весам, а через /3 и /4 — цифры кода с избыт- ком три, стоящие в соответствующих разрядах, то, как это следует из вышеприведенной таблицы, имеют место равенства т3 = 13 и т4 = 14, где черточка озна- чает операцию инвертирования. Эти соотношения ока- зываются верными для любых кодов с отрицатель- ными" весами и любых избыточных кодов. Таким обра- зом, коды с отрицательными весами можно рассмат- ривать как некоторые избыточные коды, в которых произведено инвертирование содержимого разрядов, соответствующих отрицательным весам кода. Если, например, необходимо построить код с избытком три относительно кода 6521, то это равносильно построе- нию кода 65 (—2)(—1) и взятию инверсных значений цифр последних двух разрядов тетрад. Коды с избытком существуют не только для двоично-десятич- ных' кодов, в которых десятичные цифры кодируются двоичными тетрадами, но и для кодов с большим числом двоичных разрядов, используемых для кодирования десятичных цифр. Как показал И. Дробглав, каждый код двоично-десятичного типа однозначно соответствует некоторой функции вида <р(п) = а« + р, где п при- нимает значения от 0 до 9, а аир — целые-числа. При а = 1 мы по- лучаем коды, которые были названы нами кодами с избытком. Если требовать для кодов выполнения условия дополнительности, то для-функции р (п) должно быть выполнено равенство р(п) + + <₽ (9 — л) =- 2т — 1, где т — число двоичных разрядов, используе- мых для кодирования десятичных цифр. Этому условию удовлетво- ряют все коды, для которых значения а и р в соответствующей им функции Дробглава, находятся из соотношений 2m 1 — 9 (2/г — 1) Р= 2 • a —2k — 1, , , 2m + 8 В нижеприведенной таблице указаны коды с избытком, обладаю- щие свойством дополнительности. Число двоичных разрядов, используемых .для Избыток кодирования 4 3 5 * 41 6 27 7 59 246 § 123
Кроме кодов с избытком относительно кода прямого замеще- ния можно рассматривать коды с избытком относительно любого- весомозначного кода. До сих пор все рассматривавшиеся нами весомознач- ные коды обладали тем свойством, что веса кодов являлись целыми числами. В принципе требование «целостности» весов не является необходимым. Можно построить двоично-десятичные коды, в которых веса являются дробными. Примером такого кода является пентадный код, в котором веса соответственно рав- 16 8 4 1 2 „ ны —-, —, —, —, —-. Этот код определяется еле- О О О О О дующей таблицей. Цифра Код 0 0 0 0 0 0 1 0 0 111 2 - 0 10 0 1 3 0 10 10 4 0 110 0 5 10 0 11 6 10 10 1 7 10 110 8 110 0 0 9 1 1 Г1 1 Однако можно показать, что при тетрадном кодиро- вании коды с дробными весами существовать не могут^ Теорема 5.13. При потетрадном кодировании ве- сомозначные коды не могут иметь дробных весов. Доказательство. Рассмотрим несколько слу- чаев. Пусть вначале среди четырех весов есть дроб- ный вес р. Тогда тетрады 0001, .0011, 0101 и 1001, 1101, 1011 0111 и 1111 не могут быть использованы для кодирования целых цифр. Оставшихся тетрад не хватает для выполнения требования единственности. "Пусть теперь мы имеем два дробных веса рг и р2. Если Pi + р2 не является целым числом, то для коди- рования можно использовать лишь тетрады 1000, 1100, 0100, 0000. Если же рг + р% является целым числом, то к неиспользуемым тетрадам относятся тетрады 0001, 0010, 1001, 1010, 0101, ОНО, 1110 и 1101. Остав-
шихся тетрад для кодирования десятичных цифр не- достаточно. При трех дробных весах рг, р2 и ps следует рас- смотреть только тот случай, когда попарные суммы дробных весов есть целые числа. Если это не так, то легко видеть, что для кодирования десятичных цифр тетрад не хватает. В • рассматриваемом же случае нельзя использовать тетрады 1100, 1010, 1001, 0100, 0010 и 0001. Однако, если рх + р2 — целое, то кроме указанных тетрад нельзя использовать тетрады 1111 и 1110. Аналогично и при А+А или Ра + Рз Целых. В .любом из 'Этих случаев тетрат для кодирования десятичных цифр недостаточно. Наконец, рассмотрим случай четырех дробных весов. В этом случае невозможно использовать тет- рады 0001, 0010, 0100 и 1000. Если никакая из парных сумму весов не равна целому числу, то тетрад для кодирования недостаточно. Если рг+р2 и р3+р4 — целые, то для кодирования нельзя использовать тет- рады 1110, 1101, 0111 и 1011. Таким образом, един- ственным случаем, который необходимо еще рассмот- реть, является вариант, при котором Pi+p2 —-целое число, а р3 + р4 —- дробное число. Но тогда для коди- рования десятичных цифр невозможно использовать тетрады 1111, ООП, 1110 и 1101. Оставшихся тетрад для кодирования десятичных. цифр недостаточно. Для кодов с дробными весами выполняется ряд интересных свойств, справедливость которых вытекает из теорем, доказанных выше для кодов с целыми весами. Среди этих свойств отметим следующие два важных свойства. 1. Если Р[ есть дробный вес, то не существует двух десятичных цифр, которые после двоично-деся- тичного кодирования отличались бы друг от друга только.в разряде, сопоставляемом этому весу. 2. Для кодов с дробными весами L < 2я-1. Задачи 1. Доказать, что число двоично-десятичных кодов, в которых каждая десятичная цифра кодируется в т двоичных разрядах, ко- торые обладают свойством дополнительности, равно 2га (2т _ 2) (2т — 4) (2т — 6) (2т - 8). 248 ~
2. Исследовать на требования Рутисхаузера коды с положи- тельными весами, для которых каждая десятичная цифра кодируется в пяти двоичных разрядах (пентадные коды). 3. Исследовать свойства кодов с избытком относительно кода Эмери 2421. § 5.3. Код прямого замещения и его свойства В этом параграфе мы рассмотрим код прямого замещения, в котором каждая десятичная цифра за- меняется двоичным йодом этой цифры, записанным в четырех двоичных разрядах. Весами такого кода являются числа 8,4,2,1. Код прямого замещения удов- летворяет всем требованиям Рутисхаузера, кроме тре- бования дополнительности. Для кода прямого заме- щения характерно то, что количественный эквивалент любой тетрады, используемой для кодирования деся- тичных цифр, в точности равен количественному экви- валенту самой этой цифры. Никакой другой двоично- десятичный код таким свойством не обладает и это ' делает код 8421 интересным с точки зрения возмож- ностей его использования в вычислительных машинах. Рассмотрение свойств кода 8421 начнем с описа- ния алгоритма сложения для этого кода. Правила десятичного сложения имеют следующий вид = + если xk+yk + zk<\Q', (511) \*к+Ук + гк — 10’ если xk+yk + zk-> 10, 1 } Z = f °’ если Хк + Ук + zk < 10; k+1 I 1, если хк + ук + zk 10. Здесь хк и ук означают значения десятичных цифр в данном разряде, гк — перенос в данный разряд из соседнего мла’дшего разряда, a sk и zk+i означают соответственно десятичную сумму в данном разряде п перенос в старший соседний разряд. Так как мы хотим, чтобы при использовании кода 8421 правила сложения были бы идентичными прави- лами десятичного сложения, то нам необходимо в тех случаях, когда сумма в данном разряде становится равной или большей десяти, записывать в данном разряде тетраду, соответствующую цифре хк + ук + + zk— 10, и организовывать перенос в соседнюю слева ' тетраду. Перенос в соседнюю тетраду из данной воз- никает только в том случае, когда число в данной 249
тетраде превысит значение 16. Таким образом, пере- нос из данного разряда двоично-десятичной записи в соседний разряд эквивалентен прибавлению 16 в данную тетраду. В соответствии с этим правила сложения в коде 8421 выглядят следующим образом: I xk + Ук + zk > если xk + yk + zk < 10; sk = { xk +Уь + zk~ 10 + 16 ==xk +yk + zk + 6, (5.12) | если xk + yk + zk > 10. Так как при этом в вычислительной машине в данном разряде всегда получается правильный результат при xk + Ук + zk < Ю, то для таких разрядов поправки после суммирования не требуется. В разрядах, где при суммировании в десятичной системе происходит * переполнение, при суммировании в коде, прямого за- мещения могут быть два случая. Если сумма в дан- ном разряде меньше 16, то этот результат записан в виде тетрады с количественным эквивалентом, рав- ным полученной системе. Из этой тетрады необходимо вычесть 10 и организовать перенос в соседний раз- *ряд. Для этого к полученной "тетраде нужно добавить’ поправку +6. Если-сумма в данном разряде оказалась большей чем 16, то перенос в соседнюю тетраду уже возник. Однако в этом случае в данном разряде стоит тетрада, соответствующая не xk + yk + zk— 10, а тетрада, соответствующая результату xky-yk-yzk—16. Для получения правильного результата необходимо к результату, получаемому в данном разряде, доба- вить поправку + 6. Итак, при суммировании в коде прямого замеще- ния правила сложения имеют следующий вид. 1. Происходит потетрадное суммирование по пра- вилам двоичного сложения с передачей переноса между тетрадами, если таковые возникают. 2. В те тетрады полученной суммы, в которых произошло десятичное переполнение, необходимо до- бавить поправку плюс шесть. Показателем необходимости добавления поправки служит перенос из ’ данной тетрады, возникший на первом этапе суммирования, или в случае его отсут- ствия наличие в данном разряде комбинации единиц в крайнем левом разряде и любом из двух” соседних правых разрядов. 250
Пример 5.1. Сложить в коде прямого замещения числа (х>10 = 1052 и (_у>10'= 2697. Переходя к концу прямого замещения, получаем <Х>2,10 = 0001 0000 0101 0010, (_у>2/10 =0010 ОНО 1001 0111. (х)2/10 =0001 0000 0101 0010 <Аю =0010 0110 1001 0111 ООП ОНО 1110 1001 0000 0000 ОНО 0000 введение поправки ' ООН 0111 0100 1001 Окончательный ответ {х = 3749. Пример 5.2. Сложить в коде прямого замещения числа (х)10 = 0,0579 и (j/)10 = 0,0609. Переходя к коду прямого замещения для число- вой части, получим (х)2/10=0000 0101 0111 1001, <у>2,10 =0000 ОНО 0000 1001. <лт>2(10 = 0000 0101 0111 1001 (_y>2',io = OtfOO ОНО 0000 1001 ’ 0000 1011 1000 0010 0000 ОНО 0000 ОНО введение поправки . " 0001 0001 1000 1000 Окончательный ответ (х + у)10 = 0,1188. При организации умножения можно пользоваться тем же методом, что и при обычном умножении с тем, однако, условием, что пока идет умножение на одну тетраду сдвига в сумматоре не происходит и при учете, что, если в i-м разряде тетрады множи- теля (f = 1, 2, 3, 4) есть единица, то это означает, что суммирование множимого самого с собой про- исходит 2‘-1 раз. Пример 5.3. Найти произведение в коде прямого замещения чисел (х)10 = 25 и (_У)ю = 42. Переходим к коду прямого замещения для данных чисел (х>2,10 = 0010 0101 и (_У>2/10 = 0100 0010. 251
0010 0101 в сумматоре 0000 0000 0000 0000+ 0000 0000 • 0010 0101 0010 0101 , 0010 0101 0100 1010 поправка 0000 оно 0101 0000 0010 0101 0111 0101 0010 0101 - 1001 1010 поправка 0000 оно 1010 0000 поправка оно 0000 0001 0000 0000 СДВИГ 0001 0000 0000 оооо 0000 0000 0010 0101 0001 0000 0010 0101 0000 0000 0010 0101 0001 0000 0100 1010 поправка 0000 оооо ооооо оно -0001 0000 0101 ОООО 1 0100 0010 Окончательный ответ (xy)io = 1050. Умножение в коде прямого замещения удобно реализовать по схеме, показанной на рис. 5.1. Оче- редная цифра множителя открывает или не откры- вает сопоставленный ей клапан, на второй вид кото- рого поступает множимое, умноженное на 1, 2, 4 или 8 с помощью схем умножения на два (СУг), которые реализуются довольно просто. При этом младшая цифра тетрады множителя управляет верхним клапа- ном, вторая цифра — клапаном К2 и т. д. Такая схема умножения называется обычно умножением по ме- тоду кратных. Так как для кода прямого замещения не выпол- няется требование дополнительности, то возникают большие затруднения при организации операции вы- читания и, как следствие этого, операции деления. Опишем производство операции алгебраического сло- жения. Каждому числу приписывается слева спе- 252
циальный знаковый разряд (или пара разрядов при модифицированном коде), в котором кодируется знак числа способом, аналогичным тому, который употреб- ляется в обычной двоичной системе счисления. Для отрицательных чисел вводится аналог обратного или дополнительного кода и формулируются правила сло- жения в таких кодах. Рассмотрим сначала правила сложения в обратном- коде. Каждое отрицательное число кодируется в обратном коде путем замены каждой тетрады в записи числа ее дополнением до 15. Таким образом, если в i-м разряде кода 8421 стоит количество, равное /, то при отрицательном кодируемом числе в обратном коде этого числа i-я тетрада соответствует количеству 15 — I. Правила сложения в соответствии с (5.11) принимают следую- щий вид. Если слагаемые имеют разные знаки, то в машине при суммировании в одном разряде обра- зуется сумма 15 — I + т. В зависимости от того, каков'знак результата, необходимо внести поправки. Если сумма отрицательна, то в. каждом разряде суммы должна стоять тетрада, соответствующая ко- личеству 15 —(Xj+_yf), и должны быть выполнены правила переноса, определяемые соотношением (5.12). В этом случае сложение идет по обычным правилам, совпадающим с правилами сложения двух положи- 253
тельных чисел. Проводя аналогичные рассуждения, можно получить правила сложения для двух осталь- ных случаев. Эти правила имеют следующий вид. При суммировании двух слагаемых с разными зна- ками, из которых положительное слагаемое больше отрицательного, необходимо после нахождения суммы йнвертировать ее, прибавить поправку + 6 в те раз- ряды, из которых переноса не Возникло, и инверти- ровать полученный результат. При суммировании двух отрицательных чисел необходимо предвари- тельно инвертировать их, найти сумму инвертиро- ванных слагаемых, прибавить поправку +6 ко всем тетрадам найденной суммы, инвертировать получен- ную сумму и прибавить поправку +6 в те тетрады, ^откуда не возникло переноса. Обоснование этих пра- вил суммирования предоставляется читателю. Пример 5.4. Используя обратный код, найти в коде 8421 сумму чисел (х)]0= — 607 и (_у)10 = 217. , <х>2/10 = 11.1001 1111 1000 (^>2/10 = 00-0010 0001 0111 + 11.1100 0000 1111 00.0000 ОНО 0000 поправка 11.1100 ОНО 1111 Окончательный ответ (х + _у)10 = — 390. Пример 5.5. Найти в обратном коде прямого за- мещения сумму чисел (х)1о = 4О6 и (_у>10 = — 207. <x>2,J0 =00.0100 оооо оно <J>2fio = n-n01 1111 1000 + 100.0001 1111 1110 00-0001 1111 1111 11.1110 оооо оооо 00.0000 оно оно 11.1110 оно оно ' 00.0001 1001 1001 Окончательный ответ {х +_у)10: инвертирование поправка инвертирование = 199. 254
Пример 5.6. Найти в обратном коде прямого за- мещения сумму чисел (л)10=—45 и = ~~ 548. <х>2/10 00-0000 0100 0101 , <_у>2/10 00.0101 0100 1000 ' 00.0101 1000 1101 00.0110 оно оно 00.1011 1111 ООП 11.0100 0000 1100 00.0110 ОНО 0000 11.1010 ОНО 1100 инвертированное первое слагаемое инвертированное второе слагаемое поправка инвертирование поправка Окончательный ответ (х +_y)io — 593. Вместо обратного кода можно использовать ана- лог дополнительного кода. В этом случае тетрады для отрицательного числа получаются путем допол- нения не до 15, а путем дополнения соответствую- щего положительного числа до 16. Код прямого замещения использовался в ряде машин в качестве основного машинного кода. Однако, как это вытекает из вышесказанного, код 8421 не слишком удобен из-за сложной логики операции ал- гебраического сложения и, как следствие этого, сложной логики операции деления. Существуют дру- гие двоично-десятичные коды, дающие' более эффек- тивный результат при использовании их для произ- водства машинных операций. Однако у кода прямого замещения есть одно важное свойство, которое ис- пользуется фактически во ' всех машинах, рабо- тающих в канонической двоичной системе счисления. Это свойство заключается в том, ч^о код 8421. яв- ляется весьма удобным для перевода десятичной записи чисел в двоичную запись этих чисел. При вводе десятичной информации в машину каждая де- сятичная цифра записывается в виде тетрады кода прямого замещения и перевод в двоичную систему осуществляется из двоично-десятичной записи числа. Этот перевод осуществляется в вычислительных машинах с помощью стандартных программ перевода или с помощью специального устройства перевода, выполняемого в виде схемы. Наиболее распространен- ная программа такого перевода устроена следующим 255
образом *. Пусть некоторое число в коде прямого замещения имеет запись х = а1а2.„ аи, где а — тетрада, стоящая в i-м разряде десятичной записи. В деся- тичной системе х = 10Г1 + а210~2 + ... + ап 10-", а в двоичной системе х = Р12-1 + р22“2 + ... + р4/12-4". Произведем следующие преобразования 10~1 = -15- = 15А5 = 2-4 + —5—, 2*10 2*10 2М0 24-102 2М 02 2М02 '“(г4 +’2*-ю)*'2«’+ 24-102 ’ ю-з _ _1&_ = г/_1_ + _6_\. -L + _Л_1 х 24-103 L\24 2М0 / 24- 24-102 J 10-"=—= 24-10" = p.i 6 \ 1 , V 1 । 6 \х \\ "\ 24 2М0 J 24 24 24-10"-V : X -1 [ 6 24 2М0" ’ Если полученные выражения подставить в выраже- ние х в виде десятичного разложения и привести подобные дроби,- то, беря для наглядности п = 9, получим х=±2Г— Аг + 24(— А2 + — А3 + [10 К103 2 103 8 + ±25д4+.„+±21д\]. 1Q4 4 100 * Для простоты мы рассматриваем только перевод правиль- ных дробей. 256 ♦ '
Здесь . А = 0, OjO^a^a^jO^ А2 — 0, Л9 = 0,000 000 00 Од Описанный способ перевода из десятичной системы счисления в двоичную в отличие от универсального алгоритма перевода, описанного нами в § 1.1, не тре- бует производства операции деления и занимает зна- чительно меньше машинного времени по сравнению с универсальным алгоритмом’перевода. Можно несколько изменить предлагаемый алго- ритм, который является не слишком удобным при создании схемной реализации переводящего устрой- ства. Пусть число х задано в двоично-десятичном коде прямого замещения. Применим к этой записи соотношение (1.1), учитывая, что каждый десятичный разряд теперь соответствует четверке двоичных раз- рядов. Применение соотношения (1.1) сводится к по- следовательному умножению тетрад на 10 и сумми- рованию получаемых произведений. Умножается на 10 тетрада (четырехразрядное число), стоящая в записи двоично-десятичного числа. Результат умножения прибавляется к соседней справа тетраде. Полученная сумма умножается на 10 и при-* бавляется к тетраде, стоящей в третьем по старшин- ству разряде, и т. д. Умножение на 10 в двоичной системе может быть заменено умножением на 4 (сдвиг числа на два разряда влево), суммированием 4х и х и умножением полученной суммы на 2 (сдвиг на один разряд влево). Пример 5.7. Перевести число (х)10 = 2075 в двоич- ную систему описанным способом. Переходим к двоично-десятичной записи числа х (х)2/10 =0010 0000 0111 0101. Теперь последовательно применяем вышеописанный алгоритм. Б-79.—17 « 257.
, 0010 + 001000 умножение на 4 001010 , 0010100 умножение на 2 + оооо , 0010100 ' + ооююооо . умножение на 4 001100100 , 0011001000 умножение на 2 + 0111 0011001111 + 001100111100 умножение на 4 010000001011 ,0100000010110 умножение на 2 + 0101 0100000011011 / Окончательный ответ (х)2 —100000011011. Описанный метод позволяет избежать операции деления при переводе целых чисел и упрощает опе- рацию умножения за счет сведения ее к серий сдви- гов и суммированию. Задачи 1. Нарисовать схему умножения по методу кратных по анало- гии со”схемой, показанной на рис. 5.1, если, имеется две схемы умножения на два и одна схема умножения на пять. Выполнить по этой схеме умножение числа = 42 на число — 73. 2. Разделить в коде прямого замещения число = 52 на число ОХо = 16, учитывая, что умножение происходит по методу кратных 1, 2, 4, 8. § Б.4. Другие двоично-десятичные коды Несмотря на некоторые преимущества, код пря- мого замещения имеет ряд недостатков, связанных с довольно сложной логикой операции вычитания. Поэтому во многих вычислительных машинах исполь- зовались другие весомозначные двоично-десятичные коды. Естественно, что такие коды, как коды из табл. 5.2 или табл. 5.3,- оказывались более удобными для использования в машинах из-за того, что они обладали свойством дополнительности. Практически использовались в серийных машинах коды 2421, 5121 и коды с избытком 3 и избытком 6. . В настоящем 258
параграфе мы рассмотрим основные особенности опе- раций в таких кодах и обсудим вопрос о двоично- десятичных кодах, в которых десятичные цифры ко- дируются более чем в четырех десятичных разрядах. Рассмотрение кодов начнем с кодов Эмери (2421 и 4221). С точки зрения введения поправок при опера- ции суммирования коды 2421 и 4221 не идентичны и, как будет показано ниже, более простым кодом сле- дует считать код 2421. Обозначим через а(х) тетраду, сопоставляемую в данном коде десятичной цифре х. Тогда для кода 2421 имеем следующее условие а(х) = х, если х < 5; + 6, если х > 5. (5.13) Для кодов 4221 и 5121 аналогичные соотношения ‘выглядят следующим образом а(х) = а (х) = х , если х < 3; х -J- 2, если х = 4; х + 4, если х = 5; х + 6, если х > 5. х , если х < 3; х + 3, если х — 4,5; х + 6, если х > 5. (5.14) (5.15) Из этих соотношений уже видно, что код 2421 имеет более простую логику при организации операции суммирования по сравнению с кодом 5121 и особенно по сравнению с кодом 4211. Для нахождения правил сложения для кода 2421 рассмотрим несколько случаев суммирования двух положительных чисел. 1. Оба слагаемых в данном разряде меньше пяти. В этом случае в коде 2421 результат будет равен хй + yk + zk, где zk — перенос из соседней младшей тетрады. Если сумма < 5, то результат суммирования правильный. В противном слу.чае необходима поправка плюс шесть. 2. Одно слагаемое меньше пяти, а другое не меньше пяти. Сумма меньше 10. В этом случае в коде 2421 результат будет равен xk + yk + zk + 6. Поправка не нужна. 17* 259
3. Одно слагаемое меньше пяти, другое не меньше пяти. Сумма не меньше десяти. Максимальное зна- чение суммы 4 + 9+1 = 14. В этом случае в коде 2421 получается сумма xk + yk + zk + 6, что соответ- ствует коду числа- ^ + —10 и организации переноса в соседнюю старшую тетраду. Поправка не нужна. 4. Оба слагаемых не меньше пяти, а сумма мень- ше 16. В коде 2421 получается xk + yk + zk + 12. Необходима поправка минус шесть. 5. Оба слагаемых не меньше пяти, а сумма боль- ше 15. В этом случае в коде 2421 получается хй+уй+гй+12. Так как при этом xk + yk + zk — 10 < 5, »то, учитывая организацию переноса,, получаем, что поправки не требуется. Пример 5.8. Найти в коде 2421 сумму чисел (-’с)ю==634 и (у)10==372 (х)2/10 = 0000 1100 ООН 0100 <j>2/I0 = 0000 ООП 1101 0010- 0001 оооо оооо оно 0000 0000 0000 ОНО поправка 0001 0000 0000 1100 Окончательный ответ (х + у)10 = 1006. Пример 5.9. Найти в коде 2421'* сумму чисел (•^)ю ~ 472 и (_У\о = 367. <х>2/10 = 0100 1101 0010 <У>2/10 = 0011 1100 1101 1000 1001 1111 поправка 0110 1001 0000 11101 0010 1111 1110 ООН 1111 Окончательный ответ (х +_у)ю = 839. В этом примере поправка —6 в силу свойства дополнительности заменена на поправку + 9, являю- щуюся обратным кодом для тетрады —ОНО. В коде 2421 несколько усложнено решение воп- роса о выборе тетрад,* в которые необходимо при- бавление поправки после первого суммирования. Этот выбор должен происходить в соответствии с соот- ношением (5.13) и правилами сложения для этого кода. Поправка используется в двух случаях: оба 260
слагаемых меньше пяти, а сумма в данном разряде .больше пяти и оба слагаемых - не меньше пяти, а сумма меньше шестнадцати. Для нахождения тет- рад,. в которые необходимо прибавить с тем или иным знаком поправку, в сумматоре кода 2421 должны существовать специальные схемы управления, с по- мощью которых два вышеуказанных случая могли бы быть обнаружены. Умножение в коде 2421 осуществляется по обыч- ным правилам умножения двоично-десятичных чисел, и логика умножения практически целиком опреде- ляется логикой сложения. Пример 5.10. Найти в коде 2421 произведение чи- сел (л)10 = 24 и (j')io=41. Умножение осуществить по способу умножения с младших разрядов (х)2/10 = = 0010 0100, (jO2/1o=O1OO 0001 , 0000 0000 содержимое сумматор + 0010 0100 0010 0100 , 0000 0010 0100 сдвиг на одну тетраду вправо + 0010 0100 0000 , 0010 ОНО 0100 + 0000 ОНО 0000 поправка , 0010 1100 0100 + 0010 0100 0000 , 0101 0000 0100 + ОНО 0000 0000 поправка , 1011 0000 0100 + 0010 0100 0000 , 1101 0100 0100 + 0010 0100 оооо , 1111 1000 0100 + 0000 ОНО 0000 поправка 1111 1110 0100 (ху)ю = 984. Операция алгебраического сложения в коде 2421 по сравнению с кодом прямого замещения выпол- няется более просто. Это связано со свойством до- полнительности, которому удовлетворяет код 2421. Свойство дополнительности обеспечивает однообра- зие правил действий с числами различных знаков. Правила, сформулированные для сложения положи- 261
тельных чисел в коде 2421, оказываются справедли- выми в любом случае алгебраического сложения. Для определения знака числа перед старшей тетрадой записывается знаковый разряд или знаковый и кон- трольный разряды. По аналогии с двоичной системой в коде 2421 можно ввести обратный код. Обратный код получается дополнением каждой тетрады до 15. При работе с кодом необходимо пользоваться пра- вилами сложения в данном коде. Эти правила совпа- .дают с правилами сложения в обратном коде, кото- рые мы рассматривали в первой главе применительно к системам счисления, имеющим основание. Пример 5.11. Найти в коде 2421 сумму чисел ^)io = 4O2 и (j)io=— 41, используя представление в модифицированном обратном коде. ш КАчоЬм = ОО.оГбО 0000 0010 Ш К-УХток. = 111П1 10П НЮ 100.0011 1100 0000 ’______:__:____I 00.0011 1100 0001 00.0000 0000 0000 поправка 00.0011 1100 0001 Окончательный ответ {х +_у)10 = 36Г. - Пример 5.12. Найти в коде 2421 сумму чисел (х)ю ~ —- 621 и (j)io=lO7, используя представление в модифицированном обратном коде. - ш [<x>2/ioJ3M = ll-Q100 ШО 1111. ш KjWsm =00-0001 оооо 1101 11.0101 1111 1100 00.0110 0000 1000 поправка 11.1011 1111 1100 Окончательный ответ {х +j)”i0== — 514. Пример 5.13. Найти в коде 2421 сумму чисел == —167 и <_Р>ю = —293, используя представление в обратном модифицированном коде [<^>2/ю]зм = п-ИЮ ООП оою Ш [<Л/>2/ю1зм ='11-1101 ооро ноо 111.1011 ООП 1110 t______________I 11.1011 ООП 1111 00,0000 0000 0000 поправка 262 11.1011 ООП 1111
Окончательный ответ (х 4-j)I0 = — 460, Деление в коде 2421 выполняется по общей схеме деления, описанной во второй главе для обычной двоичной системы с учетом того, что каждая цифра частного должна быть представлена в виде тетрады. Из сказанного вытекает, что из двух возможных записей кода Эмери запись, характеризуемая распо- ложением весов 2421, более эффективна, чем запись, характеризуемая расположением весов 4221. Код 5121 по сравнению с кодом Эмери не имеет существенных преимуществ, хотя, как показали ис- следования М. Надлера, у этого кода есть некото- рые свойства, облегчающие выполнение операции умножения (для этого кода может быть сокращено число переносов между тетрадами). Коды 521.1, 4311 и 3321, определяемые так, как это показано в табл. 5.4, менее эффективны для ис- пользования в вычислительных машинах по сравне- нию с кодами Эмери или кодом 5121. Кроме' кода прямого замещения и кодов 2421 и 5121, в вычислительных машинах нашли применение и некоторые другие двоично-десятичные коды. Рассмотрим прежде всего два кода с избытком: код с избытком 3 и код с избытком 6. Для кода с избытком 3 правила сложения для двух положи- тельных чисел имеют следующий вид а(х) = (Xk+У*+Рь + 31 если х* +Pk<Ю; (5Д6) Ь/+Л+Рй + 9, если Jcft+jft+pA>10. Вторая строка в соотношении (5.16) получена из условия, что при xk 4- yk 4- pk 10 необходимо в дан- ном разряде иметь тетраду, соответствующую числу xk + Ук +А — Ю в коде с избытком 3 (т. е. выраже- ние xk +уА 4- Pk ~ 7), и организовать перенос в сосед- нюю старшую-тетраду, что соответствует прибавле- нию к данной тетраде числа 16. При суммировании тетрад данного разряда в ма- шине результат всегда равен xk 4- yk 4- pk 4- 6. Это означает, что для, кода с избытком 3 поправка необ- ходима во всех случаях. Если сумма в данном раз- ряде меньше десяти, то поправка равна минус трем, в противном случае поправка равна плюс трем. Так как для кода с избытком 3 выполнено свойство до- 263
полнительности, то поправка минус три может быть заменена поправкой + 12 с учетом передачи цифры переноса из старшего разряда тетрады (если он воз- никает) в младший разряд этой тетрады. Заметим, что для кода с избытком 3 легко опре- делить тетрады, в которые необходимо прибавить поправку +3. В этих тетрадах при первоначальном суммировании обязательно возникает перенос. Таким образом, поправка + 12 прибавляется в те тетрады, откуда переноса при первоначальном суммировании не происходило. Так как для кода с избытком 3 вы- полнено свойство дополнительности (см. таблицу из § 5.2), то правила алгебраического сложения в этом #оде совпадают с правилами арифметического сло- жения при учете перехода к записи отрицательных чисел в обратном коде. Пример 5.14. Найти в коде с избытком 3 сумму и разность чисел (х)10 = 402 и (j)10 = 79, используя представление в обратном модифицированном коде. ш [<*>2(1о1зм = ОО. ОШ 00110101 ш [<Аю]3м = 00-ООП 1010 1100 00. 1010 1110 0001 00. 1100 ПОР ООП поправка 00.10110 11010 0100 I___11^1 00. 0111 1011 0100 Окончательный ответ (х + j)l0==481. гп 1<^>2/ю]зм = 00.0111 ООП 0101 ш К--У>2/101зМ= п.поо 0101 ООН 100.0011 1000 1000 I______________t 00.0011 1000 1001 00.0011 1000 ПОО’поправка 00.0110 10100 10101 I 1I—t 00.0110 0101 оно Окончательный ответ (х — у)10 = 323. Пример 5.15. Найти в коде с избытком 3 сумму и разность чисел (х)10 = — 804 и (_у)ю = 152, исполь- зуя представление в... обратном модифицированном коде. 264
ш [<%>2/ю]3м = 11- 0100 1100 1000 Ш [<-У>2|1о1зм -00- оюо 1000 0101 ш =11. 1001 0100 1101 ™ 00. ПРО ООП 1100 поправка 11.10101 0111 11001 I—t I—* * 11.0110 0111 1010 Окончательный ответ {х 4- у)10 — — 652. ш [<^>2(1о1зм= 11-0100 1100 1000 ш [<>>2/10]3м = 11.1011 0111 1010 111.0000 0100 0010 • ffil_____________+ 11.0000 0100 ООП 00.0011 ООП ООП поправка 11.0011 0111 ОНО Окончательный ответ {х — у)10 = — 956. Умножение в коде с избытком 3 осуществляется по обычной схеме. Некоторый интерес для производства арифме- тических операций представляет код с избытком шесть, определенной в табл. 5.5. Для этого кода при суммировании двух чисел в машине всегда обра- зуется величина xk+yk + pk+12. Если истинная сумма при этом меньше десяти, то необходима по- правка — 6. Если же истинная сумма не меньше де- сяти, то поправка не нужна, так как код с избытком шесть для числа xk+yk+ pk—lQ равен xk+yk+ pk — 4, а перенос в старшую тетраду соответствует прибав- лению к этому выражению числа 16. Однако код с избытком шесть не обладает свой- ством дополнительности, и по этой причине алгеб- раическое сложение в таком коде гораздо сложнее . нежели, чем в коде с избытком три. Оба кода с избытком обладают тем свойством; что после добавления поправок переносов между тетра- дами не возникает. Это свойство кодов с избытком -особенно важно при построении сумматоров последо- вательного действия, для которых возникновение та- кого п£реноса эквивалентно увеличению времени сло- жения на величину полного времени сложения. \ 265
Код с избытком шесть часто используется в раз’ личного рода счетчиках, так как он обладает свойством выдачи единицы переполнения, когда десятичный эквивалент равен десяти. Код с избытком три и код с избытком шесть можно использовать при переводе десятичных чисел в двоичный код и для обратного перевода. Прямой перевод осуществляется путем последовательного деления данного числа на два с выделением остатка от деления, а обратный перевод — умножением двоич- ного числа и двоично-десятичного представления на два. Идея перевода из десятичного представления в • двоичное основывается на следующем свойстве жода с избытком шесть: для деления числа, записан- ного в коде с избытком шесть, на два необходимо осуществить обычный сдвиг вправо на один двоичный разряд и внести поправку + 3 Ь те тетрады, в старшем разряде которых после сдвига стоит нуль. Остаток от деления совпадает с цифрой переноса из самого’ ^младшего разряда двоично-десятичной записи. Дока- зательство справедливости этого утверждения пре- доставляется читателю. Пример 5.16. Перевести число (x)1D = 19 в двоич- ный код, используя описанный метод перевода. Переводим число 19 в код с избытком 6: (х)210 = = 0111 1111 0111 1111 + 0011 1111 1 ООН 0000 сдвиг вправо на один разряд поправка ОНО 1111 + 0011 0111 1 сдвиг вправо на один разряд ООП ООП поправка ОНО 1010 + 0011 0101 0 сдвиг вправо на один разряд ООП ООП поправка ОНО 1000 + ООП 0100 0 сдвиг вправо на один разряд ООП ООН поправка ОНО 0111 + 0011 ООП. 1 сдвиг вправо на один разряд ООН ООН поправка оно оно Очередное частное равно нулю. Отсюда(19)2=10011. 266
Для обратного перевода можно воспользоваться обращением схемы прямого перевода, умножая двоич- ное число и его, запись в двоично-десятичной форме на два до получения нужной записи числа в двоично- десятичном коде. Справедливость такого метода пе- ревода вытекает из справедливости схемы прямого перевода при учете, 'что. первоначально число.нуль записано в коде с избытком три и умножение на два • сводится к сдвигу двоично-десятичного представ- ления на один разряд вправо с прибавлением поправ- ки — 3 (т. е. 4-12) в те тетрады, откуда при сдвиге переноса не возникло, и поправки + 3 в те тетрады, откуда возник перенос. В младший разряд младшей^ тетрады записывается очередная цифра сдвигаемого двоичного представления. Пример 5.17. Перевести число (х)2= 10111 в деся- чтичную систему счисления. ООП 0 оно 1100 ООП 0111 1100 10010 10011 1 + 1 + ООП 0100 0 оно 1000 1100 1100 10010 10100 1 + 1 -1 ООП 0101 0 оно 1011 1100 1100 10010 10111 1 1- 1 + ООП 1000 0 0111 0001 1100 ООП 10011 0100 1 t 0100 0100 0 1000 1001 1100 1100 10100 10101 |___t ।___t 0101 оно сдвиг влево на один разряд поправка сдвиг влево на один разряд поправка сдвиг влево на один разряд поправка сдвиг влево на один разряд поправка сдвиг влево на один разряд поправка Окончательно (х)10 = 23. 267
Кроме кодов, перечисленных в табл. 5.2 и 5.4, интересным по ряду причин оказывается код 5421. Хотя для этого кода не выпол- нено требование дополнительности, что усложняет операцию алгебраического сложения, но для него характерно некоторое упрощение алгоритма умножения. Это упрощение происходит за счет того, что для кода 5421 любая десятичная цифра представима как х = а + 5т, где а —О, 1, 2, 3, 4 ат принимает значение О или 1. Поэтому при умножении в коде 5421 требуется уметь произ- водить умножение лишь на цифры от 0 до 5 включительно, сум- мируя после умножения множимого на а и 5 полученные резуль- таты. Если схема умножения реализуется в виде матрицы умножения, то переход к коду 5421 существенно уменьшает число элементов матрицы. Практически при использовании кода 5421 для умножения можно использовать лишь умножение и деление пополам. Множители 2 и 4 получаются при этом . путем удвоения, а множитель 5 путем десятичного сдвига влево на один разряд и деления полуденного результата на два. * Перечислим те двоично-десятичные коды, которые уже нашли применение при производстве арифметических операций или, по мнению специалистов, были бы интересными для подоб- ных целей. Такими кодами являются следующие десять кодов: код 8421, код с избытком три, код 2421, код 5121, код 3321, код с из- бытком один относительно кода 4421, код 5421, код 842 (—5), код с избытком два относительно кода 6421 и код 4311. ♦ Перейдем теперь к рассмотрению двоично-деся- тичных кодов, в которых для кодирования десятич- ных цифр используется избыточное число двоичных разрядов. При выборе того или иного способа двоичного кодирования десятичных цифр, кроме требований, связанных с удобством применения данного кода для производства арифметических операций, могут учиты- ваться и другие требования. Например, при построе- нии схем сумматора .из элементов, потребляющих значительные мощности, следует учитывать число единиц, используемых в двоичном коде. С увеличе- нием числа' единиц растет расход потребляемой мощ- ности. В этом- смысле код прямого замещения, напри- мер, оказывается более выгодным, чем код 2421 или код с избытком три, так как на каждый десятичный разряд код 8421 содержит в среднем 1,5 единицы, а. коды 2421 и код с избытком три на каждый деся- тичный разряд содержат по две единицы. Уникальным с точки зрения требования минимизации расхода мощ- ности является код, в котором каждая цифра коди- руется восьмиразрядным двоичным кодом так, что для всех цифр, за исключением нуля, используется 268
лишь одна единица в одном из восьми разрядов. Для нуля используется нулевая октада. Более существенным является выбор кода с уче- том требований помехозащищенности. Из теории ко* дирования известно, что для выполнения требований к коду, относящихся к обнаружению или исправлению ошибок, необходимо обеспечить определенную избы- точность этого кода, величина которой регламенти- руется теми требованиями, которые предъявляются к коду. Общая теория таких кодов в настоящей книге не рассматривается, и интересующиеся этим вопросом более глубоко отсылаются к специальной литературе, список которой дан в конце книги в виде приложе- ния к основному списку литературы. В качестве при- мера введения избыточности в двоично-десятичный код укажем на код «два из пяти», который опреде- ляется следующей таблицей: Цифра Код о 1 2 3 4 5 6 7 8 9. 11000 01100' 00110 00011 10001 10100 01010 00101 10010 01001 Код, показанный в этой таблице, характеризуется тем, что в каждой пентаде, сопоставляемой десятич- ной цифре, имеется точно две единицы. Если при работе машины произойдет ошибка в одном разряде, то эта ошибка будет обнаружена, так как при этом в испорченной пентаде будет либо одна единица, либо три единицы. Существует не один код типа «два из пяти», а целая группа кодов, с помощью которых десятичные цифры кодируются пентадами, содержащими две единицы. В вышеприведенной таб- лице указан так называемый круговой код «два из пяти», который дает возможность производить в этом , 269
коде арифметические операции, основанные на прин- ципе суммирования по единице. Однако, как правило, коды, используемые для обнаружения и исправления ошибок, плохо приспособлены для производства ариф- метических операций и в вычислительных машинах стараются производить вычисления с использованием обычных двоично-десятичных кодов, а контроль -правильности вычислений производить за счет пере- вода результатов операций в какой-либо из помехо- устойчивых кодов. Однако наиболее часто для кон- троля работы арифметического устройства используют другие приемы, основанные на принципах кода в остат- ках, который мы рассмотрим в следующей главе. Код же типа «два из пяти» используется при передаче Жданных между устройствами машины и для хранения информации в памяти машины. При такой организации работы машины выбор двоично-деся- тичных кодов, используемых в арифметическом устройстве, должен учитывать сложность прямого и обратного перевода из этого кода в помехозащищенный код, используемый вне арифметического •устройства. А. М. Шауманом проведено исследование, показываю- щее, что наиболее удобным двоично-десятичным кодом для пере- вода в код «два из пяти» является код с избытком три или спе- — циальный код «кратный трем». В коде «кратный трем» каждая десятичная цифра кодируется пентадой, количе- ственный эквивалент которой в три . раза больше количественного эквива- 0 00010 лента данной десятичной цифры. На- 1 00101 пример, цифра 7 в этом коде имеет вид 2 01000 пентады 10101. 3 01011 Иногда избыточность двоично- 4 ОШО десятичного кодирования не связана 5 10001 с решением задачи помехоустойчивости 6 10100 кода, а вытекает из соображений упро- 7 10111 щения логики выполнения арифме'ти- 8 пою ческих операций. Например, ряд пре- 9 11101 имуществ дает пентадный двоично- десятичный код, определяемый следую- щей таблицей: Задачи 1. Найти поправки для кода 5121 и сложить в этом коде числа <%>]0=107 и (_у>10 = —207. 2. Исследовать свойства кода с избытком два и найти правила сложения в этом коде. 3. Исследовать с точки зрения производства операций код с весами 4, 4, 3, —2.
Глава шестая КОД В ОСТАТКАХ §6.1. Общие определения В этой главе будет рассмотрено представление числовой информации в вычислительной машине с по- мощью системы, которая не является весомозначной. Однако несмотря на это, описываемая ниже система представления чисел* обладает целым рядом свойств, которые делают ее эффективной для использования в арифметических и запоминающих устройствах вы- числительных машин. Прежде чем переходить к описанию самой системы счисления, мы рассмотрим нецрторые сведения из теории чисел, относящиеся к теории сравнений. Определение 6.1. Два натуральных числа а и b называются сравнимыми по модулю р, если их остатки от деления на р одинаковы. Если числа а и b сравнимы по модулю р, то этот факт записывают следующим образом: «=& (mod/?). Например, 64 — 8 (mod 7). Относительно сравнений оказывается справедливым следующее утверждение. Теорема 6.1. Если а^Ь(т.оАр) и с s d(mod/?), то a + c=b ± d(mod/?); асbd(mod/?). Доказательство. Заметим, что a, b, с, d мо- гут быть представлены в виде а = пр + г, Ь = тр + г, с = Ipq и. d = sp + q. Отсюда следует, что а ± с = (п + l)p + (г ± q), b + d— (m ± s) п + (г + q) 271
и ас = {nip + nq + lr)p + rq, bd = {msp + mq + sr) p + rq. Из совпадения остатков a + c и b + d, а также ас и bd следует справедливость сформулированной тео- ремы. •Для удобства записи остаток от деления натураль- ного числа х на .натуральное число р будем обозна- чать как rest —. р Из доказанной теоремы следует, что сравнения можно почленно складывать, вычитать и - умножать. ^Можно также переносить члены сравнения из одной части сравнения в другую с изменением знака, умно- жать обе части сравнения на одну и ту же константу и возводить обе части сравнения в одинаковую сте- пень. Все эти преобразования для сравнений являются равносильными, т. е. сохраняют справедливость срав- нения. Пример 6.1. Для данной тройки сравнений 6: 30 (mod 4), 11 = 25 (mod 4) и 0 е= 44 (mod 4) найти сумму и произведение сравнений, понимая под суммой и произведением сравнений операции, определенные в теореме 6.1. Производя почленное суммирование левых и пра- вых частей сравнений и почленное перемножение левых и правых частей сравнений, получим 7 79 (mod 4) и 0 = 33000 (mod 4). * Теорема 6.2. Если числа, образующие сравнение, и модуль разделить на одно и то же число, являю- щееся их общим делителем, то сравнение останется справедливым. Доказательство. Из того, что а = b(modр), следует а = & + пр. Пусть h является общим делите- лем а, b и р. Тогда a = aih, b = bji к р = pji. Отсюда axh = bji + npji. Или ах = Ьг 4- пру. Но последнее эк- вивалентно выполнению сравнения вида^^й] (mod pj. Теорема доказана. Аналогично можно показать, что обе части срав- нения и модуль можно умножить на одно и то же число. 272
Теорема 6.3. Обе части сравнения можно разде- лить на одно и то же число, являющееся их общим делителем, если оно является взаимно простым с мо- дулем сравнения. Доказательство. Справедливость этого выте- кает из следующих рассуждений. Из того, что а = b (mod р) и h есть общий делитель а и Ь, вытекает, что axh = bxh (mod р). Перенося правую часть сравне- ния в левую сторону, получим а — b = 0 (modр). Но по условию h взаимно просто с р и, следовательно, h на р не делится нацело. Отсюда следует, что аг — Ьг делится нацело на р. Тогда аг = пр + q и Ьг = тр + q. Отсюда (mod/?). Теорема доказана. Докажем, наконец, еще одну теорему, относящую- ся к теории сравнений. Теорема 6.4. Если сравнение a = b (mod /?) справед- ливо для р=Рх> Ръ •••. Pq> т0 справедливо сравнение a = b (mod р), 'где р есть наименьшее общее кратное чисел ръ р2, ... pq. Доказательство. Из того, что справедливы сравнения a=b (mod/?j), a=b (mod/?2), ..., a=b (modpq), вытекает (см. предыдущую теорему), что разность а—b делится на все числа рг, р2,... , pq. Из этого, как это известно из курса арифметики, вытекает, что а — b делится на наименьшее общее кратное этих чисел, что эквивалентно справедливости сравнения а = b (mod /?). Пусть теперь число х удовлетворяет следующей системе сравнений х = аг (modpi), х = а2 (mod/?2),..., х = aq (mod/?9) и пусть значение х нам неизвестно. Для нахождения класса чисел, удовлетворяющих дан- ной системе сравнений, поступим следующим образом. Вместо сравнений напишем эквивалентные им равен- ства х= miPi + аг х = т2р2 + а2 x = mgPg + aq Так как левые части этих равенств одинаковы, то, можно приравнять правые части равенств AWiPi + «I = т^2 + а2 = ... =mqpq + aq. 273 Б-79.-18
Преобразуем первое из полученных уравнений как т + й2—^i# так как тх является целым числом, то значения т2 должны быть выбраны так, чтобы выражение №г^г +.а?...—было бы целым. Используя Pi уравнение т^р^+а^т^+а^, получим другое условие на тг и т. д. Совокупность этих условий позволит выразить вид чисел mz. Пример 6.2. По системе сравнений xs 3 (mod 8), х = 5 (mod 7), х = 1 (mod 2) найти вид чисел х. Из понятия сравнения вытекает, что х = 8/п + 3, х = 7п + 5 и х = 2г + 2. Приравнивая правые части равенств, - получим * 8т + 3 = 7 и -j- 5 = 2г -}-1. Отсюда * л , , 7п + 2 г = 4т + 1 и т =----- . 8 Необходимо подобрать такое значение п, при котором т и г являются целыми. Для данного примера такими значениями п будут все значения вида 8k + 2, где £ = 0, 1, 2,... Пусть мы имеем множество натуральных чисел N. Выберем некоторый модуль р и для каждого числа из N найдем остаток от деления его на р. Число раз- личных остатков равно р (от 0 до р — 1). Все мно- жество N разбивается при этом на р непересекаю- щихся классов, в каждый из которых входят все - числа, сравнимые между собой по модулю р. Эти классы называются остаточными классами. Если одно и то же число х делится на несколько модулей ри р2, ... pq, то число остаточных классов, на которые, разбивается множество N, равно произ- ч ведению модулей f] pt. Последнее утверждение верно =1 лишь при условии, что всё модули pt являются взаимно простыми числами, т. е. появление того или иного 274
остатка по модулю pt не предопределяет вида остатка этого же числа по модулю р/. Если, например, рх = 2, а /?2 = 4, то множество N разбивается не на восемь остаточных классов, а лишь на четыре остаточных класса, соответствующих остаткам от деления чисел из на 4. Эти остатки предопределяют результат деления на 2. Если остатки от деления на 4 равны О, 2, то остаток от деления на 2 равен 0. При осталь- ных остатках от деления числа на 4 остаток от деле- ния на 2 равен 1. Каждому числу х и каждой системе модулей ръ р2, ... pq однозначно соответствует остаточный класс, к которому относится число х. В обратную сторону однозначности нет, ибо остаточные классы состоят из бесконечного множества элементов. Выделим теперь в каждом классе элемент, мини- мальный по своему числовому значению. Этот элемент будем называть главным элементом (в теории чисел главный элемент обычно называется абсолютно наи- меньшим вычетом). Пусть М есть множество главных элементов для данной системы модулей. Если мы будем рассматривать только М, то для данной системы модулей и некоторого числа х, являющегося главным элементом, существует взаимно-однозначное соответ- ствие между х и остаточным классом, к которому это х относится. Вместо множества главных элементов можно брать любое множество Mk, элементы которого получаются из элемента М прибавлением к каждому из них числа Л PiP-г. —Рп = 1» 2,...). Введем важное для нас в дальнейшем понятие формальной обратной величины по модулю pt для числа х. По определению будем считать у обратной формальной «величиной для х, если выполнено сравнение ху = 1 (mod ре). Имеет место следующая теорема. Теорема 6.5. (теорема Ферма). Для всякого числа х при простом модуле р имеет место сравнение хр = х (mod р). Доказательство. Рассмотрим случай, когда х взаимно просто с р. В теореме Ферма доказательство ведется при более общих предположениях, но нас в дальнейшем" будет интересовать лишь такой случай. Возьмем множество М, определяемое модулем р. 18* 275
Обозначим элементы этого множества как х„ х2,..., хр. Покажем, что множество ах{, ах2,..., ахр образует класс Mk для данного модуля р. Для этого достаточно показать, что среди чисел вида axt нет ни одной пары, сравнимой по модулю р. Предположим противное. Пусть axt = (mod/?) и 1=/= /’ Но тогда,-используя теорему 6.3, мы получим, что имеет место сравнение xt = Xj (mod/?), что противоречит условию о принад- лежности xt и Xj к множеству М. Таким образом, среди axt должны находится пред- ставители всех, остйточных классов и каждый из классов представляется одним числом.. Отсюда сле- дует, что ахъ ах^, ... , ахр образуют некоторое мно- жество Mk. Но тогда имеют место сравнения axt= Ьг (modр), ах2~ b2 (modр), ..., ахр_х= bp_r (mod р). За числа Ьъ Ь2, ... , bp_t можно взять те же числа хъ х2, ...,. хр_г в соответствующем, (может быть, отличном от первоначального) порядке. Тогда ах{ = xit (mod р), ах2 = х^ (mod р), ахр^ = ^(mod р). На основании теоремы 6.1 произведем перемножение сравнений. Тогда получим ар-1Л1Л2... хр_г = xtx2... Xp_i (modр). Так как хгх2... 0 (mod/?) (число хр, соответ- ствующее нулевому остатку, мы исключили из рас- смотрения), то в последнем сравнении, перенося пра- вую часть сравнения влево, мы получим (ар-1 — 1) хгх2... xp_i 0 (modр). В силу того что произведение хг несравнимо с ну- лем, полученное сравнение эквивалентно сравнению ар-1 — 1=0 (mod/?). Или ар~г= 1 (mod/?). Умножая обе части полученного сравнения на а, получим оконча- тельно ар-1 = a (mod р). Рассмотрим теперь сравнение ху = 1 (mod/?,). Из до- казанной теоремы следует, что хр~г = 1 (mod/?,). Сле- довательно, формальная обратная величина для х по 276
модулю pi есть хр~\ В нижеследующей таблице при- ведены формальные обратные величины для некоторых чисел х и- некоторых модулей.' Таблица 6.1 мальные обратные величины. Прочерки соответствуют случаям, когда число и модуль не являются взаимно простыми. Введем теперь некоторый специальный способ ко- дирования числовой информации, использующий вве- денный нами аппарат теории сравнений. В качестве номера класса (кода класса) возьмем набор rest —; rest — rest — остатков, получаю- 7i Ps Рд щихся от деления данного числа х (главного элемента) на модули данной системы. Определение 6.2. Если х является главным элементом, то rest —; rest—;... ; rest— называется Pi Pz Pg кодом в остатках числа х. Очевидно, что мощность множества М зависит от того, какую систему модулей мы используем. Наибольшая мощность М будет при попарно взаимно простых модулях pt. В этом случае М состоит из g g П pi элементов: { 0, 1,..., П Л“ 1-} • z=l i=l 277
Вместо множества главных элементов можно брать любое множество Mk, элементы которого получаются q из элементов М прибавлением числа k pt. .7=1 Пример 6.3. Для системы модулей: рх = 2, р2 = 3 и ps = 5 множество М состоит из 30 элементов от 0 до 29. Код в остатках, например, для элемента 14 , 14 । 14 > 14 г» Л D есть rest —; rest —; rest —=0, 2,4. Вместо множества 2 3 . 5 М можно взять какое-либо множество Mk, Примером такого множества может служить множество чисел от 60 до 89. Задачи 1. Доказать следующее утверждение: если а и Ъ сравнимы по модулю р и d есть делитель р, то а и Ъ сравнимы по mod d. 2. Доказать, что если одна часть сравнения и модуль имеют •общий делитель, то вторая часть сравнения делится на это же число. 3. Найти вид чисел х и у, удовлетворяющих системе сравне- ний J х + у = 2 (mod 3); (Зх — Зу = 18 (mod 9). 4. Дана система модулей: р} = 5, р2 — 6 и р3 = 11. В множество Mk входит число 1000. Найти остальные элементы множества Мк. § 6.2. Представление чисел в коде в остатках В настоящем параграфе мы будем считать, что задано некоторое множество модулей pt, являющихся взаимно простыми числами, и в качестве множества Мк выбрано множество главных элементов М. Если в качестве модулей используются простые числа, то диапазон представимых чисел (произведение модулей)'характеризуется таблицей 6.2. Второй и третий столбики в этой таблице пока- зывают, сколько двоичных разрядов необходимо ис- пользовать в вычислительной машине на разряд кода в остатках, соответствующий данному модулю, и сум- марный расход двоичных разрядов на представление всех чисел из диапазона, определяемого произведением модулей. 278
Таблица 6.2 Pl ч* и ч k £ р(«Р Z=1 2 2 1 1 3 6 2 3 5 30 3 . 6 7 210 3 9 * 11 2310 4 13 13 30 030 4 • 17 17 510 510 5 22 19 9 699690 5 27 23 223092 670 5 32 Одной из проблем, связанных с представлением чисел в коде в остатках, является проблема представ- ления отрицательных чисел. Подобно смещенным системам счисления код в остатках представляет мно- жество чисел только одного знака (положительных или отрицательных). Для представления от- рицательных чисел не- обходимо ввести не- который аналог допол- нительного кода,'*ис- пользовавшегося в ка- нонических системах счисления. На рис. 6.1 схема- тично показано мно- жество чисел М для некоторой совокупно- сти модулей. Для пред- ставления отрицатель- ных чисел необходимо разбить это множество на два непересекаки щихся подмножества М и М" и считать, что коды из М используются для кодирования положительных чисел, а коды из- М" — для кодирования отрицательных чисел. При этом желательно, чтобы М и М" были бы по возможности равномощными (т. е. _ желательно приблизить код в. 279
остатках к обычному представлению в смещенных системах счисления). Чаще всего разбиение М. на Л1' и ЛГ производят так, как показано на рис. 6.1. При этом интервал чисел от 0 до 0,5/? (не включая правый конец интервала) отводится для положительных чисел, а интервал от 0,5/? до р (не включая правый конец интервала) — для отрицательных чисел. Здесь |7Ц'С| = — | М | и р предполагается четным *. В этом случае вместо отрицательного числа х рассматривается его положительное дополнение до /?, т. е. [—х]д =/? —1*|. Пример 6.4. Найти диапазоны представления чисел, если система модулей имеет вид рг = 2, р^ = 5, ps=7. В этом случае /? = 70, и, следовательно, множество М состоит из 70 элементов. При необходимости пред- ставления в машине как положительных, так и отри- цательных чисел этот диапазон становится равным (+34, —35). Как мы видим, этот диапазон является несимметричным. Пример 6.5. В системе модулей предыдущего при- мера найти код в остатках для чисел (л)10 = 30 и О)ю=-17. Для числа 30 код в остатках получается нахожде- нием остатков от деления на модули системы (л) = = 002. Для числа —17 необходимо перейти к допол- нительному коду. Тогда мы получим число 53. Таким образом, (у) = 134. Остановимся теперь на проблеме перевода кода в остатках некоторого числа из М в обычное канони- ческое представление в десятичной системе. Метод, который мы рассмотрели для решения подобной задачи в предыдущем параграфе, не может считаться прием- лемым, так как этот метод сводится к полному пере- бору всех (или почти всех) возможных - вариантов и требует большого машинного времени. Для решения поставленной задачи мы рассмотрим переход от кода в остатках в полиадическую систему, тесно связанную с кодом в остатках для данной системы модулей {/?ь /?2,'—,/?„, /?п+1). В этой системе вес Z-го разряда равен qt = q^'p? Вес нулевого раз- ряда равен единице. Для системы, состоящей из п * |ЛГ| означает число элементов М. 280
взаимно простых модулей, каждое число х из М запи- сывается в следующей форме, обобщающей запись вида (1.1) п х = X К«у)1/Qi = 1(«у)]пАА-РП + К«7-)]Л-ГГ1Р2-Рп-1 + i-0 + ... 4- [(«/)]j • Р\ + [(йу)]о- (6.1) Ддя простоты символы [(«?)]г будем записывать как bt. Тогда соотношение (6.1) принимает вид x=bn -Pi-p2...pn + bn_v Pi-p2... Pn-i + ...bi-Pi + b0. ’ Теорема 6.6. Если x принадлежит к множеству М, определяемому данной системой модулей, то х однозначно представимо в виде (6.1). Доказательство. Докажем сначала возмож- ность представления любого х из М в виде соотно- шения (6.1). Доказательство будем вести по индукции. Для систем из одного модуля справедливость утверж- дения очевидна. Для системы из двух модулей р{ и р2, причем pi < р2, справедливость утверждения выте- кает из следующего. Для х возможны три взаимно исключающиеся случая х < рг, х = рг и рх < х < рг-р2. В первом случае х = Ъ- рх + Ьо, где Ь0 = х. Во втором случае х=1*/?14-0. В третьем случае из того, что Pi <x<Pipi, вытекает — ==—4- Ьо, где £0<А и Л bi < р2. Отсюда х= Ьг- pi + Ьо. Теперь докажем спра- ведливость для случая трех модулей plt р2, р3. Пусть Pi < Pz < Рз- Для х имеется три взаимно исключающих случая x<PiP2, x=pip2 и PiP2< x<pip2p3. В пер- вом случае по доказанному выше х = O-Pi- р2+ biPi+b0. Во втором случае х = 1 • рх-р2 4- О-/?! 4- 0. В третьем случае из того, что рхр2 < х <.Рг Р2-Р3, вытекает jc b = Ь2-] . При этом b2 < р3 b <Pi- р2. Следо- Pl‘P2-------Pl-P2 вательно, х = Ь2- р}-р2 + Ь. Но так как Ь<,рх-р2у то b = bi • Pi 4- b0. Отсюда х = Ь2-рг• р2 4- Ьг • рх 4- Ьо, при- чем b^<pi, Ьу<р2, b2<p3. Теперь уже нетрудно сделать последний индуктив- ный шаг, предположив справедливость утверждения теоремы верным для k модулей и доказав справедли- вость ее для (k 4- 1)-го модуля. Этот шаг предостав- 281 .
ляется сделать читателю самостоятельно в качестве упражнения. Заметим, что одновременно с доказательством воз- можности представления в виде (6.1) мы доказали, что при таком представлении всегда выполняется условие b{ < pi+l для всех I. Доказательство единственности разложения в виде (6.1) предоставляется читателю. Представление (6.1) может быть получено из кода в остатках с помощью следующего приема. Если соотношение (6.1) взять по модулю ръ то единствен- . ный член, оставшийся в правой части (6.1), будет равен Ьо. Взятие равенства по модулю эквивалентно •. делению с остатком обеих частей (6.1) на с выде- * лением остатков от деления и приравнивания остатков между собой. Отсюда вытекает, что Ьо совпадает с цифрой кода в остатках, которая записана в разряде, соответствующем модулю pv Для получения Ьг обра- зуем разность х— Ьо в коде в остатках. После этого производим деление полученной разности на модуль * Рг Тогда х — Ьо , , , -—* = Ьп-р2ра- -Рп + Ьп-1РгРз' - -А-1 + + b2p2 + b1. Если это равенство взять по модулю р2, то мы полу- чим значение и т.-д. Пример 6.6. Дана система, модул ей Р\ = 1, р2 = 11, ра = 13. Перевести число (х) = 435 из кода в остатках в представление в виде (6.1). На основании вышеприведенного рассуждения Ь0=А. Вычитаем из каждого разряда исходного числа цифру 4 по модулю этого разряда. Полученный после этого код имеет вид 0, 10, 1. При вычитании по модулю pt следует помнить, что число 0 эквивалентно pz. Поэто- му— 1, получающаяся при вычитании 4 в разряде, со- поставляемом модулю 11, эквивалентна 10. Берем обратную величину основания рг, р^1 = у • Умножаем найденную разность на у. Это умножение происходит по модулю данного разряда с учетом, что 282
pt и 0 эквивалентны. Вместо -у- используем формаль- ную обратную величину из таблицы, приведенной в предыдущем параграфе. Как следует из этой табли- цы, формальная обратная величина для 7 при pt — \\ есть 8, а при pt = 13 есть 2. Поэтому код 0, 10, 1 умножается на В и на 2 в соответствующих разрядах. После умножения мы получаем код 032. На основании вышесказанного Ьг = 3. Производим вычитание 3 по модулям данного разряда. Полученный код есть 0, 0, 12. Для величины 11 формальная обратная величина для д = 13 есть 6. Умножаем полученные разряды кода на 6. Получаем код 007. Таким образом, Ь2 — 7. Итак, х = 7-7-11 + 3-7 + 4 = 872. Другой путь преобразования чисел из кода в: остат- ках в обычное представление заключается в следую- щем. Пусть мы имеем систему модулей {plt р2, Рассмотрим ортонормированную систему векторов «! = (!, 0, 0,...,0, 0) а2 = (0, 1, 0, ...0, 0) «3 = (0, 0, 1,...0, 0) а„ = (0, 0, 0, ...0, 1). Тогда для любого числа х x = rest — -«J + rest— -а2 + ....+ rest — • а (6.2) ’ Pi Pz Рп Будем рассматривать вышеприведенные вектора как коды в остатках некоторых чисел из М. Пусть деся- тичная запись этих чисел есть ..., (ап)10. Тогда десятичная запись числа х получа-ется весьма просто <х}]0 =. fest — < • a,}I0 + rest — (a2}10 + ... + Pi . Pz + rest — -<a„)]0. Ptl • Поскольку система модулей фиксирована, то не пред- ставляет особого труда заранее вычислить числа (az)10 и использовать их при получении десятичного значе- ния х.
Пример 6.7. Для системы модулей /»1 = 2, /»2 = 3, А — 5, = 1 найти значения «ц с^, а3 и а4 и с помощью найденных значений az перевести код в остатках числа (х) = 0240 в десятичную запись. Для данной системы коду 1000 соответствует число, которое делится без остатка на 3, 5, 7и является нечетным. Единственным числом такого рода в М. является число, равное произведению трех модулей, на которые оно делится без остатка. Таким образом, «j = 105. Аналогично код 0100 означает число, деля- щееся без остатка на 2, 5 и 7 и дающее остаток 1 при делении на 3. Число, равное произведению соот- ветствующих модулей 70, удовлетворяет и тому усло- вию, что при делении на 3 оно дает остаток единицу. В силу единственности кодирования в М. а2 = 70. С по- мощью подобных же рассуждений получаем, что а3 = 126 и а4 = 120. Отсюда <х)10==0 X 105 + 2 X 70 4-4 X 126 + 0 X 120 = 644. Это значение лежит вне множества М Поэтому его необходимо свести к элементу из М путем деления полученного числа на произведение модулей системы. Окончательно (x)w = 14. Значения для некоторых наиболее часто исполь- зуемых систем модуля перечислены в нижеследующей таблице. Таблица 6.3 Система модулей 2, 3 3 4 2, 3, 5 15 10 2, 3, 5, 7 105 70 2, 3, 5, 7, 11 1155 1540 2, 3, 5, 7/11, 13 15 015 20020 На первый взгляд может- показаться, что второй метод перевода существенно проще первого. Однако у этого метода имеется один недостаток, который зачастую заставляет предпочитать первый метод. Этот недостаток связан с тем, что кроме оборудования, работающего по модулям pt в этом случае в машине 284
необходимо иметь оборудование, работающее по мо- дулю р = Pi ‘р2-• Рп, что усложняет и удорожает конструкцию машины. Рассмотрим еще один способ перевода числа из кода в остат- ках в позиционную систему, определяемую соотношением (6.1), который в ряде случаев оказывается предпочтительнее описанных выше методов перевода *. Для удобства записи через будем в дальнейшем обозначать цифру, стоящую в коде в остатках числа х в разряде, соответ- х ствующем модулю pi, т. е. = rest —. Возьмем представление х Pi с помощью (6.1) х = bn-P Pl-Р2’ • Рп-1 + + 61 Pl + b0 и каждое слагаемое в этом представлении запишем в коде в остатках (слагаемые' выписываем в обратном порядке) Ьо, Ьо, ... ,&0(modA), • О, bt- pi (modfa), ... , btpt (modp2), 0, 0...............Pi p2 (mod p3) 0, 0, ...... . .,bnlpi- p2-...-pn l (modpn). Из этих соотношений вытекает, что й1 = bo (mod pi), a2 = b3 + .&! pi (mod p2), «з = bo + bi pi (mod p3) + b2 pi • p2 (mod p3) 4 an = bt + &ip,(modp„) + ... + bn_1-pi-p2- ... • p^ (modp„). Перепишем полученные соотношения в следующем виде Ьо = «1 (mod pi), bi- pi (mod p2) — «a — bQ (modp2), &a" Pi-Pz (mod p3) = a3 — bQ — bt (modp3) Vf PiPz- ’ Pn_i (той'ра) = a.n — bo — btpi (modp„) — - • • • — bn_2-Pi- ... • P„_2 (modp„). Общий член в этих соотношениях имеет вид I—2 1—2 k—1 6Z_! Прй (mod pz) = «z — b0- £ &й П Pz (mod pz). й=1 й=1 z=i * Этот способ предложен М. Н. Андреевым. 285
Подберем множитель £z так, чтобы выполнялось сравнение г-э Lt П Pk (mod = 1 (modz Pi). Л=1 Тогда bt_x = (a,- — 60) Li — 61 Lt Pt—... — — bi-2 LlPi'Ps.....Pi-2 (mod Pi) ИЛИ i—2 k—1 6H = («i — 60) Lt — Li S 6* П Pi (m.od Pi) • . *=i z=i Для : каждого коэффициента Lt JJ pi -можно подобрать такой Z=i множитель Nt = 1 (modpi), чтобы выполнялось сравнение *-i LiNt П Pt = 4tk (mod pi), qik < p-t. i=l - Тогда общий член соотношений запишется как 6z-i = <7й&о + Qiibt + • • • + 9(z_1) (г_1} «_!. (6.3) Соотношения (6.3) являются рекуррентными. Например, для систе- мы модулей {2, 3, 5, 7, 11, 13} эти соотношения имеют вид 6О.= (mod 2), 6i — b0 + 2«2 (mod 3), 62 = 460 4- 36, 4- а3 (mod 5), 63 = 360 + 66д + 462 + 4а4 (mod 7), 64 = 1О6о 96i "1" 562 4- З63 Ид (mod 11), 6§5=== 1О6о 4- 76] 4" 862 4- 63 4- 76j 4* 3tz3 (mod 13). Заметим, что перевод числа из кода в остатках в какую-либо позиционную систему решает проблему сравнения двух чисел. Если оба числа находятся в одном множестве М или М", то при попарном срав- нении цифр bi или десятичных цифр, начиная со стар- шего разряда, можно получить ответ на вопрос: какое число больше. Отметим, что при использовании для сравнения представления чисел в виде (6.1) для срав- нения двух «-разрядных чисел в’ коде в остатках*тре- буется 4« + 2 такта работы машины. - Второй проблемой, связанной с представлением чисел в коде в остатках, является проблема опреде- ления знака числа по его коду в остатках. 286
Наиболее очевидный способ определения знака числа состоит в том, что по коду в остатках числа х строится его десятичный эквивалент по одному из методов, описанных выше, а затем происходит срав- нение этого десятичного эквивалента с числом 0,5р (предполагается, что произведение модулей системы является четным числом). Если х < 0,5р, то данный код является кодом положительного числа, в против- ном случае данный код соответствует отрицательному числу х — Однако такой способ определения знака не'может считаться приемлемым, так как он требует в вычислительной машине, работающей в коде в остат- ках, наличия специальных устройств, производящих сравнение в десятичной системе счисления, что весь- ма не выгодно. Более удобным является определение знака кода числа по е^о представлению в виде (6.1). При этом, если pn+i является четным числом, то х будет положительным, если Ьа лежит.в интервале от 0 до 0,5./»п+1 —-1 и х будет отрицательно, если Ъп лежит в интервале от 0,5/?и+1 до р„+1 — 1. Это непо- средственно следует из (6.1). Ибо в первом случае первое слагаемое в (6.1) принимает максимальное зна- чение, равное ' Рп- Если предположить, что все bt при этом принимают свои максимальные значения (т. е. pl+\ — 1, то х в соответствии с (6.1) примет вид Л = А’ -• А + А* А- - 'Pn-Pi' Pf--Pn-i+_ + ...+А’А-А+А-1=у-1 <у • Если Ьп берется из интервала (0,5Рп+1, A+i~l), т0 даже при самом малом значении Ьп и при нулевых значе- ниях всех остальных Ь{ на основании (6.1) получаем Р х = —. Таким образом, определение знака числа сво- дится к определению интервала, в котором находится Ьп при условии, что рп+1 является четным числом. 287
Пример 6.8. Определить знак числа (х) = 120 в системе модулей /?1==3, р2 — 5, ра = 2. На основании алгоритма перевода кода в остатках в весомозначную систему, определяемую с помощью соотношения (6.1), последовательно получаем Ьй=\. После первого вычитания исходный код принимает вид 013. Формальная обратная величина для трех при модуле 5 есть 2, а при модуле 2 является единицей. Тогда после умножения имеем код 023. Отсюда #1=2. Вычитая двойку, получаем 001. Для пяти обратная формальная величина при модуле 2 есть единица. Таким образом, Ь2—1 и искомое число х=1«3-5 + 4- 2-3 + 1 = 22. Так как цифра Ь2 > 0,5/»я+1 — 1 = 0, то мы имеем отрицательное число, равное —7. Пример 6.9. Для системы модулей />, = 7, р2 = 11, /5з==13 определить знак числа х, если (х) = 040. В этом случае среди сицтемы модулей нет четного модуля. Поэтому единственным способом определения знака является нахождение десятичного значения числа и сравнения его с половиной произведения всех мо- дулей. Для получения десятичной записи воспользуемся переходом к выражению (6.1). Имеем #0 = 0. Первая разность совпадает с исходным кодом и равна 040, Формальные обратные величины для семерки при мо- дулях 11 и 13 равны соответственно 8 и 2. После умножения на эти величины получим код 0, 10, О' Отсюда = 10, После вычитания получаем код 003. Формальная обратная величина для одиннадцати при модуле тринадцать есть 6. Умножая на нее, получаем код 005. Отсюда х = 455 < 0,5 (р -F 1) = 501. Следова- тельно, х число положительное. ‘ Рассмотренные нами методы определения знака числа весьма громоздки, так как они требуют пере- хода от кода в остатках, либо к десятичному пред- ставлению числа, либо к его записи в виде соотно- шения (6.1). Однако, как было показано Н. Сабо, не существует более простого алгоритма определения знака числа, закодированного в коде в остатках. Тео- рема, доказанная Н. Сабог-приводится нами без дока- зательства. Интересующиеся доказательством могут познакомиться с ним по литературе, указанной к гла- ве 6. 288
Теорема 6.7, При любом разбиении множества М на подмножества М' и М" толками 1г и l2 (l^M' и 12^М") и любом способе образования функций gfrest —А и f(gfrest—,... х Pi J х х Pi 7 ..., gfrest—V ..., gfrest — Y\ . X Pi J \ PnJJ (g(rest — ) может принимать г различных значений, \ \ Pt / где г < рУ) существуют по крайней мере два числа хг и х2, принадлежащие М и такие, что хг х2 С М", для которых f (xj = f (х2), если при этом удовлетворяются условия 11Х — l21 > pg, [l2 — lt] > pt, P’-Pi>pi- (Разность lx — /2 берется по mod Р). Функция f в этой теореме играет роль характе- ристической функции, с помощью которой происхо- дит отображение кодов положительных и отрицатель- ных чисел на различные множества. Смысл теоремы состоит в том, что при условии, что g(rest — ) при- X PlJ нимает только г различных значений Qr. р. g^rest —J отображает pt различных точек, соответствующих pt возможным различным значениям rest — на меньшее Pi число различных точек, уменьшая информацию i-ro раз- ряда в коде в остатках), условия, налагаемые на функ- цию /, оказываются невыполнимыми. Таким образом, для построения функции, определяющей знак числа, оказывается необходимым получение всей возможной Информации о числе без всякого сокращения инфор- мации о его представлении в виде (6.1) или каком- нибудь другом представлении. В процессе работьгс кодом в остатках может встре- титься необходимость в расширении или сужении системы модулей. При сужении системы модулей из системы исключаются некоторые модули и соответ- ствующие разряды кодового представления не исполь- зуются. При расширении системы модулей возникают проблемы определения цифр в разрядах добавляемых модулей. Если для определения цифр кода в остатках Б-79.—19 289
воспользоваться представлением числа в виде (6.1), то имеет место очевидная теорема. Теорема 6.8. При любом расширении системы, мо- дулей с помощью модулей рп+1, рп+2,--., pn+k Цифры bn, bn+1,..., bn+k_x, в представлении (6.1) для чисел из М будут равны нулю. Доказательство. Справедливость теоремы вы- текает из того, что Ьпрг-р2- ... -р2-..:-рп + &я+1-А/’21--/’л+1 + - + bn+k-i X ХЛ-^2’ ’Рп+ъ-^Ъ, так как по условию х < ррр2-. Простой способ расширения основан на соотношении (6.3). учетом результата теоремы' 6.8 можно переписать это соотно- шение в следующем виде v q..a. = b, — а.Ь0 — а.'Щ—...—а... ,.Ъ. i I и 4 Л 1 Ч1 (/—1) I—I Но тогда из (6.1) получаем an+i fyn+i) о &o+-"+₽(n+Z) (n-i) ‘ 6п-1 ’ *где ₽(n+i)i<Ptt+i- Расчет по формулам (6.4) требует 2п тактов работы машины для определения 6; и еще двух тактов работы для вычисления Ъп в разряде Д +1 • Таким образом, при расширении системы модулей на k модулей требуется 2 (п + Д) тактов работы машины. Пример 6.10. Для системы модулей {2, 3, 5, 7, 11} код в остат- ках числа х имеет вид (х) = 10259. К системе модулей добавляется модуль, равный 13. Найти код в остатках для числа х в новой системе модулей. ~ По формулам (6.3) получаем. Ьо = 1, Ьг = 1, Ь2 = 4, Ь8 = 3, Ь4 =2. ' Так как &6 = 0, то из (6.3) ЗЛ6 = — Ю&о ~ 7&i — 8fe2 — 8bs-7h4 (mod 13) или b5 — b0 + 2&i + 6&g + .4b3 + 2b4 (mod 13). Это выражение есть запись в виде соотношения (6.4). Отсюда &5 — 4. Окончательно (х) = 102594. Задачи ' (.Для системы модулей А =7, /)2 = 11, д3 = 2 определить знак числа х, если (х) — 340. 2. Перевести число (х) = 0501 из системы, модулей {2, 7, 11,13} в десятичную запись с помощью перехода к представлению (6.1). 3. Перевести число (х) = 1116 из системы модулей {2, 3, «б, 7} в десятичную запись с помощью векторного представления. 290
§ 6.3. Выполнение операций в коде в остатках’ Код в остатках позволяет весьма просто осуще- ствлять операцию сложения и умножения положи- тельных чисел. Пусть числа х и у принадлежат неко- торому множеству Mk относительно системы моду- лей pi, Р2,..., Pq- Предположим, что этому же мно- жеству принадлежат х-Уу и ху. Не теряя общности, можно предположить, что множество /И* является множеством главных элементов. Код в остатках для х и у имеет вид *: ’(х) == rest —; rest — ;...; rest—, Pl P2 Pq ,r (_y) = rest —; rest—;...; rest — . Pl p2 Pq Эта запись эквивалентна следующим двум системам сравнений х.==. rest — (modpj; х = rest — (mody2);...; x == Pl . P2 '= rest — (mod/? „), • Pq у rest — (modPi); у ss rest — (mod/?,);...; у ss • pi P2 • ss rest — (mod p„). Pq На основании теоремы 6.1 сравнения, записанные в одном столбике, можно почленно складывать и пе- ремножать. Тогда х Ч-у rest+ rest — (modyj;...; х + у = Pi Pi == rest — 4- rest — (mod pa), . Pq Pq xy =s rest—-rest (modyj;...; xy s= Pi Pi as rest — - rest — (mod p ). Pq , Pq * Здесь (x) означает,. как и раныпе, код в остатках числа х. 19* 291
Но это означает, что к {x +j/) = rest х у rest — + rest — Pt Pt Pi rest rest — + rest — Pg Pq Pit {ху) = - rest x у rest —-rest — Pi Pt Pi rest X у rest —-rest — Pg Pg Pq и Отсюда вытекает следующее правило для нахождения суммы и произведения двух положительных чисел в системе остаточных классов (коде в остатках). Для нахождения суммы двух положительных чисел в коде в остатках достаточно произвести поразрядное сум- мирование и в каждом разряде найти остаток от де- ления полученной суммы на модуль этого разряда. Аналогично для нахождения произведения двух поло- жительных чисел в коде в остатках достаточно про- извести поразрядное умножение и в каждом разряде найти остаток от деления полученного произведения на модуль этого разряда. Пример 6.11. J3 системе модулей {2, 3, 5, 9 найти сумму и произведение чисел (х)10==14 и (_у)ю = 9. Коды в остатках ‘ для (х) = 0240 и {у) — 1042. ,0 2 4 0 + 1 04 2 12 8 2 данных чисел имеют вид 0 2 4 0 10 4 2 0 0 1 6 0. Для получения истинного кода в остатках делим в каждом разряде полученный результат на модуль' данного разряда. Окончательно получаем {х+у) = = 1232 и (лу) = 0010. Пример 6.12. Считая, что произведено разбиение множества М на множества М' и М", найти сумму и 292
разность чисел (х)ю—10 и (5,)щ=—4 в системе мо- дулей {2, 3. 5; 7, 11}. Для данной системы модулей интервал представ- ления чисел есть (— 1155, + 1154). Коды чисел имеют вид (10) = 0, 1, 0, 3, 10, (—4) = (2310) = 0, 2, 1, 3, 7, (4) = 0, 1, 4, 4, 4. ,0103 10 ' ,0103 10 + 0 2 1 3 7 + 0 1 4 4 4 О 3 1 6 17 0247 14 После деления на модули соответствующих разрядов получаем (х—у) = 00166 и (х + у) = 02403. • Переходя к представлению 6.1, можно проверить, что первый код соответствует коду десятичного чис- ла 6 в данной системе модулей, а второй код соот- ветствует коду десятичцогр числа 14 в данной системе модулей. Отметим, что результаты вычислений будут верны только в том случае, когда при сложении или при умножений не происходит переполнения, т. е. когда результат операции еще не выходит за пределы про- изведения модулей. ’ В вычислительных машинах, работающих в коде в остатках, можно избежать операции умножения, заменив эту операцию сум- мированием специальных индексов, однозначно связанных с дан- ным кодом в остатках. Дадим описание индексной арифметики, введя для этого некоторые дополнительные понятия из теории сравнений. Рассмотрим некоторое число а, взаимно простое с модулем р, и будем' образовывать степени а, а2,..., а”,.... Так как несравним мых между собой по модулю и не-делящихся на р чисел не может быть более р — Кто среди степеней а всегда найдутся какие-то степени, сравнимые между собой по модулю р. Пусть первое такое сравнение произошло для степеней I и т, т. е. л1 = ат (mod р). Преобразуем это сравнение в сравнение d~m = 1 (mod р). Обо- значая 1 — т через k, получим сравнение а*=1 (mod р). Любой показатель степени п разделим на k и, полагая п — qk у г, где 0<г < Л, получим ап = cflk'-ar == ar (mod р). Таким образом, среди Первыхkстепеней числа «нет сравнимых между собой по модулю р, а начиная с показателя п = А + 1, -начинается периодическое пов- торение ak+1 == a (mod р), aft+2 == d2 (mod р),..., а2к = 1 (modp). В частности, ап = 1 только тогда, когда п — qk. Но по теореме 6.5 а е= 1 (modp) щ следовательно, р.— 1==§й, так что длина 293
периода есть делитель числа р — I. Если k^p—\ для данного числа а и данного модуля р, то -число а называется первообраз- ным корнем простого числа р. Так как числа а', а2,..., а₽—1 образуют множество Mk • то можно строить все операции над кодами в остатках, цифры в которых берутся из множества (а, а2,..., ар~1}. При этом упрощается производство операций умножения, возвышения в степень, деления и извлечения корня, так как соответствующие операции заменяются суммированием, умножением, вычитанием и делением показателей степени. Можно построить таблицы, е помощью которых для - данного модуля р и выбранного первообразного корня * а находить для - каждого остаточного класса по модулю р, заданного своим пред- х ставителем rest — =4 у, соответствующий показатель степени г, для которого число аг принадлежит к тому же остаточному классу» * ' х что и rest —. Другими словами, у =5 ar (mod р). Это число г, опре- Р деленное по модулю р — 1 (т, е. с точностью до кратного JC р — 1), называется индексом числа rest — при основании а по Р .модулю р и обозначается следующим образом inda у. Иногда там, где это не приводит к неясностям, индекс числа у обозначают просто как indy. На основании определения индексов легко выводятся следую- щие соотношения. При у = ar (mod р) и 6 = 0s (mod р) имеем ind (уб) == ind у + ind 8 (mod ( р — 1)); ind (у; 6) = ind у — ind 6 (mod ( р— 1)); ind (ym) = 6 ind у (mod ( p — 1)). Все соотношения доказываются одинаково. Докажем, например, первое соотношение. Для этого перемножаем почленно два срав- нения у == ar (mod р) и a4 (mod р). Полагая, у® = cf (mod р), находим, что ct = ar+s (mod р). Но это возможно лишь при усло- вии, что t = r +s + n(p — 1) или t=^r 4- s(mod (р —• 1)), что ' соответствует написанному в первой формуле соотношению между индексами. Для перехода от одного основания индексов а к другому основанию Ь достаточно заметить, что при b — ak (mod р) и c^=-br (mod р), с ss as (mod р), получаем a4' ==-akf (mod р). Отсюда л = (mod(p —1)) или indaс = inda 6-ind/,c (mod(p —1)). Для нахождения индексов по данному числу из М и обратной .операции обычно используют специальные таблицы. Для чисел р от 3 до 13 эти таблицы выглядят следующим образом: * Можно доказать, что для любого простого модуля р суще- ствует по крайней мере один первообразный корень. 294
р = 3 а 0 1 ’ 2 i 0 1 0 0 1 0‘ 1 2 а 0 1 2 3 4 5 6 / 0 1 - 2 3 4 °* I 0 0 2 1 4 5 3 0 1 3 2 6 4 5 р=11 а 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 0 1 8 2 4 9- 7 3 6 1 2 4 8 5 10 9 7 3 6 I 5 - Эти таблицы устроены следующим образом. Левая служит для перехода от числа к его индексу, а правая — для обратного пере- хода от индекса к числу. Цифры над столбиками означают цифры, стоящие в разрядах .единиц, а цифры слева от строк — цифры, стоящие в -разрядах десятков. Условимся считать, что цифре 0 соответствует специальный индекс X, который обладает свойством Х + i =>/•+ Х==Х для лю- бого индекса I. 295
Индексное представление числа состоит из матрицы, имеющей две строки и п столбцов. Число столбцов равно числу модулей в используемой системе остаточных классов. В верхней строке пишутся индексы, соответствующие написанным в этом же столбце во второй строке матрицы цифрам представления данного числа в коде в остатках. Пример 6.13. В системе модулей {3, 5, 7, 11, 13} перейти к индексному представлению для чисел (%)10 = 123 и <_у>ю = П5 и найти их сумму и произведение. Код в остатках для числа 123 в данной системе модулей вы- глядит как О, 3, 4, 2, 6. Код 115 соответственно выглядит как 1, 0, 3, 5, jll. Используя вышеприведенные таблицы, находим для цифр этих' представлений соответствующие индексы. Индексное представление данных чисел есть _/Х 34 1 5\ , _ /О'Х Г 4 7\ 9 , ... ‘ АО 3 4 2 &)' <1-0 3-5 11J Здесь (x)i означает Индексное представление числа х. При сум- мировании используем сложение кодов в остатках и определим новые индексы по таблицам прямого перехода, .а при умножении просуммируем индексы сомножителей и найдем код в остатках произведения по таблицам обратного перехода. . <х> = 0 3 4 2 6 , ind х = X 3 4 1 5 ~<у>= 1 О 3 5 И + indy = О X 1 4 7 1 3 7 7 17 X X 5 5 12’ 1 3 0 7 4 X X 5 5 0 . Напоминаем, что индексы считаются в каждом разряде не по мо- дулю р, а по модулю р — 1. Окончательный ответу tv , ,л V0 3 X 7 2\ , . /X X 5 5 0\ <х + ~ (.1 3 0 7 4/" ~Д0 0 5 10 М ’ Несмотря на то что логика операции умножения стала более сложной, чем в обычной системе кода в остатках, выигрыш со- стоит в однотипности оборудования для производства операций сложения и умножения. ^Операция деления вызывает при использовании представления в коде в остатках большие трудности. В настоящее время нет практически удобных алгоритмов для выполнения деления в до- статочно малое время и с небольшим увеличением оборудования. В списке литературы в конце книги указана работа И. Кейра, П. Чини и М. Та-ненбаума, в которой предлагается метод реали- зации деления с помощью специально вычисляемой двоичной функции, аппроксимирующей искомое частное, Отметим в заключение, что код в остатках оказывается весьма эффективным в вычислительных машинах,которых не требуется производить- деление или процент деления очень мал. Кроме деле- ния, некоторые трудности вызывает проверка переполнения, т. е. определения случая выхода результата- из . множества. М:. Весьма медленно осуществляются операции определения знака, сравнения и перевода в десятичную систему. 296
При использовании двоичных элементов схемы для операций в коде в остатках строятся обычно на модульных или кольцевых двоичных счетчиках, с помощью которых операции в коде в остат- ках выполняются довольно эффективно. Задачи 1. В системе модулей {5, 11, 13, 17} найти сумму, разность и произведение для <х>|0 = —21, <_у>10 = 40. 2. С помощью индексного представления вычислить сумму, разность и произведение чисел <х>10 = —50, (_y)w = —2 в системе модулей {3, 7, 11}. 3. Построить таблицу перехода от числа к индексу и обрат- ' ного перехода для р — 17.
ЛИТЕРАТУ РА Список литературы разбит на две’ части. В первой части ука- зана литература, непосредственно использованная при написании данной, работы или освещающая рассмотренные выше вопросы »с других точек зрения. Для удобства читателя литература в пер- вой части разбита в соответствии с делением книги на главы. Во второй части приведена литература, посвященная тем вопросам теории представления информации в вычислительных машинах, которые из-за ограниченного объема книги были лишь упомянуты в тексте или вообще не рассматривались. В этой части литература дается общим списком без разбиения на темы. ♦ I Глава первая 1. Васильев Б. В. Ошибки округления на вычислительных машинах с фиксированной запятой. Измерительная техника, 1962, № 11. ' 2. Карцев М. А. Арифметика цифровых машин.'М., Наука, 1969. 3. Карцев М. А. Логические методы ускорения умножения в цифровых вычислительных машинах. Проблемы кибернетики, вып. 4, i960. 4. К и т о в А. И., К р и н и р к и й Н. А. Электронные цифровые машины и программирование. М., Физматгиз, 1959. 5. Л юс те рн и к Л. А., Абрамов А. А., Шестаков В. И., Шура-Бура М. Р. Решение математических задач ,на авто- матических цифровых машинах. Изд. АН СССР, 1952. .6. Михайлов Г. А. О кодировании отрицательных чисел в АЦМ последовательного действия. Вопросы вычислительной техни- ки, Киев, 1961. 7. М и х е л е в В. М. Определение функции распределения длины максимальных переносов. Журнал вычислительной математики и математической физики, 1963, № 5. 8. П о с н о в Н. Н. О наивыгоднейшем основании в системах счисления с избыточным представлением цифр. Известия ВУЗов, Приборостроение, 1964, № 5. 9. П о с п е л о в Д. А. Арифметические и логические основы ВМДД, ч. I, Изд. МЭИ, М„ I960. 10. Ричардс Р. Арифметические операции на цифровых вычис- лительных машинах. М,, Изд. ИЛ, 1957. 298
11, Avizienis A. Binary — compatible signed - digit arithmetic. AF1PS Conf. Proceedings, 1964, V. 26, part 1. "1 2. . A v i z i e n i s A. Signed-digit numbe representations for fast parallel, arithmetic. JRE Transaction on electronic computer, 1961, N 3. 13. Danloux — D u mesh I is M. Les systemes de numeration et les calculatrices automatiques. Mesures, 1958, N 256. 14. Empacher A. B. On numbers representation for computing. Institut badan jadrow PAN, 1960, N 188/XII. 15. Ha m m i ng R. W., Mammel W. L. A note on the location of the binary point, in a computing machine. IEEE Transaction on electronic computer, 1965, N 2. 16. Garwick J. V. The accuracy of floating point computers. Nor- disk tidskrift in formations behandling, 1961, N 2. 17. Goldstein M. Significance arithmetic on a digital computer. Communs of ACM, 1963, N 3. 18. Gram Ch. On the representation of zero in floatingpoint arith- metic. Nordisk tidskrift informatiomdebangling, 1964, N 3. 19. Ma Ion S. Estimation of errors in digital computation by pro- gramming. Stroje na Zpracovani informaci, 1959, Sb. VII. 20. My nett D. W. Scales of notation. Duodecimal Bulletin, 1953, N 1. 21. R о be r t so n J. E. A new class of digital division methods. IPE Transaction on electronic computer, 1958, N 3. 22. W a d 1 e у W. G. Floating-point arithmetics. Journal of ACM. 1960, N 2. 23, Warmus M. Transformed point arithmetic for digital computers. Bulletin de 1’academie polonaise des sciences, classe I, 1961, N 4. Глава вторая 24. Клямко Э. И., Моиахо в Г. Д. Метод ускоренного двоич- ного деления в цифровых вычислительных машинах. Прибо- ростроение, 1957, № 2. 25, Рабинович 3. Л., Михновский С. Д., Шляхов- С к а я Н. И. Анализ методов многотактного умножения и де- , ления в ЦВМ. Автоматика и приборостроение, 1962, № 2. 26. Кравченко В. М. Об оценке погрешности двоичного умно- жения. Проблемы кибернетики, 1963, вып. 10. 27. Чавчанидзе В. В., Букреев И. Н., Микеладзе 3. Н.. Кумсишвлли В. А. О новом способе сложения и вычи- тания двоичных чисел на быстродействующих ЦВМ. Труды ин-та физики АН ГССР, 1962, т. 8. 28. Ш к у р б а В. В., Шор Н. 3. Вероятностный расчет среднего времени выполнения арифметических операций. Труды 6-го Всесоюзного совещания по теории вероятностей и математи- ческой статистике. М., 1962. 29. Bankowski J. Dwujedynkowy system zapisu liczb. Archiwum automatiki i telemechaniki, 1965, N 1. 30, F11 a k о w s k i K. Complex method of overflow determination and investigation in binary weight codes with radix-2. Bulletin de 1’academie polonaise des sciences, classe III, 1963, V. II, N 12. 31. Metze I. Minimal square rooting. IEEE Transaction . on electro- nic computer, 1965, N 2. 299
32. М11 c h е 11 J. N. Computer multiplication- and' division 'using binary logarithmus. IRE Transaction on electronic computer, 1962, . N 4. 33, ReitwIesnerL W. Binary arithmetic. Advances in computers, 1960, v. 1. 34. W i 1 s о n-J. B., L e d 1 e у R. S. An algorithm for rapid binaiy division. IRE Transaction on electronic computer, 1961, N 4. Глава третья 35. Соловьев Г. Н. Об одном методе сокращения времени выполнения операции сложения чисел с плавающей запятой. Вычислительная техника, М., Госатомиздат, 1962, вып. 3. 36. Goering О..Radix conversion in a hezadecimal machine IRE Transaction on electronic computer, 1963, N 2. 37. Mо r r i s D. J. Alexa n d er W. An introduction to the ternary code number system; Electronic Engng., 1960, v. 32, N-391. * , * Глава четвертая 38. В a la s i ns ki W., Mrawka S. On algorithmus on arithmetical operations. Bulletin de I’academie polonaise des sciences, classe III, 1957, v. 5, N 8. ' 39. D i e t m e у e r D. L. Conversion from positive to negative and imaginary radix. IEEE Transaction on electronic computer, 1963, * N 1. 40. Knuth D.‘E. At) imaginary number system. Communication of the ACM, 1960, N 2. 41. Maj er ski S., Ziolkowski S. Dwukrotuie pvzyspieszone mnozenie w ukladach liczacych pvzy Zasadach + 2 i — e._ Prace zaklady aparatow matematychnich PAN, 1S62, N II. 42. Nadler M. Division and square root in the quaterimaginary number system. Communs of ACM, 1961, N 4. 43; P a w 1 a k Z. The application of negative base number system to digital differential analyser. Bulietin de I’academie polonaise des sciences, classe Hi, 1960, v. 8, N 3. 44. W a d’el L. B. Conversation from conventional to negative—Base number representation. IRE Transaction on electronic cumputer, . 1961, N 4. Глава пятая 45. Галкин Ф. Я. Об арифметических возможностях кода «2 из 5». Известия ВУЗов, Приборостроение, 1965, № 6. 46. Г о г о б е р и д з е М. Г; Новый способ и устройство быстрого преобразования десятичных чисел в двоичные. Элементы ки- бернетических систем, Тбилиси, 1964. 47. М а р и н о в Ю. П., Н е д е л ч е в Л. А. Нов метод за умно- жение на десетични числа чрез диодна матрица. Годишник машино-електротехнична ин-та. София, 1962 (1963), № 2. . • 48. П о с п е л о в Д. А. Двоично-десятичные коды с двумя отри- цательными весами и свойством дополнительности. Известия ВУЗов, Приборостроение, 1962, № 3. 49. Поспелов Д. А. О двоично-десятичных кодах с одним отри- цательным весом. Известия ВУЗов, Приборостроение, 1962, № 6. 300
50. Ш а у м а и Д'. М. Арифметический узел клавишной настольной электронной машины. Вычислительная техника и вопросы программирования, Изд. ЛГУ, 1962, вып. 1. 51. Beyer W. A. Uniqueness of weighted code representations. IEEE Transaction on electronic computer, 1963, N 2. 52. Dr boh lav J. Poznamka о dekoaickjch • cislicovych Kodech. Aplikace metematika, 1962, N ,5. 53. К1 i r J. Weight codes stroje na Zpracovani informaci, 1962, sb. VIII. 54. L i p p e 1. B. Negative- bit-weight codes and excess codes. IEEE Transaction on electronic computer, 1964, N 3. 55. Lake S. T. Hardware conversion of decimal and binary numbers. Communs of ACM, 1962, N 9. 56. N a d 1 e r M. A code for serial decomal operations and reversible computers. Stroje na Zpracovani informaci, 1957, sb. V. 57. Pawlak Z. The application of systematic binary expansions to decimal codes. Bulletin de 1’academie polonaise des sciences, classe HI, 1960, v. 8, N 3. 58. Vo it el K. Dezimalarithmetin in Parallelrechner. Elektronische Rechenanlagen, 1962, N 5. 59. Weeg S. P. Unigueness of weighted’ code representations. IRE. Transaction on electronic compuier, 1960, N 4., Глава шестая 60. Андреев M. Н. Проблема сравнения и расширения чисел представленных в «чешской» системе. Труды Калининградского технологического ин-та рыбной промышленности и хозяйства, 1962, вып. 16. 61. Жуков-Емельянов О. Д. Некоторые вопросы, связанные с умножением и делением в системе остаточных классов. М., Изд. ИТМ и ВТ АН СССР, 1964. 62. Файн С. Б. Некоторые вопросы машинной арифметики систе- мы остаточных классов. Труды ВЦ АН ГССР, 1963, т. IV. 63. Fraenkel A. S. The use of index calculus and Mersenne pri- met for the design of a high-speed digital multiplier, Journal of ACM, 1961, N 1. 64. Jarner H. L. The residue number ."system. Proceedings of Wes- tern Joint Computer Conf., 1959. 65. Kier Y. A., C h e n e у P. W., Tannenbaum M. Division and overflow detection in residue number systems. IRE Transaction ’ on electronic compuier, 1962, N 4 (перевод: Кибернетический сб., 1964, № 8). 66. S v о b о d a A. Computer progress in Czechoslovakia II. The numerical system of residualclasses. Digital infromations wandler, 1962 (перевод: Кибернетический сб., 1964, № 8). 67. S z a b о N. Sign detection in nonredundant residue systems. IRE Teansaction on electronic computer, 1962, N4 (перевод: Ки- бернетический сб.,. 1962, № 8). 68. Tanaka R. J. Some options in the design of a residue arithme- tic computer. Proceedings National electronic Conf., Chicago, 1963. 301
11 1. Акушский И. Я., Юдицкий Д. И. Машиннаяарифмети ка в остаточных классах. М., Советское радио, 1968. 2. Булгаков И. С. Реализация приближенного умножения в ма- шинах дискретного действия. Известия ВУЗов, Приборострое ние, 1959, № 1. 3, В и д и н Б. В., Орфеев Ю. В. Об одной модификации алго- ритма деления для электронных вычислительных машин. Из-' вестия ВУЗов, Приборостроение, 1964, № 4. .4. Волкл выский В. Л., Чего ли н П. М. Цифровой сумма- тор с независимым переносом. М., Вычислительная техника. 1963, вып. 3. ** - 5. Г а л к и н Ф. Я., Каюмов А. М. Двоично-десятичные пре- образования в целочисленных ЭЦВМ. Известия ВУЗов, При боростроение, 1964, № 4. * 6. Г а л к и н Ф. Я., И в а н о в М. Н. Исключение исправляющих сложений при извлечении квадратного корня. Известия ВУЗов Приборостроение, 1959, № 2. 7. Г а л к и н Ф. Я. Округление десятичных дробей на двоичных ЭЦВМ. Известия ВУЗов, Приборостроение, 1965, № 4. 8. Г а л к и н Ф. Я., Иванов М. Н. Ускоренное извлечение квад - ратного корня на электронных счетных машинах. Известия • ВУЗов, Приборостроение, 1958, № 2. Э. Гогоберидзе М. Г., ДолидзеТ. В. Вычитание двоич- ных чисел в прямом коде в быстродействующих вычислитель- ных машинах. Элементы кибернетических систем, Тбилиси. 1964. 10. Голубев Л...А., Горенштейи Л. М., Петрухин М. И. Метод ускоренного точного умножения двоичных чисел в ЦВМ. Приборостроение, 1962, № 3. 11. Зубов В. Г. Система счисления с дробным основанием. Авто- матический контроль и измерительная техника. Киев 1962. вып. 6. 12. Казангапов А. Н. Некоторые приложения системы оста- точных классов. Труды, первой Казахстанской межвузовской научной конференции по математике.и механике. Алма-Ата, 1965. .. ______ 13. Казангапов А. Н. Представление элементарных функций в системе остаточных классов. Известия АН СССР, сер. физи- ко-математических наук, 1965, вып. 3. 14. К а и т а р и я Г. В. Об одной схеме выполнения операции умножения. Труды Тбилисского НИИ приборостроения и средств автоматизации, 1962, т. 3. 15. Кантария Г. В. Об одном способе сокращенного деления. Труды Тбилисского НИИ приборостроения и средств автома- тизации, 1964, т. 4—5. 16. Каутс к и Я., Фриш И. Округления и некоторые псевдо- операцни на вычислительных машинах. Дубна, 1964. 17. К ё т к о в Ю. Л. Схема сокращенного деления для ЦВМ по- следовательного действия-. Известия ВУЗов, Радиофизика, 1959, вып. 2. 302 -
98, К л а до в I’. К., Ляховицкий Е. М., ШпильбергА. Я- Контроль арифметических рпераций в коде вычетов. Кибер- нетика, 1965, № 4. 19. Мамонтов Е. И. Бессуматорные схемы однотактного пре- образователя параллельных двоичных кодов из прямой формы в дополнение и обратно. Известия ВУЗов, Радиофизика, 1960, вып. 5. 20. М а н у к я н Ю. С. Счетчики, работающие в коде Грея. Эле- менты кибернетических систем, Тбилиси, 1964. 21. Михалев В. М. Оптимальные алгоритмы умножения, исполь- зующие кратные множимого. Журнал вычислительной матема- тики и математической физики, 1964, № 5. 22. Мороз И. Г. Некоторые вопросы одиотактного умножения. Вычислительная математика и техника, Киев, 1L62. - 23. П о п о в Ю. А., Сумароков Л. Н., X е т а г у р о в Я. А. Мат- ричные методы ускорения арифметических операций в ЦВМ. Известия ВУЗов, Приборостроение, 1954, № 6. 24. Поснов Н. Н. Десятичный накапливающий сумматор без распространения переносов Известия ВУЗов, Приборострое- ние; 1965, № 1. 25. Р а б и н о в и ч .3. Л. Про одну модиф! кац1 ю множения. 36i рник праць з обчислювальногматематики! техн! ки, Киев, 1961, т. II. 26. Раманаускас В. А. Ускоренное.умножение десятичных чисел с применением таблиц кратных множимого. Кибернети- ческая техника, Киев, 1S65. * • 27. Романкевич А. М., БычеиокМ. М. Некоторые вопросы, связанные с выполнением арифметических операций в ма- шине, работающей иа десятипозициоиных Элементах. Вопросы теории электронных цифровых математических машин, Киев, 1965, вып. 8. 28. Р у д н е в Ю. П. Вычисление нескольких разрядов частного как возможный метод ускоренного деления иа ЦВМ. Автома- тика и приборостроение, 1962, вып. I. 29, Соборников Ю. П. Об одном‘методе деления и определе- ния мультипликативного переполнения для ЭВМ, работающих в системе остаточных классов. Журнал вычислительной мате- матики и математической физики, 1965, № 2. 30. С о л о в ь е в Г. Н. Об одном методе сокращения времени выполнения времени операции сложения чисел с плавающей запятой. М., Вычислительная техника, 1962, вып. 3. 31, Фурсов К. Я. Перевод чисел из одной системы счисления в другую. Журнал вычислительной математики и математиче- ской физики, 1965, № 1. - 32. Хета гуров Я. А. О проектировании арифметических устройств с учетом надежности работы. М., Вычислительная техника, 1962, вып. 3. 33. Хетагуров Я. А. Схема сокращения времени умножения. М., Вычислительная техника, 1960, вып. 1. 34. Чхеидзе М. В., Манукян Ю. С. К вопросу о линейных преобразованиях между двоичным кодом и кодом Грея. Эле- менты кибернетических систем, Тбилиси, 1964. 35. Чхеидзе М. В. К вопросу проведения арифметических опе- раций в двоичном циклическом коде. Вопросы теории матема- тических ЭЦМ, Киев, 1963. 303
36. Чудаков А. Д. Об алгоритмах сравнения двух двоичных чисел. Автоматика и телемеханика, 1964, № 3. 37. Ч у д а к о в А. Д. Построение блоков сложения и вычитания, работающих в невзвешенном коде Грея из взвешенных мо- дульных ячеек. Автоматика и телемеханика. 1966, №2. 38. Шаумаи А. М. Класс сумматоров с повышенной надежностью работы. Вычислительная техника и вопросы программирова- ния. Изд. ЛГУ, 1965, вып. 4. 39. Ш е х т м а н -Л. М. Новые методы деления на ЦВМ. М., Элект- ронные вычислительные машины, 1960, вып 1. 40. Эйнгорин М. Я. О некоторых операциях, реализуемых вычислительной маной последовательного типа. Известия ВУЗов, Радиофизика, 1962, № 2. 41. В a las inski W., М row ska S. On algorithmic of arithme- tical operations. Bulletin de 1’academie polonaise de sciences, classe III, 1957, v. 5, N 8. 42. В а п k о w s k i J. Pvreniesienia w sumatorach dwojkowych. 9 Archiwum automatiki i telemechaniki, 1964; N 1. 43. D г о о у a n J., H a d e 1 W. A programmed introduction to num- ber systems. N. Y.— London, 196L 44. Ercoli P., Vacca R. Arithmetica binana a precisione multipla: confrorito fra la soluzione automatica e la s'oluzione programmata. Atti del colloquio su questian di analisi numerica, Roma, 1958. . 45. Fialkowski K. Kompleksowa metoda wyznaczania i badania nadmiaru. Archiwum automatiki ; telemechaniki, 1963, N 3., *46. Fia’lkowski К. О pewnym nogolnionum zapisie minus-dwoj- kowym. Archiwum automatiki 1 telemechaniki, 1965, N 1. 47. Green A. Binary multiplication in digital computers. Proceedings of IRE, 1959, v. 47, N 6. 48. Guff in С. M. A computer for solwing linear simultaneous equations using the residue number system. IRE Transaction on electronic computer, 1962, N.2. 49. H e n d r i c k s о n H. C. Fast highaccuracy binary parallel addition IRE. Transaction on electronic computer, 1960, -N 4. 50. H о w s h о 1 d e r A. S. The generalization of errors in digital computation. Bulletin of the american Mathematical Society, 1954, v. 60, N 3. .51 . Hsiao M. Y., Seller.F. F. Jr. The carry-dependent sum adder. IEEE Transaction on electronic computer, 1963, N 3. » 52. Johnson H. Optimum time for multiplication on a digital com- puter. Computer Journal, 1961, N 4. 53. К 1 i r J. A note on Svoboda’s algorithm for division. Stroje na • Zpracovani informaci, 1963, Sb. IX. 54. Krish'namurthy E. V. On a divide-and-correct method for variable precision division. Communs of ACM, 1965, N 3. 55. К u d e 1 s k i J. Automatyzacja pierwiastkowania w marzyn: ie opartej na systeme — 2. Archiwum automatiki i telemechaniki, 1963, N 4. 56. Lazarkiewicz A., Balasinski W. A simple experimental computer with negative basis. Mathematical computers, 1961, v. 15, N 75. 57. L i n d a m о о d S. E., Shapiro J. Magnetude comparison and overflow detection in modular arithmetic computers. SIAM Re- view, 1963, N 4. 304
58. Lu cal H. M. Arithmetic operations for digital computers using a modified reflected binary code. IRE Transaction on electronic computer, 1959, N 4. 59. Lu' кaszewicz L. Accumulation of errors- in approximate cal- culations. Bulletin de 1’academie polonaise des sciences, classe I. 1958, N 4. > 60. M egg it I. E. Pseudo division and pseudo multiplication proces- ' ”ses. IBM Journal, 1962, N-4. 61. Merill R. D. Jr. Improving digital computer performance using residue number theory. IEEE Transaction on electronic computer, N 2. 62. Metze I. A class of binary divisions yielding minimally repre- sented quotients. IRE Transaction on electronic computer, 1962, 1962, N 6. 63. M e t z e 1., R о b e r t s о n J. E. Elimination of carry- propagation in digital computers. Information processing. Paris — Miinchen— London, 1960. 64. Nadler M. A method of division in dogital computers. Leit- schrift angewandte Mathematik und Mechanik, 1956, v. 36, N 11—12. 65. N a d 1 e r M. Delem cicslocovynu pocitaci metodou radixu. Stroje na Zpracovani informaci, 1956, Sb. IV. 66. P a w 1 a к Z. An electronic digital computer based on the «—2» system. Bulletin de 1’academie polonaise des sciences, classe III; 1959, N 12. 67. Pawlak.Z. Some remarks on a «—2» digital computer. Bulletin de 1’academia polonaise des sciences, classe III, 1951, N 4. 68. Pawlak Z. The organization of a digital computer based on the «—2» system. Bulletin de 1’academia polonaise des sciences, classe III, 1960, N 5. 69. Pawlak Z., W а к u 1 i c z A. Use of expansions witc a negative basis i-n the arithmometer of a digital computer. Bulletin de 1’aca- demie polonaise des sciences, classe 1, 1957, N 2. 70. R e i t w i e s n e r I. W. The determination of carry propagation length for binary addition. IRE Transaction on electronic compu- ter, 1960, N 1. ' . 71. S a 11 m a n- P. I. Reducing computing time for synchronous binary division. IRE Transaction on electronic computer, 1961, N 2. 72. Shapiro H. S. Some remarks on modular arithmetic and paral- lel computation. Mathematical computers, 1962, v. 16, N 78. 73. Sklansky J. An evaiution of several twosunumand binary adders. IRE Transaction on electronic computer, I960, N 2. 74. S klansky J. Conditional — sum addition logic IRE Transaction on electronic computer, 1960, N 2. 75. Svob-oda A. An algorithm for division. Stroje na zpracovani informaci, 1963, Sb. IX. 76. S v о b о d a A., V a 1 a c h M. Operatove obvody. Stroje na Zpra- covani informaci, 1955, Sb. III. 77. Svoboda A. Rational numerical system of residual classes. Stroje na Zpracovani informaci, 1957, Sb. V. 78. Szabo N. Recent advances in modular arithmetic. Switching . theory space technology. Stanford Univ. Press, 1963. В-й).—20 ' 305
79. Va la ch M. Prevod- cisel ze soustavy zbytkovych trid do polyadicke soustavy zmenoumeritka periody. Stroje na Zpracovani informaci. 1956, Sb. IV. 80. V a 1 a c h . M. Vznik kodu a ciselne soustavy zbytkovych trid Stroje na zpracovani informaci, 1955, Sb. 111. 81. Wi nog rad S. On the time required to perform addition. Jour- nal of ACM, 1965, N 2. 82. W о 1 f e J. M. Reducing trumcation errors by programming. Com muns of ACM, 1961, N 6.
Д. А.. ПОСПЕЛОВ АРИФМЕТИЧЕСКИЕ ОСНОВЫ ВЫЧИСЛИТЕЛЬНЫХ МАШИН ДИСКРЕТНОГО ДЕЙСТВИЯ Допущено Министерством высшего и среднего спе- циального образования СССР в качестве учебного пособия для студентов высших технических учеб- ных заведений ОМОСКВА< i 197 О ГОД СО «ВЫСШАЯ ШКОЛАМ МОСКВА- 1970
6Ф7 . П61 УДК 681.142.32 Поспелов Д. А. П61 Арифметические основы вычислительных .ма- шин дискретного действия. Учеб, пособие для ' втузов. М., «Высш, школа», 1970. 308 с. с илл. В книге рассмотрены различные системы счисления, используемые в вычислительной тех- нике. Приведено большое количество примеров. Многие проблемы и задачи рассматриваются впервые. Книга представляет интерес как для студентов, изучающих теорию ЭВМ, так и для специалистов, работающих в области вычисли- тельной техники. 2—2—4 БЗ-35/13-7О