Кук Д., Бейз Г. - Компьютерная математика (1048841), страница 20
Текст из файла (страница 20)
Х Очевидно, что могут возникнуть проблемы, вызванные ограниченностью чисел. з(ы ке можеы нт нзбея«ать, одпако следует знать, когда возыожпа «ошибка». Форма дополнения делает проверку условия переполнения относительно легкой, использующей только вначения старшего значащего бата.
(В Х; зто бпт с номером 24.) Этот бит обозначает знак представляемого числа и называется знаковыы битом илп знаковым разрядом. Перед тем как проверить, какое значение имеет знаковый бит, напомним, что прибавление 1 к ыаксныальноыу полон«птельноыу числу в у."., дает максимальное отрицательное число (наибольшее отрицательное число — зто отрицательное число, отстоящее дальше всего от нуля).
Другимн словаыи, числа повторяются циклическим образом. В Е» ыы нмееы ситуацию, изображенную на рис. 4.1. в л,'- Ю - 1Б Б ~5 - 75 Б 75 - «Б Б 75 "75 -»У - «Б - 52 -17 - 6 Б М и 52 «7 «Б Вт Рас. 4Л Что же произойдет, если мы сложим два числа х и у, где — ак„х<а и — а<у<а (в Х", а 10)3 Сумма х+ у будет ограничена: 2а(а+ у «я 2а — 2(2а — 1. Само ио себе зто неравенство ничего не дает. 11озтому мы рассмотрим трн случая: (1) если -а(х(0 и -а(у<0 тогда -2а(а+у(0; (11) если 0(х<а и 0<у(а тогда 0 ( х+ у ( 2а — 2 < 2а — 1; 12С +1О1О1 11010 1 01111 1! 11101 +00110 1 00011 01100 +О11ОО +01010 1 О 1 1 О' Вернемся теперь к умножению и делению.
Сначала рассмотрим умнов«ение. Напомним, что в У (или, более точно, в Х,«для достаточно большого и) умножепие на 10 можно получить «сдввгомз всех цпфр на одну позицию влево и записью в О-й познцпп цифры О. (В л умножение на т также всегда можно осуществить сдвигом влево.) 110011 1 ~Ц 00101 +00111 127 (П1) если -а <х < О н Осу<а тогда -а <х+у < а. Вначале ааметим, что результат в случае (П1) находится в требуемых пределах и, следовательно, всегда правильный.
Чтобы понять, как могут возникать ошибки в случаях (1) и (П), необходимо вспомнить, что если г«в «иЕ и -2а<г<-а, то число г представимо в конечной арифметике числом г', где г' г+ 2а и О с г' с а. Аналогично, если а < г с 2а — 1, то г представимо г", где г" г — 2а и -а<г" <О. Следовательно, ответ будет неправильный, если он в случае (1) полон«ительный или в случае (П) отрицательный. Чтобы объяснить эти ааключепия в терминах свойств знакового разряда, рассмотрим различные возможности сложения двух чисеш а) оба числа отрицательны; б) оба числа положительны; в) числа имеют различные знаки.
Анализируя эти случаи, видим, что переполнение (ошибка переполнения) встречается тогда и только тогда, когда существует перенос в знаковый разряд или перенос из знакового разряда,но ме оба вместе. Для иллюстрации этого рассмотрим несколько примеров в Хз .Попытаемся сопоставить этн примеры со случаями (1)— (П1) и а) — в), рассмотренными выше.
Пример 3.2. Напомним, что вычисления проводятся т«-. Следовательно, мы имеем простой способ умножения и на неотрицательные степени числа 2 в Ео — сдвиг каждой цифры влево на соответствующее число позиций. Пример З.З. (Вычисления проводятся в Хо .) 0 0 0 1 1 (3) 1 1 1 1 0 ( — 2) 0 0 1 1 0 (о2) 1 1 1 0 0 (о 2) 0 1 1 0 0 (э 2 = 12) 1 1 0 0 0 ( ° 2е~ 3) 0 0 1 0 1 (3) 0 1 0 1 0 (о 2) 1 0 1 0 0 (о 2) 0 1 0 0 0 (о 2 3). Я' Из зтих примеров видно, что метод также хорошо работает для отрицательных чисел, но результат будет о ошибкой (переполнения), если на каждом этапе менялся знак и если потом он опять изменился. Для умножения произвольного целого числа (злемента г() используем свойство дистрнбутивности умножения по отношению к сложению и представим множитель как сумму степеней числа 2.
Пример 3,4. (Вычисления проводятся в Ео~ .) 3 ° 5 3 « 2т + 3 о 2о(2о () ( 5) ° 3 ( 5)» 2~+( 5)о2о Позтому 0 0 0 1 1 1 1 0 1 +О 1 1 О О +1 0 1 1 0 0 1 1 1 1 1 1 0 0 0 1Х Точно так же, как умножение производилось сдвигами влево, деление на положительные степени числа 2 осуществляется сдвигом вправо. (Деление ва другие целые числа должно получаться путем сведения к вычитанию степеней числа 2, Этот процессе мы обсуждать не будем.) Однако специального рассмотрения требуют отрицательные числа. Отметим также, что в общем случае ожидаемый результат (т. е. арифметически ожидаемый результат в В) будет не целым, а дробным. Пример 3.5. Попытаемся в Х', вычислить 12/4, (-6)/2 и 7/4 сдвигом на 2, 1 и 2 позиции соответственно.
Имеем 01100 (12) 11010 ( — 6) 0 0 0 1 1 ) 0 0 (3 = 12/4) 0 1 1 О 1 ) О (13 та 8/2) 0 0 1 1 1 $ (т) 0 0 0 0 1 $ 1 1 (1 яо т/4). ф 123 Сдвиг на одну позицию вправо автоматически сводвт любое отрицательное число к положительному. В Х» сдвиг переводит -16 к +8. Чтобы исправить зто, следует отнять от результата число 16, что даст -8 (т. е. -16/2).
То же самое можно получить, устанавливая знаковый разряд равным 1. Следовательно, правильный результат достигается использованием анакового разряда, аначение которого равно О или 1 (в зависимости от анака числа), для того чтобы заполнить «пропуски», создаваемые в результате сдвига вправо. Следовательно, (-6)/2 приводит к 11161 -3. Действие битов (со значением 1), «выпадающих» из числа в результате сдвига вправо, должно усекать результат. По»тому 7/4 дает 1.
Существует общепринятая практика округлять число (вверх независимо от знака) прибавлением к числу утерянного последнего бита. Зто соответствует обычному арифметическому правилу округления, поскольку 1 в первом бите остатка представляет собой 0.5. Следовательно, 7/4 дает 2. У п р а ж н е н и е 4.3.
1. Быстрый способ вычисления дополнения до 2 от данного битового элемента в Х» ааключается в следующем. Начиная с правого конца, копируем все идущие подряд нули и первую встретившуюся единицу. Затем все оставшиеся биты изменяем. Покааать, что етот способ работает в большинстве случаев, и р.осмотреть случаи, когда он но работает.
2. Пусть в Х, 'производятся следующие вычисления. Складывают дза числа л и у (обозначим нх сумму через з). Если от з отнять у, то получим некоторый рееультат с, а если от з отнять с, то получим некоторое число Ы. Что моя<но сказать о с и И? Как отличаются результаты, если вычисления производятся в Х," ? 5 4. Логическая арифметика Строго говоря, булеза зрнфметпка оперирует на множествах Х» и Х, и, следовательно, включает только числа О и 1. Для того чтобы подчеркнуть такую структуру, начнем с рассмотрения логической арифметики на «относительно большом» множестве Х». Она дает основу многозначной логики, Отсюда легко получить болев простой 9 д. ьт», г.
в«з» 129 случай Еь Воз!и!ем множество Еа 10, 1, 2, 3, 4) п олерацяп ~/ и /~, определенные в табл. 4.11. Табаева 4Л1 Д)О ! 234 О !234 О !234 1234 2 2234 3 3334 4 4444 О О О О О О 1 1 1 1 О 1 2 2 2 О ! 2 3 3 О 1 2 3 4 Упорядочивая Еа обычным обрааом (порядок пндуциру. ется Е и В), вндим, что а Ч Ь ° шах(а, Ь), аЛ Ь =* ш(п (а, Ь). Обе операции коммутативны и ассоциативны, О является единицей для ~/, а 4 является единицей для /1; /! дистрнбутпвна по отношению к Ч, но не наоборот. Пример 41.
Воаьмем множество Е с естественным порядком элементов. Введем операции Д н К Рассмотрим шесть воаможных случаев упорядочивания трех произвольных элементов а, Ь, с иа Е ! (1) а~Ья*с; (11) а~с<Ь; (П1) Ь-Я а<с; ([У) Ья,с~а; (Ъ) с<а<3; (У1) с<Ь~а.
Для проверки условия дистрнбутивностн нужно показать, что а/1(Ь!/с) (а/~Ь)Яа/~с). Это можно сделать проверкой того, что обе части выра- жения совпадают для каждого из наборов а, Ь и с. Бу- 1ЗО Использование символа 4 является интуитивным, однако может быть обосновано с помощью следующего определения: а ~ Ь тогда и только тогда, когда а ~/ Ь Ъ.
дем одновременно вычислять п сопоставлять соответствующие выражения: (1) а /~ (Ь1/с) а/~с а, (а/1Ь)1/(аДс) а'1/а = а; (П) аД(Ь\/с) = аДЬ = а, (а/1 Ь) т/(а/, с) = а ~/а = а; (П1) а/~(Ъ~/с) а/~с а, (аДЬ)~/(а/~с) = Ь1/а = а; (1У) аД(Ь1/с) = а/~с = с, (аДЬ74(а~,с) = Ь~/с = с; (У) а/1(Ь~/с) а/~Ь = а, (а/~Ь)1/(а/тс) а1/с = а; (У!) а/~(Ь1/с) = аД Ь = Ь, (а/~Ь)~/(а/~с) = Ь1/с = Ь. Следовательно,Д дпстрибутпвна по отношению к Ч.
// Ь)ожно также показать (зто как раз тот случай, когда мы не получаем ожидаемого результата), что У дистрибутивна по отношению к Д, т. е. что аЯЬДс) =(а)/Ь)/~(а1/с). Проверку этого свойства оставляем в качестве улражненкя. Перед тем как закончить обсуждение общего случая, давайте вернемся к табл. 4.11, определяющим Ч п Д. Элементы, имеющие одинаковые аначения в таблицах, расположены относительно единичных элементов так, как покааано на рис. 4.2.
На самом деле каждая пз этих Рис. 4.2 операций является «отражением» другой и связь, которая позволяет одну операцию менять на другую, определяется (в Ез) нарами (О, 4), (1, 3), (2, 2), (3, 1), (4, 0), В сущности, это принцип двойственности, который 9~ 121 будет обсуждаться в гл. 5. Возвращаясь к Ен имеем У О 1 Л о о о о О 1 1 1 В Ез операцию Ч обычно интерпретируют как пли (ре. зультат равен 1, если один ив операндов равен 1, включая случай, когда они оба равны 1). Аналогично /~ читается как и.
Число 0 является единичным элементом по отношению к или, число 1 является единичным злементом ко отношению к и. Можно распространить зги результаты на болев высокие размерностп (переводя от Ез к Е",) расширяя компоненты и учитывая, что не существует переноса из одной копии Ез к другой. П р и и е р 4.2. О 1 1 1 О 1 О 1 О О 1 /~ О О 1 1 1 1 О О 1 О 1 О 0 1 1 О 1 О О О О 1. Упражнение 4.4. Определяя операция Д н ~/ как минимум н максимум, показать для произвольного Е, что а ~/(Ь/~ с) (а ~/ Ь) Д(а ~/с). ГЛАВЛ 5 АЛГЕБРАИЧЕСК11Е СТРУ11ТУРЫ В предыдущей главе мы уже познакомплпсь с некоторыми способамп определения операций над множествамп п научились с нлмл работать с целью производить имеющие смысл вычисления.
Нопечно, существует много различных операций, которые лягут быть определевы на множестве, и, следовательно, в некотором смысле алгебраических структур болыпе, чем множеств. Однако получается так, что большинство полезных структур (под этим мы подразумеваем структуры, которые описывают естественно возникающле явления н пригодны для вычислений) может быть разбито на небольшое число типов. В атой главе мы вначале введем термвнологлю, которая имеет отношение ко всем алгебраическим структурам, а потом займемся лекоторымл спецлальными структурами, которые, на наш взгляд, блпя«е всего относятся к вычпсленлям. Это нам позволит связать ранее «оборванные» нлтп рассуждений, с тем чтобы прлступнть к изучению структур, а также чтобы подвести серьезный математпческлй фундамент под оставшуюся часть книги. Центральное место в наших рассмотрениях занимают поля, линейная алгебра и булеза алгебра.
Поля формируют основу простой арпфметлки, линейная алгебра обеспечивает основу для геометрии и операцвй с числами, а булеза алгебра содержит в себе основные положения элементарной логики. Разумнее начать взучение с таких структур, которые могут рассматриваться как части поля. Затем поля будут расширены до векторных пространств. Аналогично мы расширим изучение булевой алгебры, включив решетки и свободные полукольца. Некоторые другие структуры будут кратко упомянуты в упрэжне ниах к этой главе.
133 $1. Алгебраические структуры и подструктуры О и р е д е л е и н е. Алгебраической струкгурий иззывается множество вместе с операциями (заывнутыыи), определенными на этом ыпожестве. е' Обычно операции имеют некоторые характерные свойства, которые могут быть обоснованы в виде теорем п которые используются в вычпслевпях. (Структуру вместе со всеми теореыамп, правиламп вычислений и вывода виогда называют алгебраической системой.) К как'дой структуре применимо понятие подструктуры. Чтобы зто продемонстрировать, рассмотрим еикотетическую структуру, наэываеыую указателем.