- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
Обработка ошибок с помощью переменной errno носит довольно примитивный характер. Она уходит корнями в первую версию (выпуска 1975 года) математических функций языка C.
24.9. Комплексные числа
Комплексные числа широко используются в научных и инженерных вычислениях. Мы полагаем, что раз они вам необходимы, значит, вам известны их математические свойства, поэтому просто покажем, как комплексные числа выражаются в стандартной библиотеке языка С++. Объявление комплексных чисел и связанных с ними математических функций находятся в заголовке <complex>.
template<class Scalar> class complex {
// комплексное число — это пара скалярных величин,
// по существу, пара координат
Scalar re, im;
public:
complex(const Scalar & r, const Scalar & i) :re(r), im(i) { }
complex(const Scalar & r) :re(r),im(Scalar ()) { }
complex() :re(Scalar ()), im(Scalar ()) { }
Scalar real() { return re; } // действительная часть
Scalar imag() { return im; } // мнимая часть
// операторы : = += –= *= /=
};
Стандартная библиотека complex поддерживает типы скалярных величин float, double и long double. Кроме членов класса complex и стандартных математических функций (раздел 24.8), заголовок <complex> содержит множество полезных операций.
Примечание: в классе complex нет операций < и %.
Класс complex<T> используется так же, как любой другой встроенный тип, например double. Рассмотрим пример.
typedef complex<double> dcmplx; // иногда выражение complex<double>
// является слишком громоздким
void f(dcmplx z, vector<dcmplx>& vc)
{
dcmplx z2 = pow(z,2);
dcmplx z3 = z2*9.3+vc[3];
dcmplx sum = accumulate(vc.begin(), vc.end(), dcmplx());
// ...
}
Помните, что не все операции над числами типов int и double определены для класса complex. Рассмотрим пример.
if (z2<z3) // ошибка: операция < для комплексных чисел не определена
Обратите внимание на то, что представление (схема) комплексных чисел в стандартной библиотеке языка С++ сопоставима с соответствующими типами в языках C и Fortran.
24.10. Ссылки
По существу, вопросы, поднятые в этой главе, такие как ошибки округления, операции над матрицами и арифметика комплексных чисел, сами по себе интереса не представляют. Мы просто описываем некоторые возможности, предоставляемые языком С++, людям, которым необходимо выполнять математические вычисления.
Если вы подзабыли математику, то можете обратиться к следующим источникам информации.
Архив MacTutor History of Mathematics, размещенный на веб-странице http://www-gap.dcs.st-and.ac.uk/~history.
• Отличная веб-страница для всех, кто любит математику или просто хочет ее применять.
• Отличная веб-страница для всех, кто хочет увидеть гуманитарный аспект математики; например, кто из крупных математиков выиграл Олимпийские игры?
• Знаменитые математики: биографии, достижения.
• Курьезы.
• Знаменитые кривые.
• Известные задачи.
• Математические темы.
• Алгебра.
• Анализ.
• Теория чисел.
• Геометрия и топология.
• Математическая физика.
• Математическая астрономия.
• История математики.
• Многое другое
Freeman, T. L., and Chris Phillips. Parallel Numerical Algorithms. Prentice Hall, 1992.
Gullberg, Jan. Mathematics — From the Birth of Numbers. W. W. Norton, 1996. ISBN 039304002X. Одна из наиболее интересных книг об основах и пользе математики, которую можно читать одновременно и с пользой (например, о матрицах), и с удовольствием.
Knuth, Donald E. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, Third Edition. Addison-Wesley, 1998. ISBN: 0202496842.
Stewart, G. W. Matrix Algorithms, Volume I: Basic Decompositions. SIAM, 1998. ISBN 0898714141.
Wood, Alistair. Introduction to Numerical Analysis. Addison-Wesley, 1999. ISBN 020194291X.
Задание
1. Выведите на экран размеры типов char, short, int, long, float, double, int* и double* (используйте оператор sizeof, а не заголовок <limits>).
2. Используя оператор sizeof, выведите на экран размеры объектов Matrix <int> a(10), Matrix<int> b(10), Matrix<double> c(10), Matrix<int,2> d(10,10), Matrix<int,3> e(10, 10,10).
3. Выведите на печать количество элементов в каждом из объектов, перечисленных в упр. 2.
4. Напишите программу, вводящую числа типа int из потока cin и результат применения функции sqrt() к каждому из этих чисел int. Если функцию sqrt(x) нельзя применять к некоторым значениям x, выведите на экран сообщение “корень квадратный не существует” (т.е. проверяйте значения, возвращаемые функцией sqrt()).
5. Считайте десять чисел с плавающей точкой из потока ввода и запишите их в объект типа Matrix<double>. Класс Matrix не имеет функции push_back(), поэтому будьте осторожны и предусмотрите реакцию на попытку ввести неверное количество чисел типа double. Выведите этот объект класса Matrix на экран.
6. Вычислите таблицу умножения [0,n]*[0,m] и представьте ее в виде двумерного объекта класса Matrix. Введите числа n и m из потока cin и аккуратно выведите на экран полученную таблицу (предполагается, что число m достаточно мало, чтобы результаты поместились в одной строке).
7. Введите из потока cin десять объектов класса complex<double> (да, класс cin поддерживает оператор >> для типа complex) и поместите его в объект класса Matrix. Вычислите и выведите на экран сумму десяти комплексных матриц.
8. Запишите шесть чисел типа int в объект класса Matrix<int,2> m(2,3) и выведите их на экран.
Контрольные вопросы
1. Кто выполняет числовые расчеты?
2. Что такое точность?
3. Что такое переполнение?
4. Каковы обычные размеры типов double и int?
5. Как обнаружить переполнение?
6. Как определить пределы изменения чисел, например наибольшее число типа int?
7. Что такое массив, строка и столбец?
8. Что такое многомерный массив в стиле языка C?
9. Какими свойствами должен обладать язык программирования (например, должна существовать библиотека) для матричных вычислений?
10. Что такое размерность матрицы?
11. Сколько размерностей может иметь матрица?
12. Что такое срезка?
13. Что такое пересылка? Приведите пример.

