Материалы сайта
Это интересно
Системы счисления
Содержание: 1. История развития систем счисления. 2 2. Двоичные системы счисления 6 3. Двоичная арифметика 10 4. Формы представления чисел с фиксированной и плавающей запятой. 13 5. Сложение чисел с фиксированной запятой. 16 6. Сложение чисел с плавающей запятой. 16 7. Умножение чисел с фиксированной запятой. 17 8. Умножение чисел с плавающей запятой. 18 9. Прямой, обратный и дополнительный коды. Модифицированный код. 20 История развития систем счисления. Счисление, нумерация, - это совокупность приемов представления натуральных чисел. В любой системе счисления некоторые символы ( слова или знаки ) служат для обозначения определенных чисел, называемых узловыми, остальные числа ( алгоритмические ) получаются в результате каких – либо операций из узловых чисел. Системы счисления различаются выбором узловых чисел и способами образования алгоритмических, а с появлением письменных обозначений числовых символов системы счисления стали различаться характером числовых знаков и принципами их записи. Наиболее совершенным принципом представления чисел является позиционный ( поместный ) принцип, согласно которому один и тот же числовой знак ( цифра ) имеет различные значения в зависимости от места, где он расположен. Такая система счисления основывается на том, что некоторое число n единиц ( основание системы счисления ) объединяются в одну единицу второго разряда, n единиц второго разряда объединяются в одну единицу третьего разряда и т. д. Основанием систем счисления может быть любое число, больше единицы. К числу таких систем относится современная десятичная система счисления ( с основанием n=10 ). В ней для обозначения первых десяти чисел служат цифры 0,1,…,9. Несмотря на кажущуюся естественность такой системы, она явилась результатом длительного исторического развития. Возникновение десятичной системы счисления связывают со счетом на пальцах. Имелись системы счисления и с другим основанием: 5.12 ( счет дюжинами ), 20 ( следы такой системы сохранились во французком языке, например quatre – vingts, т. е. буквально четыре – двадцать, означает 80 ), 40, 60 и др. При вычислениях на ЭВМ часто применяется система счисления с основанием 2. У первобытных народов не существовало развитой системы счисления. Еще в 19 веке у многих племен Австралии и Полинезии было только два числительных: один и два; сочетания их образовывали числа: 3 -–два – один, 4 – два – два, 5 – два – два – один и 6 – два – два – два. О всех числах, больших 6, говорили «много», не индивидуализируя их. С развитием общественно – хозяйственной жизни возникла потребность в создании систем счисления, которые позволяли бы и обозначать все большие совокупности предметов. Одной из наиболее древних систем счисления является египетская иероглифическая нумерация, возникшая еще за 2500 – 3000 лет до н. э. Это была десятичная непозиционная система счисления, в которой для записи чисел применялся только принцип сложения ( числа, выраженные рядом стоящими цифрами, складываются ). Специальные знаки имелись для единицы ?,десяти ?,ста и других десятичных разрядов до [pic]. Число 343 записывалось так: Аналогичными системами счисления были греческая геродианова, римская, сирийская и др. Римские цифры – традиционное название знаковой системы для обозначения чисел, основанной на употреблении особых символов для десятичных разрядов: I V X L C D M 1 5 10 50 100 500 1000 Возникла около 500 до н. э. у этрусков и использовалась в Древнем Риме; иногда употребляется и в настоящее время. В этой системе счисления натуральные числа записываются при помощи повторения этих цифр. При этом если большая цифра стоит перед меньшей, то они складываются ( принцип сложения ), если же меньшая – перед большей, то меньшая вычитается из большей ( принцип вычитания ). Последнее правило применяется только во избежания четырехкратного повторения одной и той же цифры. Например, I, X, C, ставятся соответственно перед X, C, M для обозначения 9, 90, 900 или перед V, L, D для обозначения 4, 40, 400. Например, VI=5+1=6, IV=5-1=4 ( вместо IIII ), XIX=10+10-1=19 ( вместо XVIIII), XL=50-10=40 ( вместо XXXX ), XXXIII=10+10+10+1+1+1=33 и т. д. Выполнение арифметических действий над многозначными числами в этой системе весьма неудобно. Более совершенными системами счисления являются алфавитные: ионийская, славянская, еврейская, арабская, а также грузинская и армянская. Первой алфавитной системой счисления была по – видимому, ионийская, возникшая в греческих колониях в Малой Азии в середине 5 века до н. э. В алфавитных системах счисления числа от 1 до 9, а также все десятки и сотни обозначаются, как правило, последовательными буквами алфавита ( над которыми ставятся черточки, чтобы отличить записи чисел от слов). Число 343 в ионийской системе записывалось так: [pic][pic] ( здесь [pic] - 300, [pic] - 40, [pic][pic] - 3[pic]). Цифровое значение славянских азбук. Так для кириллицы: [pic] Для обозначения чисел над буквами специальный знак [pic] титло (иногда над каждой буквой, иногда только над первой или же над всем числом).При записи чисел, больших 10, цифры писались слева направо в порядке убывания десятичных разрядов ( однако иногда для чисел от 11 до 19 единицы записывались ранее десяти ). Для обозначения тысяч перед числом их ( слева внизу ) ставился особый знак [pic]. Так, например: [pic] Для обозначения и наименования высших десятичных разрядов ( более [pic] ) существовали две системы: «малое число» и «великое число»; в последнюю систему входили числа до [pic] или даже [pic] ( «боле сего несть человеческому уму разумевати» ): [pic] Славянские цифры до 18 века были основным цифровым обозначением в России. В алфавитных системах счисления, запись чисел гораздо короче, чем в предыдущих; кроме того, над числами, записанными в алфавитной нумерации, гораздо легче производить арифметические действия. Однако в алфавитных системах счисления нельзя записывать сколь угодно большие числа. Греки расширили ионийскую нумерацию: числа 1000, 2000,…,9000 они обозначали теми же буквами, что и 1,2,…,9, но ставили штрих внизу слева: так, [pic] обозначала 1000, [pic] - 2000 и т. д. Для 10 000 был введен новый знак [pic]. Тем не менее ионийская система счисления оказалась непригодной уже для астрономических вычислений эпохи эллинизма, и греческие астрономы того времени стали комбинировать алфавитную систему с шестидесятеричной вавилонской – первой известной нам системой счисления, основанной на позиционном принципе. В системе счисления древних вавилонян, возникшей примерно за 2000 лет до н. э. все числа записывались с помощью двух знаков: ( для единицы) и ( для десяти). Числа до 60 записывались как комбинации этих двух знаков с применением принципа сложения. Число 60 снова обозначалось знаком , являясь единицей высшего разряда. Для записи чисел от 60 до 3600 вновь применялся принцип сложения, а число 36 000 обозначалась тем же знаком, что и единица, и т. д. Число 343=5*60+4*10+3 в этой системе записывалось так: Однако в силу отсутствия знака для нуля, которым можно было бы отмечать недостающие разряды, запись чисел в этой системе счисления не была однозначной. Особенностью вавилонской системы счисления было то, что абсолютное значение чисел оставалось неопределенным. Другая система счисления основанная на позиционном принципе, возникла у индейцев майя, обитателей полуострова Юкатан ( Центральная Америка) в середине 1 – го тыс. н. э. У майя существовали две системы счисления: одна, напоминающая египетскую, употреблялась в повседневной жизни, другая – позиционная, с основанием 20 и особым знаком для нуля, применялась при календарных расчетах. Запись в этой системе, как и в нашей современной, носила абсолютный характер. Современная десятичная позиционная система счисления возникла на основе нумерации, зародившейся не позднее 5 в. в Индии. До этого в Индии имелись системы счисления, в которых применялся не только принцип сложения, но и принцип умножения ( единица какого – нибудь разряда умножается на стоящее слева число). Аналогично строились старокитайская система счисления и некоторые другие. Если, например, условно обозначить число 3 символом III, а число 10 символом X, то число 30 запишется как IIIX ( три десятка ). Такие системы счисления могли служить подходом к мозданию десятичной позиционной нумерации. Десятичная позиционная система дает принципиальную возможность записывать сколь угодно большие числа. Запись чисел в ней компактна и удобна для производства арифметических операций. Поэтому вскоре после возникновения десятичная позиционная система счисления начинает распространяться из Индии на Запад и Восток. В 9 веке появляются рукописи на арабском языке, в которых излагается эта система счисления, в 10 веке десятичная позиционная нумерация доходит до Испании, в начале 12 века она появляется и в других странах Европы. Новая система счисления получила название арабской, потому что в Европе с ней познакомились впервые по латинским переводам с арабского. Только в 16 веке новая нумерация получила широкое распространение в науке и житейском обиходе. В России она начинает распространятся в 17 веке и в самом начале 18 в. вытесняет алфавитную. С введением десятичных дробей десятичная позиционная система счисления стала универсальным средством для записи всех действительных чисел. Двоичные системы счисления Системой счисления называется совокупность приемов и правил для наименования и обозначения чисел. Условные знаки, применяемые для обозначения чисел, называются цифрами. Обычно все системы счисления разбивают на два класса: непозиционные и позиционные. Непозиционной называют систему счисления, в которой значение каждой цифры в любом месте последовательности цифр, означающей запись числа, не изменяется. Исторически первыми системами счисления были именно непозиционные системы. Одним из основных недостатков является трудность записи больших чисел. Запись больших чисел в таких системах либо очень громоздка, либо алфавит системы чрезвычайно велик. Примером непозиционной системы счисления, достаточно широко применяющейся в настоящее время, может служить так называемая римская нумерация. Для определения значения числа недостаточно знания типа и алфавита системы счисления. для этого необходимо еще задание правила, позволяющего по значению цифр установить значение числа. Например, для определения значения числа 945 в обычной десятичной системе счисления применяется функция десятичного сложения, т. е. значение числа определяется по значению цифр (9 в крайней левой позиции, 5 в крайней правой позиции, 4 между ними) обычным суммированием: значение числа 945 есть 900+40+5. В римской нумерации число IX определяется вычитанием: значение числа IX есть 10-1=9. Системы, в которых значение каждой цифры зависит и от места в последовательности цифр при записи числа, носят название позиционных. Позиционной системой счисления является обычная десятичная система счисления. [pic]При выполнении различных операций в современных цифровых системах числа обычно представляются в двоичной системе счисления, основанием которой является число 2. При этом целое k-разрядное десятичное число [pic] записывается в виде n-разрядного двоичного числа [pic]: [pic]=[pic][pic]=[pic], где [pic]=0, 1, … , 9 – цифра в i-м разряде десятичного числа: [pic]=0 или 1 – цифра в j-м разряде двоичного числа. Введением отрицательных степеней числа 2 представляются дробные числа. Таким образом, в двоичном счислении любое числи можно представить двумя числами: 0 и 1. Для представления этих чисел в цифровых системах достаточно иметь электронные схемы, которые могут принимать два состояния, четко различающиеся значением какой-либо электрической величины – потенциала или тока. Одному из значений этой величины соответствует цифра 0, другому 1. Относительная простота создания электронных схем с двумя электрическими состояниями и привела к тому, что двоичное представление чисел доминирует в современной цифровой технике. При этом 0 обычно представляется низким уровнем потенциала, а 1 – высоким уровнем. Такой способ представления называется положительной логикой. Перевод десятичного числа в двоичный код можно осуществлять путем последовательного деления числа на 2. Остатки ( 0 или 1 ), получающиеся на каждом шаге деления, формируют двоичный код преобразуемого числа, начиная с его младшего разряда. В качестве старшего разряда двоичного кода записывается 1, полученная в результате последнего шага деления. Например, преобразование числа [pic]=109 в двоичный код выполняется следующим образом: [pic]: остатки 109 2 [pic]=1 54 2 [pic]=0 27 2 [pic]=1 13 2 [pic]=1 6 2 [pic]=0 3 2 [pic]=1 1 [pic]= [pic]=109=[pic]=[pic]=1101101 Обратное преобразование выполняется следующим образом: [pic]=[pic] 1 0 1 1 0 1 1 Цифровые системы оперируют действительными, целыми и дробными числами, которые могут иметь две формы представления: с плавающей запятой, с фиксированной запятой. При использовании плавающей запятой число состоит из двух частей: мантиссы m, содержащей значащие цифры числа, и порядка p, показывающего степень, в которую надо возвести основание числа q, чтобы полученное при этом число, умноженное на мантиссу , давало истинное значение представляемого числа: [pic] Мантисса и порядок представляются в двоичном коде. Обычно число дается в нормализованном виде, когда его мантисса является правильной дробью, причем первая значащая цифра ( единица ) следует непосредственно после запятой: например, [pic] где m=0,1010; p=10; q=2 При использовании фиксированной запятой число представляется в виде единого целого, причем положение запятой в используемой разрядной сетке жестко фиксировано. Обычно числа с фиксированной запятой даются в виде правильной дроби. Для этого все числа умножают на масштабный коэффициент, чтобы перевести их в правильную дробь. Цифровые системы, использующие числа с плавающей запятой, сложнее систем, использующих числа с фиксированной запятой, так как при этом требуется выполнение операций как над мантиссами, так и над порядками. Однако диапазон представляемых чисел при одинаковом числе разрядов в системах с плавающей запятой значительно больше. Для представления знака числа используется знаковый разряд z, который обычно располагается перед числовыми разрядами. Для положительных чисел значение знакового разряда z=0, для отрицательных чисел z=1. Для чисел с плавающей запятой вводятся отдельные знаковые разряды для мантиссы и для порядка чисел. Для представления числе со знаком в цифровых системах используется обратный[1] или дополнительный[2] код (таб. 1.). При этом положительные числа представляются в обычном двоичном коде. Обратный код отрицательного числа [pic] образуется путем замены 0 во всех разрядах исходного двоичного числа [pic] на 1, и наоборот. Дополнительный код отрицательного числа [pic] получается из обратного прибавлением 1 к младшему разряду. Особенность кода Грея в том , что при переходе к каждому последующему числу в коде изменяется значение только одного двоичного разряда. При этом двухразрядные числа образуют циклическую последовательность 00-01-11-10 (0- 1-2-3), трехразрядные – последовательность 000-001-011-010-110-111-101-100- 000 (0-1-2-3-4-5-6-7-0) и т.д. Такая цикличность кода является весьма удобной, например, для кодирования угловых перемещений в преобразователях угла поворота в цифровой код. Таблица 1. Наиболее распространенные двоичные коды от 0 до 15 |Десятичное |Форма представления | |число | | | |Двоичное |Обратный код |Дополнительный |Код Грея | | |счисление | |код | | |[pic] |[p|[pi|[p|[pi|[pi|[pi|[pi|[pi|[pi|[pi|[pi|[p|[p|[p|[p|[p| | |ic|c] |ic|c] |c] |c] |c] |c] |c] |c] |c] |ic|ic|ic|ic|ic| | |] | |] | | | | | | | | |] |] |] |] |] | |0 |0 |0 |0 |0 |1 |1 |1 |1 |0 |0 |0 |0 |0 |0 |0 |0 | |1 |0 |0 |0 |1 |1 |1 |1 |0 |1 |1 |1 |1 |0 |0 |0 |1 | |2 |0 |0 |1 |0 |1 |1 |0 |1 |1 |1 |1 |0 |0 |0 |1 |1 | |3 |0 |0 |1 |1 |1 |1 |0 |0 |1 |1 |0 |1 |0 |0 |1 |0 | |4 |0 |1 |0 |0 |1 |0 |1 |1 |1 |1 |0 |0 |0 |1 |1 |0 | |5 |0 |1 |0 |1 |1 |0 |1 |0 |1 |0 |1 |1 |0 |1 |1 |1 | |6 |0 |1 |1 |0 |1 |0 |0 |1 |1 |0 |1 |0 |0 |1 |0 |1 | |7 |0 |1 |1 |1 |1 |0 |0 |0 |1 |0 |0 |1 |0 |1 |0 |0 | |8 |1 |0 |0 |0 |0 |1 |1 |1 |0 |0 |0 |0 |1 |1 |0 |0 | |9 |1 |0 |0 |1 |0 |1 |1 |0 |0 |1 |1 |1 |1 |1 |0 |1 | |10 |1 |0 |1 |0 |0 |1 |0 |1 |0 |1 |1 |0 |1 |1 |1 |1 | |11 |1 |0 |1 |1 |0 |1 |0 |0 |0 |1 |0 |1 |1 |1 |1 |0 | |12 |1 |1 |0 |0 |0 |0 |1 |1 |0 |1 |0 |0 |1 |0 |1 |0 | |13 |1 |1 |0 |1 |0 |0 |1 |0 |0 |0 |1 |1 |1 |0 |1 |1 | |14 |1 |1 |1 |0 |0 |0 |0 |1 |0 |0 |1 |0 |1 |0 |0 |1 | |15 |1 |1 |1 |1 |0 |0 |0 |0 |0 |0 |0 |1 |1 |0 |0 |0 | Перевод десятичных чисел в двоичный код требует использования достаточно сложных схем преобразователей и занимает относительно долгое время. Более просто и быстро осуществляется перевод десятичных чисел в двоично-десятичный код. При этом цифра в каждом разряде десятичного числа заменяется соответствующим четырехразрядным двоичным числом (тетрадой) согласно таб. 2 Таблица 2. Наиболее распространенные двоично-десятичные коды чисел от 0 до 9 | | | |Десятичное |Двоично-десяти|Код Айкена |Код «с избытком | | |число |чный код |(2-4-2-1) |3» | | | |(8-4-2-1) | | | | |[pic] |[p|[pi|[p|[pi|[pi|[pi|[pi|[pi|[pi|[pi|[pi|[pi| | | |ic|c] |ic|c] |c] |c] |c] |c] |c] |c] |c] |c] | | | |] | |] | | | | | | | | | | | |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |0 |1 |1 | | |1 |0 |0 |0 |1 |0 |0 |0 |1 |0 |1 |0 |0 | | |2 |0 |0 |1 |0 |0 |0 |1 |0 |0 |1 |0 |1 | | |3 |0 |0 |1 |1 |0 |0 |1 |1 |0 |1 |1 |0 | | |4 |0 |1 |0 |0 |0 |1 |0 |0 |0 |1 |1 |1 | | |5 |0 |1 |0 |1 |1 |0 |1 |1 |1 |0 |0 |0 | | |6 |0 |1 |1 |0 |1 |1 |0 |0 |1 |0 |0 |1 | | |7 |0 |1 |1 |1 |1 |1 |0 |1 |1 |0 |1 |0 | | |8 |1 |0 |0 |0 |1 |1 |1 |0 |1 |0 |1 |1 | | |9 |1 |0 |0 |1 |1 |1 |1 |1 |1 |1 |0 |0 | | Например, число [pic] в двоично-десятичном коде записывается в виде [pic]0111 0010 1001. Для выполнения сложения и вычитания двоично-десятичных чисел наиболее удобно использовать самодополняющиеся коды, к числу которых относятся код Айкена, код “с избытком 3 ”.Код Айкена отличается от обычного двоично-десятичного, имеющего весовые коэффициенты разрядов в тетрадах 8-4- 2-1, другими значениями весовых коэффициентов разрядов: 2-4-2-1. Код “с избытком 3”получается из обычного двоично-десятичного арифметическим прибавлением числа 3 (двоичное число 0011). Как видно из таблицы 2 обратный код [pic]числа, представленного в каком-либо самодополняющем двоично-десятичном коде [pic],является его двоичным дополнением до 9. Например, число 5 в коде «с избытком 3» [pic]=1000 имеет обратный код [pic]=0111, соответствующий числу 4 в коде «с избытком 3», которое «дополняет» число 5 до 9, так как 5+4=9. Двоичная арифметика. Мы будем рассматривать двоичную систему счисления с цифрами 0,1. Именно эта система счисления получила широкое применение в вычислительных машинах. Начало исследования этой системы относится к XVI веку. Удобство и простоту выполнения арифметических операций в двоичной системе счисления отмечали еще Б. Паскаль, Г. Лейбниц и др. Рассмотрим правила выполнения арифметических операций с двоичными числами. СЛОЖЕНИЕ. Для того чтобы выполнить сложение двух чисел, записанных в двоичной системе счисления, достаточно знать простейшую таблицу сложения: 0+0=0 0+1=1 1+0=1 1+1=10 Последняя сумма представляет собой двузначное число. Это следует понимать как перенос одной двоичной единицы в соседний старший разряд. Это можно записать так: 1+1=0+перенос единицы в соседний старший разряд. Пример: Сложить двоичные числа [pic] и [pic]. Правила арифметики во всех позиционных системах счисления аналогичны. Для выполнения сложения запишем числа столбиком так, чтобы соответствующие разряды чисел оказались друг под другом. Имеем + 110,1011 10111,10101 10001,00011 – поразрядная сумма без учета переносов 11 1, 1 - переносы 11100,01011 - поразрядная сумма без учета повторных переносов 1 11110,01011 - окончательная сумма. Сложение нескольких чисел вызывает некоторые трудности, так как в результате поразрядного сложения могут получится переносы, превышающие единицу. В таких случаях приходится учитывать переносы не только в соседней, но и другие старшие разряды. ВЫЧИТАНИЕ. Таблица вычитания имеет вид 0-0=0 1-0=1 1-1=0 10-1=1 Вычитание в двоичной системе выполняется аналогично вычитанию в десятичной системе счисления. При необходимости, когда в некотором разряде приходится вычитать единицу из нуля, занимается единица из следующего старшего разряда. Если в следующем разряде нуль, то заем делается в ближайшем старшем разряде, в котором стоит единица. При этом следует понимать, что занимаемая единица равна двум единицам данного разряда, т. е. вычитание выполняется по следующему правилу. Пример. Вычесть их [pic]=11010,1011 число [pic]=1101,01111 11010,1011 - 1101,01111 1101,00111 УМНОЖЕНИЕ. Умножение двух двоичных чисел выполняется так же, как и умножение десятичных. Сначала получаются частичные произведения и затем их суммируют с учетом веса соответствующего разряда множителя. Отличительной особенностью умножения в двоичной системе счисления является его простота, обусловленная простотой таблицы умножения. В соответствии с ней, каждое частичное произведение или равно нулю, если в соответствующем разряде множителя стоит нуль, или равно множимому, сдвинутому на соответствующее число разрядов, если в соответствующем разряде множителя стоит единица. Таким образом, операция умножения в двоичной системе сводится к операциям сдвига и сложения. Умножение производится, начиная с младшего или старшего разряда множителя, что и определяет направление сдвига. Если сомножители имеют дробные части, то положение запятой в произведении определяется по тем же правилам, что и для десятичных чисел. Пример. Перемножить двоичные числа [pic]=101,1101 и [pic]=1001,101 1011101 *1001101 1011101 0000000 1011101 1011101 0000000 0000000 1011101 1101111111001 Искомый результат: 110111,1111001 Тот же результат получим, начиная умножение со старших разрядов множителя: 1011101 *1001101 1011101 1011101 1011101 1011101 1011101 1101111111001 ДЕЛЕНИЕ. Деление чисел в двоичной системе производится аналогично делению десятичных чисел. Рассмотрим деление двух целых чисел, так как делимое и делитель всегда могут быть приведены к такому виду путем перениесения запятой в делимом и делителе на одиноаковое число разрядов и дописывания неоюходимых нулей. Деление начинается с того, что от делимого слева отделяется минимальная группа разрядов, которая, рассматриваемая как число, превышает или равна делителю. Дальнейшие действия выполняются по обычным правилам, прием последняя целая цифра частного получается тогда, когда все цифры делимого исчерпаны. Пример. Разделить [pic]=1101,11 на [pic]=10111. 1101110 0111 -10111 100,1100 100100 -10111 11010 -10111 Остаток 1100 Пример. Разделить [pic]=10001,111 на [pic]=11,01 10001111 11010 -11010 101,1 100111 -11010 11011 -11010 00000 Искомый результат 101,1 Таким образов, выполнение арифметических операций в двоичной системе счисления достаточно просто. Особенно просто выполнять операции сложения, вычитания и умножения. Благодоря этому, применение двоичной системы в вычислительных машинах позволяет упростить схемы устройств, в которых осуществляются операции над числами. Формы представления чисел с фиксированной и плавающей запятой. При представлении числа в двоичном коде с цифрами 0,1 в каждом разряде записываются цифры 0 или 1. Так как в ЦВМ «запись» числа осуществляется с помощью технических устройств, то для представления его в такой форме необходимо располагать устройствами с двумя надежно различными состояниями, которым могут быть сопоставлены значения 0 или 1. Комбинация таких устройств, число которых соответствует количеству разрядов записываемого числа, может быть использована для представления чисел в ЦВМ. В качестве таких устройств, могут быть использованы триггеры. Набор триггеров, предназначенных для представления чисел в ЦВМ, а также для выполнения над ними некоторых логических преобразований, называется регистром. Разумеется, число разрядов, отведенное для записи числа, соответствующее числу триггеров, в ЦВМ всегда конечно. Выбор количества разрядов для представления чисел в ЦВМ является одним из самых ответственных этапов конструирования вычислительной машины и обуславливается целым рядом требований, среди которых одно из важнейших – необходимая точность вычислений. В ЦВМ используют две формы представления чисел: естественную и полулогарифмическую. Числа с фиксированной запятой. Числа с фиксированной запятой. При этой форме обычно запятая, отделяющая целую часть числа от ее дробной части, фиксируется перед старшим разрядом модуля числа. | | | | | | | | |… | | | Разряды модуля числа Знаковый разряд Место запятой Таким образом, значение модуля числа всегда оказывается меньше единицы. Это условие путем выбора определенных масштабных коэффициентов должно выполнятся для исходных данных задачи и всех промежуточных результатов вычислений. При занесении числа в ячейку памяти свободные младшие разряды заполняются нулями, а если число значащих разрядов модуля больше n – 1, то младшие разряды модуля, которые не поместились в разрядной сетке, теряются. Это приводит к погрешности, значение которой меньше единицы младшего разряда разрядной сетки, т. е. [pic]. Так, при n=16 [pic] при n=32 [pic]. Если число имеет целую часть, то для ее хранения в разрядной сетке места нет, она теряется, число в разрядной сетке оказывается ошибочным. Достоинство представления чисел в форме с фиксированной запятой состоит в простоте выполнения арифметических операций. Недостатки – в необходимости выбора масштабных коэффициентов и в низкой точности представления с малыми значениями модуля ( нули в старших разрядах модуля приводит к уменьшению количества разрядов, занимаемых значащей частью модуля числа ). Числа с плавающей запятой. Для научно – технических расчетов необходимо представлять числа в широком диапазоны и с достаточно большой точностью. Указанным требованиям отвечают числа с плавающей запятой. m m – 1 1 p p – 1 1 | | | … | | | | … | | Знак Модуль мантиссы Знак Модуль порядка числа порядка Число состоит из мантиссы, старший разряд которой определяет знак числа, и порядка со знаком. Значение модуля мантиссы представляется двоичным дробным числом, т. е. запятая фиксируется перед старшим разрядом модуля мантиссы, порядок представляется целым числом. Порядок указывает действительное положение запятой в числе. Код в приведенном формате представляет значение числа в полулогарифмической форме: [pic], где М и П мантисса и порядок числа. Точность представления значений зависит от количества значащих цифр мантиссы. Для повышения точности числа с плавающей запятой представляются в нормализованной форме, при которой значение модуля мантиссы лежит в пределах [pic]. Признаком нормализованного числа служит наличие единицы в старшем разряде модуля мантиссы. В нормализованной форме могут быть представлены все числа из некоторого диапазона за исключением нуля. Нормализованные двоичные числа с плавающей запятой представляют значения модуля в диапазоне [pic] где [pic] - максимальное значение модуля порядка. Так, при p=7 [pic]-1=[pic]=63 и диапазон представления модулей нормализованных чисел [pic], [pic] Таким образом, диапазон чисел от [pic] до [pic]. Для расширения диапазона представляемых чисел при фиксированной длине разрядной сетки ( m+p ) в качестве основания системы счисления выбирается [pic]. При этом число, представляемое в разрядной сетки, приобретает значения [pic]. Нормализованная мантисса 16 – ричного числа с плавающей запятой имеет значения, лежащее в диапазоне [pic].Признаком нормализации такого числа является наличие хотя бы одной единицы в четырех старших разрядах модуля мантиссы. Диапазон представления чисел в этом случае существенно расширяется, находясь при том же количестве разрядов в пределах от [pic] до [pic]. Рассмотрим погрешность представления чисел с плавающей запятой. Абсолютная погрешность числа [pic]. Предельная относительная погрешность – отношение абсолютной погрешности к числу при минимальном значении модуля мантиссы нормализованного числа. [pic]. Отсюда видно, что точность представления чисел определяется количеством разрядов, отводимых в разрядной сетке под мантиссу. В современных ЭВМ числа с плавающей запятой имеют основания системы счисления 16 и представляются в двух форматах: коротком ( с числом разрядов 32 ) и длинном ( с числом разрядов 64 ). Длинный формат предусматривает увеличения количества разрядов, отводимых в разрядной сетке под мантиссу, за счет чего повышается точность представления чисел. Сложение чисел с фиксированной запятой Алгебраическое сложение чисел с фиксированной запятой в цифровых машинах может производиться в одном из машинных кодов: прямом, дополнительном или обратном. Чаще всего используется либо дополнительный, либо обратный код. При этом знаковый разряд и цифровая часть числа рассматривается как единое целое, в результате чего с отрицательными числами машина оперирует как с положительными, независимо от того, представлены ли они в виде правильных дробей или в виде целых чисел. Главное достоинство дополнительного и обратного кодов заключается в том, что правильный знак суммы получается автоматически в процессе суммирования знаковых цифр операндов и цифры переноса из соседнего младшего разряда. В случае возникновения единицы переноса из знакового разряда суммы ее нужно отбросить при сложении в дополнительном коде и прибавить к младшему разряду суммы при сложении в обратном коде (т. е. произвести циклический перенос единицы переполнения). Алгебраическое сложение много разрядных чисел обычно организуется как регулярный процесс, состоящий из n одинаковых операций поразрядного сложения вычитания, где n- количество разрядов в каждом из операндов). При этом в зависимости от знаков слагаемых возможны четыре случая: 1) Х1 > 0, Х2 > 0, Х3 = Х1 + Х2 > 0; 2) Х1 > 0, Х2 < 0, Х3 = Х1 + Х2 > 0; 3) Х1 > 0, Х2 < 0, Х3 = Х1 + Х2 < 0; 4) Х1 < 0, Х2 < 0, Х3 = Х1 + Х2 < 0; Примеры сложения чисел с фиксированной запятой были рассмотрены выше. Сложение чисел с плавающей запятой Если имеются два числа в нормальной форме: Х1 = m1 10p1 и Х2 = m2 10p2 , то для того чтобы их можно было сложить, нужно предварительно привести их к одному и тому же порядку Робщ, т. е. преобразовать одно из слагаемых, например, первое следующим образом: Х1 = m1 10p1 = m1* 10p1 = m1* 10pобщ. Далее можно вынести степень основания системы за скобки и произвести сложение мантисс: Х1 + Х2= m1* 10pобщ. + m2 10pобщ. = (m1* + m2 ) 10pобщ. Преобразовывать всегда нужно меньше слагаемое, так как в противном случае произойдет переполнение разрядной сетки мантиссы преобразуемого числа. Машинная операция сложения чисел в нормальной форме распадается таким образом, на 4 этапа: 1. Уравниваются порядки слагаемых: меньший порядок увеличивается до большего, мантисса преобразуемого числа сдвигается вправо (число денормализуется) на соответствующее количество разрядов. Практически в машинах производится вычитание порядков операндов. Знак и модуль разности Р1 - Р2 определяют соответственно, какое из слагаемых нужно преобразовывать и на сколько единиц следует сдвигать мантиссу преобразуемого числа. 2. Производится преобразование мантисс слагаемых в один из модифицированных кодов. 3. Мантиссы слагаемых суммируются по правилам сложения дробных чисел с фиксированной запятой. 4. В случае надобности мантисса суммы переводится в прямой код, производится нормализация суммы и округление ее мантиссы. ПРИМЕР. Используя дополнительный код, сложить два числа: [X1]пр = 0 101; 1,10101 и [X2]пр = 0 100 ; 1,11001 порядок мантисса РЕШЕНИЕ: 1. [X2]пр = 0 101; 1,011001 2. [m1]мод = 11,01011; [m1]мод = 11,100111. доп доп 3. [m1]мод = 11,01011 . доп [m2]мод = 11,01011 доп [m3]мод = 110, 111101 доп отбрасывается запрещенная комбинация 4. Комбинация знаковых цифр мантиссы показывает, что сумма денормализована влево (всегда только на один разряд) Произведем нормализацию суммы вправо [m3]мод = 10, 111101 1,0111101 доп Робщ = 0,101 + 0,001 = 0,110 Далее переводим сумму в прямой код и производим округление ее мантиссы до пяти разрядов. Ответ: [X3]пр = 0 110 ; 1,1000011 ~ 0 100; 1, 10001 порядок мантисса Умножение чисел с фиксированной запятой Наиболее просто умножение выполняется в прямом коде, независимо от того, являются ли операнды целыми или дробными числами. В машинах с фиксированной запятой оно реализуется в два этапа. 1. Определяется знак произведения с помощью сложения знаковых цифр сомножителей по модулю два, где нуль соответствует плюсу, а единица - минусу: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 Вручную это эквивалентно: (+) (+) = (+); (+) (-) = (-); (-) (+) = (-); (-) (-) = (+). 2. Производиться перемножение модулей сомножителей, затем в случае необходимости округление полученного модуля произведения, после чего к модулю результата приписывается его знак, определенный на первом этапе. Умножение производится по обычным правилам арифметики согласно двоичной таблицы умножения. Произведение модулей |Х3| = |Х1| * |Х2| двух (например дробных) чисел, где множитель Х2 = Х21 2-1 + Х22 2-2 +…+ Х2n 2-n, чаще всего вычисляется как сумма так называемых частичных произведений: n /Х3/ = ( /Х/ Х2i 2-i i=1 В машинах может быть реализовано как умножение, начинающееся с младшей цифры множителя (наиболее привычный способ), так и умножение, начинающееся со старшей цифры множителя. При умножении вручную в первом случае частичные произведения сдвигаются влево, во втором - вправо. ПРИМЕР. Перемножить числа [X1]пр = 0,1010 и [X2]пр = 1,1101 Решение. 1. Определяем знак произведения 0 + 1 = 1. 2. Перемножим модули операндов, порядок перемножения определяется нумерацией цифр множителя: 1-й способ 0,1010 0,1010 х 0,1101 х 0,1101 4,3,2,1 номера цифр множителя 1,2,3,4 1010 1010 0000 1010 +1010 + 0000 1010 1010 0,10000010 0,10000010 После округления приписываем к модулю знак произведения, полученный на первом этапе умножения. Ответ: [X3]пр = 1,0000010 ~ 1,10000. Первый способ часто называют умножением младшими разрядами вперед, а второй - умножением старшими разрядами вперед. Умножение чисел с плавающей запятой Если имеем два сомножителя, заданные в нормальной форме Х1 = m1 10p1 и Х2 = m2 10p2, то их произведение определяется следующим образом: Х1 Х2 = m1 m2 10p1+р2. Анализ этого соотношения показывает, что умножение чисел в машинах с плавающей запятой производится в четыре этапа: 1. Определение знака произведения путем сложения по модулю два знаковых цифр мантисс сомножителей. 2. Перемножение модулей мантисс сомножителей по правилам для дробных чисел с фиксированной запятой. 3. Определение порядка произведения путем алгебраического сложения порядков сомножителей с использованием либо дополнительного, либо обратного модифицированного кода. 4. Нормализация результата и округление мантиссы в случае необходимости. Поскольку сомножители обязательно являются нормализованными числами, то де нормализация произведения возможна только на разряд и только вправо. ПРИМЕР. Перемножить числа с плавающей запятой. Множимое [X1]пр = 0 101; 1,10101 Множитель [X2]пр = 0 100; 1,11001 Решение. 1. Знак произведения 1 + 0 = 1. 2. Перемножаем модули мантисс: 1-й шаг ,0000 0000 - нулевая сумма +,0000 1010 - 1-е частичное произведение 2-й шаг ,0000 1010 - 2-я сумма + ,0000 0000 - 2-е частичное произведение 3-й шаг ,0000 1010 - 3-я сумма + ,0010 1000 - 3-е частичное произведение 4-й шаг ,0011 0010 - 4-я сумма + ,0101 0000 - 4-е частичное произведение , 1000 0010 - модуль произведения мантисс. Находим порядок произведения: [р1]мод = 00,101 . доп [р2]мод = 11,101 доп [р3]мод = 100, 010 доп теряется Производим округление мантиссы произведения. Ответ: [X3]пр = [Х1 Х2]пр = 0 010 ; 1 100 порядок мантисса Прямой, обратный и дополнительный коды. Модифицированный код. Введем определение прямого, обратного и дополнительного кодов. Рассмотрим двоичное число [pic] В соответствии с изложенным выше число R кодируется следующим образом: 0 [pic][pic] R= 1 [pic][pic] или, в более общем случае, если [pic], 0 [pic] [pic] R= [pic] [pic] [pic] Так как [pic], эти соотношения можно переписать таким образом: [pic], [pic] [pic]= [pic] [pic] Представление чисел в соответствии с данной формулой называется прямым кодом числа [pic] Если [pic], то формула [pic] перепишется в таком виде: [pic], [pic] [pic]= [pic] [pic] Аналогичным образом кодируются и числа, модуль которых не меньше единицы. Пример: Записать числа в прямом коде: [pic] [pic] Из равенства [pic] следует, что операцию вычитания y из x можно заменить операцией сложения S-y и х с последующим вычитанием из результата величины S. Введем запись R [pic] [pic]= S+R [pic] Представление чисел в соответствии с [pic] называется дополнительным кодом числа R. Операцию вычитания можно заменить операцией сложения и на основе соотношения [pic]. Код, определенный с помощью соотношения R [pic] [pic]= [pic] [pic] называется обратным кодом числа R. Отметим, что при S=2 для получения обратного кода отрицательного числа в знаковый разряд нужно записать единицу, а каждую цифру в записи числа заменить на ее дополнение до S-1, т. е. единицу заменить на нуль, а нуль на единицу. Пример: Записать числа в обратном коде: [pic]=0,110101 [pic]=0 110101 [pic]= – 101,1101 [pic]=1 0100010. Пример: Записать числа в дополнительном коле: [pic]=0,110101 [pic]=0 110101 [pic]= – 101,1101 [pic]=1 0100011 Из приведенных примеров следует, что положительные числа в прямом, обратном и дополнительном кодах совпадают. В прямом и обратном коде нуль имеет два представления – «положительный» и «отрицательный» нуль. В дополнительном коде нуль имеет только одно, «положительное», представление. Отметим, что при представлении с плавающей запятой отдельно кодируется мантисса и порядок числа. При этом возможно представление мантисс и порядков чисел в одном и том же или разных кодах. Например, порядок числа может быть представлен в прямом, а мантисса – в дополнительном кодах и т. п. Таким образом, используя обратный и дополнительный коды, операцию алгебраического сложения можно свести к арифметическому сложению кодов чисел, которое распространяется и на разряды знаков, которые рассматриваются как разряды целой части числа. Рассмотрим сначала использование обратного кода для алгебраического сложения n – разрядных двоичных чисел R и Q , когда оба они или одно из них отрицательно. Будем считать, что модуль их алгебраической суммы меньше единицы и единица переноса из разряда знака прибавляется к младшему разряду получившейся суммы. Пусть, например, [pic] ( обозначим [pic] ) и [pic] ( обозначим [pic] ).Считаем, - 1[pic]0. Тогда в соответствии с [pic] можно записать [pic]. В связи с тем, что возникает перенос из знакового разряда, одна двойка пропадает и добавляется единица переноса к младшему разряду суммы [pic]: [pic]. Таким образом, сложение с переносом единицы знакового разряда двух отрицательных чисел в обратном коде дает обратный код их алгебраической суммы. Рассмотрим алгебраическую сумму чисел [pic] ( обозначим [pic]) и [pic]. Можем записать [pic]. Если [pic], то [pic] и возникает перенос из разряда знака. В этом случае имеем [pic]. Если же [pic],то [pic] и переноса не возникает; получаем [pic]. Мы получили, что сложение чисел с использованием обратных кодов с циклическим переносом приводит к получению алгебраической суммы в прямом коде, если сумма положительна, и в обратном коде, если сумма отрицательна. Аналогично при использовании дополнительных кодов алгебраическое сложение их, включая разряды знаков, которые рассматриваются как разряды целых единиц, дает, если единица переноса из разряда отбрасывается, следующий результат: если алгебраическая сумма положительна, то результат получается в прямом коде, и в дополнительном коде, если она отрицательна. Таким образом, применение обратного и дополнительного кодов дает возможность операцию алгебраического сложения свести к операции арифметического сложения. Однако нами рассмотрен случай, когда модуль полученной суммы меньше единицы. В общем случае при сложении двух чисел, модуль которых меньше единицы, модуль суммы может оказаться больше или равен единице ( так называемое переполнение разрядной сетки мантиссы ). Для обнаружения такого переполнения, учитывая, что модуль суммы двух таких чисел меньше двух, используют один дополнительный разряд. Код ( прямой, дополнительный, обратный ), в котором имеется такой дополнительный разряд, называется модифицированным. В модифицированных кодах этот разряд используется для дублирования знака числа, т. е. знак «плюс» обозначается 00, а «минус» - 11. Правила переноса из разрядов знака остаются прежними в зависимости от того, в каком коде ( обратном или дополнительном ) представлены числа. На переполнение же разрядной сетки, т. е. что модуль суммы [pic], указывает несовпадение цифр в знаковых разрядах. В этом случае комбинации 01 соответствует положительное, а 10 – отрицательное число. Пример: Сложить [pic] и [pic] Прямой модифицированный код [pic]00 11011. Обратный модифицированный код [pic]11 11010. + 00 11011 11 11010 1 00 10101 1 00 10110 = [pic]. Пример: Сложить [pic] и [pic] [pic]11 01010 [pic]11 00111. + 11 01010 11 00111 (1) 10 10001 [pic]=10 10001 Переполнение разрядной сетки. Таким образом, разрядные сетки в арифметическом устройстве имеют большее число разрядов, так как представления в модифицированном коде содержат второй ( дополнительный) знаковый разряд для мантиссы, а также второй знаковый разряд порядка ( для представления с плавающей запятой в отсутствии смещения порядка). Итак, в общем случае сложение и вычитание в машинах с плавающей запятой состоит из следующих этапов: 1.Сравнение порядков чисел. 2.Выравнивание порядков чисел. 3.Перевод мантисс слагаемых в обратный или дополнительный модифицированные коды. 4.Сложение мантисс в прямом, обратном или дополнительном модифицированных кодах. 5.Исправление нормализации вправо или влево. 6.Перевод мантиссы результата в прямой код. 7.Выдача результата с учетом порядка. Пример. Сложить два числа, представленные в форме с плавающей запятой. R=0 011 1 111010001 Q=0 101 1 110101101, где в первой позиции записи – знак порядка, в следующих трех – модуль порядка, затем следует знаковый разряд мантиссы и модуль мантиссы, т. е. R=–0.111010001*[pic] Q=–0.110101101*[pic] а) Сравнение порядков. Из большего порядка вычитаем меньший: [pic] и [pic] [pic]. б) Выравнивание порядков. Сдвигаем мантиссу числа R на [pic] на (2) разрядов вправо и присваиваем ему порядок [pic]: R=0 101 1 001110100. в) Переводим мантиссы в модифицированный обратный код: [pic]=11 110001011 [pic]=11 001010010 г) Складываем мантиссы: 11 110001011 11 001010010 1 10 111011101 1 110 111011110 д) Несовпадение цифр в знаковом и контрольном разрядах указывает на нарушение нормализации влево. Сдвигаем мантиссу вправо на один разряд и соответственно увеличиваем порядок. Получаем: мантисса 11 011101111; порядок 110. е) Перевод мантиссы в прямой код: 1 100010000. ж) Результат R+Q=0 110 1 100010000, т. е. R+Q=[pic]. Список используемой литературы: 1. Ролич Ч. Н. – От 2 до 16, Минск, «Высшая школа», 1981г. 2. Математическая энциклопедия. М: “Советская энциклопедия” 1985г. 3. Шауман А. М. Основы машинной арифметики. Ленинград, Издательство Ленинградского университета. 1979г. 4. Калабеков Б. А. Цифровые устройства и микропроцессорные системы. М: “Горячая линия - Телеком” 2000г. 5. Ворощук А. Н. Основы ЦВМ и программирования. М:”Наука” 1978г. 6. Алексенко А. Г. Микросхемотехника. М: ”Радио и связь” 1990г. ----------------------- [1] Обратный код [pic]двоичного числа [pic]называется также дополнением до 1, так как для каждого разряда числа [pic]=1 [2] Дополнительный код [pic] числа [pic]называется также дополнением числа до 2, так как для каждого разряда числа [pic] ( число 2 в двоичной форме )