Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [ 70 ] 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261

13. [М25] Сравните генератор вычитания с заимствованием из упр. 3.2.1.1-12 с генератором Фибоначчи с запаздыванием, реализованным в программах этого рюдела.

► 14. [Л/55] (Будущее против прошлого.) Пусть ЛГп = (Ап-з?+Xn ioo) mod 2. Рассмотрим последовательность

{Oi ii. •.) = {Ао, Xi,..., А99, А200, А201,..., Хгээ, А400, Х401,..., А499, Аеоо, •..).

(Она соответствует неоднократно вызываемой программе ran.array(а,200), когда рассматриваются только младшие значащие двоичные разряды после отбрасывания половины элементов.) Следующий эксперимент был повторен один миллион раз с использованием последовательности (Уп): "Генерируем 100 случайных двоичных разрядов, затем, если 60 или более из них равны нулю, генерируем еще один и печатаем его". В результате было напечатано 14 527 нулей и 13 955 единиц, но вероятность того, что 28 482 случайных двоичных разряда содержат самое большее 13 955 единиц, равна приблизительно .000358. Дайте математическое объяснение, почему так много нулей будет на выходе.

► 15. [25] Напишите на языке С программу генерирования для случайных целых чисел, которые получаются с помощью программы гап-аггау, отбрасывая все, кроме первых 100, элементы из каждых 1 009 элементов, как рекомендуется в разделе.



ГЛАВА 4

АРИФМЕТИКА

в математической практике нет ничего более хлопотного (правы любезные студенты-математики), что более всего досаждало бы и мешало вычислителям, чем перемножение, деление или извлечение квадратных и кубических корней больших чисел. Выполнение этих операций не только приводит к значительным потерям времени, но и сопряжено с такой массой скрытых ошибок, что я начал размышлять о поисках надежного и удобного средства устранения подобных помех.

- ДЖОН НЕПЕР (J. NAPIER [NEPAIR]) (1616)

Терпеть не могу складывать. Самая большая ошибка - считать арифметику точное наукой. Существуют... тайные законы Чисел, которые может постигнуть только ум, подобный моему. К примеру, при сложении чисел в столбик сначала снизу вверх, а затем наоборот вы всегда получите разные суммы.

- М. п. ЛА ТУШ (М. Р. LA ТОиСНЕ) (1878)

Не могу представить, чтобы кому-нибудь понадобилось выполнять умножение со скоростью 40 ООО или даже 4 ООО операций в час; такое радикальное средство, как переход к восьмеричной системе счисления, не следует навязывать всему человечествуради нескольких личностей.

- Ф. X. УЭЙЛС (F. X. WALES) (1936)

Большинство специалистов в теории чисел не проявляют интереса к арифметике.

- Б. ПАРЛЕТТ (В. PARLETT) (1979)

Основное назначение этой главы - тщательный анализ четырех основных действий арифметики: сложения, вычитания, умножения и деления. Арифметику многие считают тривиальной дисциплиной, которой обучают детей, а арифметические действия - уделом компьютеров; но мы увидим далее, что арифметика - это увлекательный предмет с множеством интересных аспектов. Она лежит в основе многих важных компьютерных приложений, поэтому необходимо самым тщательным образом изучить эффективные методы вычислительных операций над числами.

На самом деле, арифметика - это живая и все еще успешно развивающаяся отрасль науки, сыгравшая важную роль в мировой истории. В этой главе будут проанализированы алгоритмы выполнения операций над различными типами величин: числами с "плавающей точкой", очень большими числами, дробями (рациональными числами), полиномами и степенными рядами. Кроме того, здесь будут рассмотрены связанные с ними вопросы, такие как преобразование из одной системы счисления в другую, разложение чисел на множители и операции над полиномами.



4.1. ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ

Способ выполнения арифметических операций тесно связан со способом представления чисел, над которыми выполняются операции. Поэтому резонно начать изучение предмета с обсуждения принципиальных подходов к представлению чисел.

Позиционное представление с основанием Ь (или по основанию Ь) определяется правилом

(...03020100.a ia 2 )ь

= • • • + озЬ 4- оаЬ 4- OlЬ + оо + o lЬ~ 4- о 2Ь~ 4- • • •; (1)

например, (520.3)б = 5 • 6 4- 2 • 6 4- О 4- 3 • 6~ = 192. Традиционная десятичная система - это, разумеется, частный случай, когда Ь равно десяти, а значения Ok выбираются из "десятичных цифр" О, 1, 2, 3, 4, 5, 6, 7, 8, 9; в этом случае индекс Ь в (1) может быть опущен.

Простейщие обобщения десятичной системы получаются, когда в качестве Ь берется целое число, большее 1, а в качестве o;t-целые числа из интервала О < ak < Ь. Таким образом приходим к стандартной двоичной (6 = 2), троичной (6 = 3), четверичной (6 = 4), пятеричной (6 = 5), ... системам счисления. В общем случае в качестве 6 можно взять любое ненулевое число, а числа Ok выбирать из произвольного заранее заданного ряда чисел. Как мы увидим далее, это приводит к некоторым интересным ситуациям. Точка между оо и o i в (1) называется позиционной или разделяющей. (Если 6 = 10, точка также называется десятичной; в случае, когда 6 = 2, она иногда называется двоичной точкой и т. д.). В странах Европейского континента (Великобритания, как известно, себя к таковым не относит) вместо разделяющей точки часто используется запятая.

Числа Ok в (1) называются цифрами представления. Цифру ajt с большим к называют более значимой, чем ojt с меньшим к; крайнюю слева, или "ведущую", цифру называют наиболее значимой, а крайнюю справа, или "хвостовую",--наименее значимой. В стандартной двоичной системе двоичные цифры зачастую называют битами; в стандартной шестнадцатеричной системе (с основанием шестнадцать) шестнадцатеричные цифры от нуля до пятнадцати обычно обозначаются так:

О, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е, F.

История развития способов представления чисел - увлекательная повесть, так как их развитие происходит параллельно развитию самой цивилизации. Однако при подробном рассмотрении этой истории мы ушли бы далеко в сторону от главной темы; тем не менее полезно конспективно изложить основные ее моменты.

Наиболее ранние формы представления чисел, обнаруженные в древних цивилизациях, обычно основываются на использовании групп пальцев, кучек камней и т. п. с дополнительными соглашениями о замене некоторой группы, скажем, из пяти или десяти объектов одним объектом специального вида или объектом, расположенным в специальном месте. Подобные системы естественно приводят к наиболее ранним из известных способам представления чисел в письменном виде, таким как вавилонские, египетские, греческие, китайские и римские числа, но такого рода обозначения чрезвычайно неудобны для выполнения арифметических операций, кроме разве что простейших случаев.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [ 70 ] 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261