Scalar real() { return re; } // действительная часть
Scalar imag() { return im; } // мнимая часть
// операторы : = += –= *= /=
};
Стандартная библиотека complex
поддерживает типы скалярных величин float
, double
и long double
. Кроме членов класса complex
и стандартных математических функций (раздел 24.8), заголовок
содержит множество полезных операций.
Примечание: в классе complex
нет операций <
и %
.
Класс complex
используется так же, как любой другой встроенный тип, например double
. Рассмотрим пример.
typedef complex
// является слишком громоздким
void f(dcmplx z, vector
{
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
Обратите внимание на то, что представление (схема) комплексных чисел в стандартной библиотеке языка С++ сопоставима с соответствующими типами в языках 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
, а не заголовок
).
2. Используя оператор sizeof
, выведите на экран размеры объектов Matrix
, Matrix
, Matrix
, Matrix
, Matrix
.
3. Выведите на печать количество элементов в каждом из объектов, перечисленных в упр. 2.
4. Напишите программу, вводящую числа типа int
из потока cin
и результат применения функции sqrt()
к каждому из этих чисел int
. Если функцию sqrt(x)
нельзя применять к некоторым значениям x
, выведите на экран сообщение “корень квадратный не существует” (т.е. проверяйте значения, возвращаемые функцией sqrt()
).
5. Считайте десять чисел с плавающей точкой из потока ввода и запишите их в объект типа Matrix
. Класс Matrix
не имеет функции push_back()
, поэтому будьте осторожны и предусмотрите реакцию на попытку ввести неверное количество чисел типа double
. Выведите этот объект класса Matrix
на экран.
6. Вычислите таблицу умножения [0,n]*[0,m]
и представьте ее в виде двумерного объекта класса Matrix
. Введите числа n
и m
из потока cin
и аккуратно выведите на экран полученную таблицу (предполагается, что число m достаточно мало, чтобы результаты поместились в одной строке).
7. Введите из потока cin
десять объектов класса complex
(да, класс cin
поддерживает оператор >>
для типа complex
) и поместите его в объект класса Matrix
. Вычислите и выведите на экран сумму десяти комплексных матриц.
8. Запишите шесть чисел типа int
в объект класса Matrix
и выведите их на экран.
Контрольные вопросы
1. Кто выполняет числовые расчеты?
2. Что такое точность?
3. Что такое переполнение?
4. Каковы обычные размеры типов double
и int
?