Главная » Просмотр файлов » Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1)

Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (1119452), страница 83

Файл №1119452 Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1)) 83 страницаД. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (1119452) страница 832019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 83)

А1. э аиовка. 1 с- О. Сбросить индикатор переполиеииа. 6+- О, Если 1 = я, то перейти к шагу АЗ. ~а 3ы ю.ь с я+~. Если переполнения яет, присвоить А с- О. Иначе — присвоить 1с с- 1. Если 1 < я, то перейти к шагу А2. Запомнить последний перенос в ш . $ Время выполнения этой программы равно 10)У + б циклам независимо от числа переносов К. Величина К подробно анализируется в конце этого раздела. Возможны многочисленные модификации алгоритма А, во лишь некоторые из них упоминаются в упражнениях к этому разделу.

Главу, посвященную обобщениям данного алгоритма, можно было бы назвать Разработка схем сложения для цифровой вычислительной машины". Задача вычитания аналогична задаче сложения, но есть и заслуживающие внимания отличия. Алгоритм 8 (Вмчиглание неошрицаглельнмх целых чисел), По данным неотрицательным п-разрядным целым числам (и„с...

исие)ь > (е„с... есее)ы записанным по основанию Ь, этот алгоритм находит неотрицательную разность (ш с ... шсше)ь. 81. [Начальная установка.) Присвоить,г +- О, А с- О. 82. [Вычитание разрядов [ Присвоить ш +- (и1-е +6) шоб Ь и 6 +- [(и1-е +6)16). (Другими словами, 6 присваиваетсл -1 или 0 в зависимости от того, происходит ли заимствование, т.

е. оказывается ли, что и — е1 + 6 < О. Что касается вычисления шу, примем во внимание тот факт, что должно выполняться неравенство -Ь = Π— (Ь вЂ” Ц + (-1) < из — ез + 6 < (Ь вЂ” 1) — О+ 0 < Ь. Следовательно, 0 < из — е1 + й + Ь < 26 и это полагается в описываемой ниже программной реализации,) 01 ЕИМ1 00 ЗОУ 00 1Н ЕИТА О( 112 05 2Н АОО Оо АОО 07 ЯТА ОВ 1ИС1 Оо ЛИОУ 10 ЕИТА 11 11И 12 ЗН НТА И ОР1 О О ЗР О+И,1 У+И, 1 И+И, 1 1 1В 1 2В И+И 1 1 1У+1 — К 1У+ 1- К 1У 1У 1У 1У 1У К К 1 ВЗ.

(Пикл по (.) Увеличить 1 на единицу. Если теперь ь' с и, то вернуться к ьпагу Б2; в противном случае завершить выполнение алгоритма. (Когда выполнение алгоритма завершается, должно получиться А = О; условие А = -1 соответствует единственному случаю, когда (и„-ь... сьпа)ь > (и„-ь ° .. иьно)м что противоречит сделанному раньше предположению; см. упр. 12.) $ При реализации алгоритма в Н12-программе удобнее вместо значения А хранить значение 1+ А, так что на шаге 82 можно вычислить величину из -иу+ (1+ А) + (Ь-1).

(Напомним, что Ь вЂ” размер машинного слова.) Пронллюстрируем алгоритм следующей программой. Программа В (Вмчишание неогярицвтельммк целых чисел), Эта программа ана- логична программе А, но в ней гА ьд 1+А. Как и в других программах этого раздела, в ячейке МН1 хранится константа Ь-1 — максимально допусткмое значение, которое может храниться в машинном слове Н12 (см. программу 4.2.3Р, строки 38-39). Вмчислить вь — е, +А+Ь. Время выполнения этой программы равно 12М+ 3 циклов, что немного больше, чем для программы А.

Читатель, возможно, поинтересуется, не лучше ли было бы разработать одну комбинированную программу для сложения-вычитания вместо двух разных алгоритмов А и Б. Но анализ программ показывает, что в общем случае для реализации этих операций предпочтительнее использовать две разные программы, чтобы внутренний вычислительный цикл выполнялся настолько быстро, насколько это возможно. Наша следующая задача — умножение. Здесь идеи, использованные при востроенни алгоритма А, получают дальнейшее развитие. Алгоритм М (Ульноясение неогпркцательимя цаьмх чисел). По заданным неотрицательным и-разрядным целым числам (и„ь... иьио)ь и (е„ь ...оьсе)ь по основанию Ь этот алгоритм строит их произведение (ш + ь...

шьше)ь (Общепринятый метод умножения при помощи карандаша и бумаги основан на нахождении сначала частичных произведений (и ь...пьио) х е, для О ( ь' < п, а затем — суммы этих произведений, сдвинутых на соответствующее число масштабирующих разрядов. Но на компьютере предпочтительнее выполнять слсвкение параллельно умножению„как это и делытсл в данном алгоритме.) 01 ЕИИ1 ОО ЛОь ОУ 1Н 112 ~Ц НИТА Об 2Н АВВ Об ЯВВ 07 АВВ 00 ЯТА ОО 1ИС1 10 ЛО'ь" 11 ЕИТА 10 21И 10 Н1.Т И ОГВО ВОВЕ 1 В+И,1 7+И, 1 ИН1 И„1 1 1В О 2В 6 1 1 К+1 К Х Х Х Ф Ф Ж Х-К М вЂ” К . Нач ьи а.

ь' +- О. Сбросить иидииаор переполнения. Если ь' = п, завершить выполнение программы. Присвонть А ь- О. (Возможен минус нуль.) ЯО,,ЦИИд~щ 1, у ь- ь'+ 1. Если произошло переполнеияе, то присвоить А +- О. В противном случае присвоить А +- -1, Если у ( и, то вернуться к шагу Я2. (Ошибка, с > и.) $ НЛ 84. нм иа М5 М5 М5 Мб 3 3 3 б 7 6 М1. (Начальная установка.) Присвоить всем параметрам ш ы ьо т ..., ьоо значения "нуль". Присвоить ь' ь- О. (Если не обнулить все параметры в„, и..., шо„ можно получить более общий алгоритм с результатом (шн+ -ь...шо)ь ь-(и„~ ь."мо)ь х(о -ь" оо)ь+(ш ь...шо)ь.

Этот алгоритм умножения и сложения часто используется в цриложенияхе. М2. (Нулевой множитель?) Если от -- О, то присвоить шз+ ь- 0 и перейти к шагу Мб. (Эта проверка может сэкономить время, если достаточно велика вероятность того, что оь равно нулю; в противном случае проверку можно опустить без ущерба для корректности алгоритма.) МЗ. (Начальнал установка ь1) Присвонты ь- О, Й ь- О. м4. [Умножить и сложить,) присвоить сначала ь 4- гн х и + кй+ + ь, а затем— ьоь ь ь- ь пкх1 Ь и Ь +- (т/Ь). (Здесь разряд переноса Ь всегда будет принадле. жать интервалу О < Ь < Ь; см. ниже.) Мб.

(Цикл по 1.) Увеличнты на единипу. Если после этого ь' < т, то вернуться к шагу М4; в противном случае присвоить ву+ ь- Й. МВ. )Цикл по 71) Увеличить т' на единицу. Если после этого 7' < и, то вернуться к шагу М2; в противном случае завершить выполнение алгоритма. $ Работа алгоритма М для спучая, когда Ь = 10, проиллюстрирована в табл. 1, в которой показано состояние вычислительного процесса в начале шагов М5 и Мб.

Доказательство корректности алгоритма М приведено в упр. 14. Два неравенства, О < г ( Ьа 0(н(Ь являются критическими для эффективной реализации этого алгоритма, так как они накладывают ограничения на размер регистра, необходимый для вычислений. Их можно доказать по индукции, так как если в начале шага М4 справедливо неравенство Й < Ь, то иь х о + ьоь 41 + Ь < (Ь вЂ” 1) х (Ь вЂ” 1) + (Ь вЂ” 1) + (Ь вЂ” Ц = Ь вЂ” 1 < Ь Следующая й1Х-программа демонстрирует те моменты, которые нужно учитывать при реализации алгоритма М на компьютере.

Шаг М4 можно было бы Таблица 1 УМНОЖЕНИЕ И4 4 т н1 на Ь О О 4 4 16 О 1 4 05 О 8 4 36 3 0 . 4 Зб О 1 4 8 37 1 1 1 8 17 2 1 9 8 76 3 1 . 8 76 а Его часто натмеают "умноженне с нанонаеннем". — П)нан. нерее. соа ее1 соо О О 6 О 5 6 б 5 б 6 о б 6 7 6 7 7 6 6 7 7 6 запрограммировать проще, если бы на компьютере имелась команда "умножить и сложить" или если бы в нем был аккумулятор удвоенной длины для сложения.

Программа М (Умнажение неотрицапюльных целых чисел). Эта программа аналогична программе А. гП ж з — пг, г12 = 1' — и, г13 ж 1+1, СОМТЕМТБ(САНВЧ) гй й. 01 ЕМТ1 И-1 1 МХ Начальная с евка. 02 1ОЧ ОР10 1 Сбросить индикатор переполнения, 00 БТ2 И 1 М ю,п <-О. 04 РЕС1 1 М 00 31ИИ «-2 М Повторить при пз > гП > О. 00 ЕИИ2 И 1 1+- О. 07 1Н ВВХ Ч+И,2 ?Ч М2. левой множите ? 08 ЛХ2 8Р )Ч Егзги е = О и свонть ю « — О и пе йти М И,2 0 САВНЧ О+И,1 Ч+И,2 б М,З «+2 1 САМУ «+2 1 рн з+ « ре к шагу Мб. 00 ЕИИ1 Н вЂ” Е М3. На«альп тано г. 1 «- О.

10 ЕИТЗ )Ч-г (1+1) -1, 11 ЕМТХ )Ч вЂ” Я А+- О. 18 2Н БТХ ()Ч вЂ” Я)М М4. Умножить и сложить. 10 (.ВА (Ю вЂ” Е)М 11 МО(. ()Ч - Е) А1 гАХ «- к, х;. 10 БЕС (1Ч вЂ” Я)М Произвести взаимную замену содержимого регистров гА +«гХ 16 АВВ (1Ч вЂ” Я)М Прибавить иыо к нижней половине. 17 1ИОЧ (1Ч вЂ” Я)М Переполнение произошло? 10 1МСХ К Если произошло, то разряд переноса, равный 1, занести в верхнюю половину. 10 АВВ (К вЂ” Я)М Прибавить й к нижней половине. 80 ЮИОЧ ()Ч вЂ” Я)М Переполнение произошло? 81 1ИСХ К' Если произошло, то разряд переноса, равный 1, занести в верхнюю половину. йй БТА И.З (М-г)М,, -1 бЬ.

РУ ХМС1 1 (Ю вЂ” «)К «Б.Л~«ь 1 1 '~ 1. 84 1МСЗ 1 (1Ч вЂ” Я)М (1+1) +- (1+1) + 1, йб 11И 2В (А? — Я)М Возврат к шагу М4, если г < гл, гХ = (1/Ь). 06 8Н БТХ И+И+И,2 1Ч Присвоить ю,+, +- А. «исг 1 ««кзыл««~ ( 00 12И 1В ?Ч Повторять до тех пор, пока не станет 1 = н. $ Время выполнения программы М зависит от числа разрядов М множителя и, числа разрядов К множимого о, числа нулей Я в множителе„и числа переносов К и К', возникающих при выполнении сложения в нижней половине произведения в ходе вычисления 1.

Если ограничить значения К и К' разумной (хотя и несколько пессимистической) величиной Аз(?Ч- Е) М, то время выполнения программы составит примерно 28МТЧ+ 4М+ 10)Ч+ 3 — Е(28М+ 3) циклов. Если исключить шаг М2, то время выполнения программы составит 28М)Ч + 4М + 7)Ч + 3 циклов, так что включение этого шага выгодно лишь при условии, что плотность числа нулей в множителе равна Я/)Ч > 31'(28М + 3). Если множители выбираются случайным образом, то следует ожидать, что среднее значение этой плотности будет около 11'б, что очень мало, Поэтому включать шаг М2, вообще говоря, невыгодно, даже если число 6 мало. Рис. б. Цель: быстро определитыу.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее