Сообщений 0 Оценка 115 Оценить |
В этой книге слову "хакер" возвращено его первозданное значение - человека увлеченного, талантливого программиста, способного к созданию чрезвычайно эффективного и элегантного кода. В книге воплощен сорокалетний стаж ее автора в области разработки компиляторов и архитектуры компьютеров. Здесь вы найдете множество приемов для работы с отдельными битами, байтами, вычисления различных целочисленных функций; большей части материала сопутствует строгое математическое обоснование. Каким бы не был ваш профессионализм, вы обязательно найдете в этой книге новое для себя. Кроме того, книга заставит вас посмотреть на уже знакомые вещи с новой стороны. Не в меньшей степени эта книга пригодится и начинающему программисту, который может просто воспользоваться готовыми советами из книги, применяя их в своей повседневной практике.
Вступление
Благодарности
ГЛАВА 1. Введение
ГЛАВА 2. Основы
ГЛАВА 3. Округление к степени
ГЛАВА 4. Арифметические границы
ГЛАВА 5. Подсчет битов
ГЛАВА 6. Поиск в слове
ГЛАВА 7. Перестановка битов и байтов
ГЛАВА 8. Умножение
ГЛАВА 9. Целочисленное деление
ГЛАВА 10. Целое деление на константы
ГЛАВА 11. Некоторые элементарные функции
ГЛАВА 12. Системы счисления с необычными основаниями
ГЛАВА 13. Код Грея
ГЛАВА 14. Кривая Гильберта
ГЛАВА 15. Числа с плавающей точкой
ГЛАВА 16. Формулы для простых чисел
ПРИЛОЖЕНИЕ А. Арифметические таблицы для 4-битовой машины
ПРИЛОЖЕНИЕ Б. Метод Ньютона
Источники информации
Предметный указатель
Знаете ли Вы Первый закон творческого программирования? Он используется в качестве эпиграфа в книге Уоррена и звучит так:
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста. Роберт Д. БлисcЭто, конечно, шутка, но в ней, как всегда, есть изрядная доля правды. Я эту книжку мог бы купить даже за один эпиграф! Но Вы - это не я, поэтому расскажу, о чем в книге написано. Уже по оглавлению можно судить о содержании. Множество изящнейших решений задач, которые время от времени появляются в форуме "Этюды для программистов". Уже на первой странице первой главы есть несколько простых формул. Одна из них
x & (x-1)
Как вы думаете, для чего она может пригодиться? Оказывается, так можно обнулить крайний справа единичный бит. И таких формул - море! Но книжка ценна не только простыми формулами. Здесь огромное количество алгоритмов. Например, в главе 11 приводится аппаратный алгоритм вычисления целочисленного квадратного корня, в котором используются только операции вычитания, сдвига вправо, и логического или (- >> | в нотации С). Считать все алгоритмы я не стал, но то, что их больше сотни - это факт! Алгоритмы написаны в одной из двух нотаций: либо на псевдо-С (очень похож на настоящий), либо в кодах гипотетической трехадресной RISC-машины, которая (ИМХО) сильно похожа на кнутовскую MMIX. В первой главе Уоррен приводит полное ее описание. В общем, понятно написано.
В книжке СОВСЕМ нет никакой воды - сплошная информация. Читать ее в автобусе или в метро - трудно. Если хочешь понять, почему работает, то надо вдумчиво, за столом разбирать много примеров. Изучение (не чтение, нет) этой книги существенно повысит понимание встроенных типов данных (особенно целых) и многих нюансов работы процессора. Для большинства алгоритмов приводится математическое доказательство корректности - для некоторых это может быть интересно. Книгу можно использовать и при разработке компилятора - тут прямо приводятся оптимизационные формулы и алгоритмы. Например, на странице 206 приводится алгоритм вычисления 2^n в компиляторе IBM XL Fortran. Полезна книга окажется и для разработчиков систем реального времени, где критично время вычислений. Да и в обычных приложениях найдется, где можно применить что-нибудь из этой книжки.
И напоследок. В 80-е годы в сборнике Уэзерелла "Этюды для программистов" была опубликована наверное самая знаменитая задача (по крайней мере, в России): написать программу, которая выводит свой собственный текст. Файлы использовать нельзя. Автор приводит САМУЮ КОРОТКУЮ программу на С, из известных ему, содержащую всего 64 символа. Написана Владом Таировым и Рашидом Фахреевым.
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
Печатает саму себя - проверено в Borland C++ 3.1 в режиме трансляции С-программ без отладочной информации для UNIX V. Конечно, с высоты современных стандартов это уродец, но в данном случае это неважно. Книга содержит и учит находить такие нестандартные решения. Почитайте - не пожалеете.
Сообщений 0 Оценка 115 Оценить |