Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

Как показано в примере, ненулевое значение флажка
errno
просто означает, что что-то пошло не так. Функции, не входящие в стандартную библиотеку, довольно часто также устанавливают флажок
errno
при выявлении ошибок, поэтому следует точнее анализировать разные значения переменной
errno
, чтобы понять, что именно случилось. В данном примере до вызова стандартной библиотечной функции переменная
errno
была равна нулю,
а проверка значения
errno
сразу после выполнения функции может обнаружить, например, константы
EDOM
и
ERANGE
. Константа
EDOM
означает ошибку, возникшую из-за выхода аргумента за пределы области определения функции (domain error). Константа
ERANGE
означает выход за пределы допустимого диапазона значений (range error).

Обработка ошибок с помощью переменной

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>
).

Поделиться:
Популярные книги

Авиатор: назад в СССР 12+1

Дорин Михаил
13. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 12+1

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Кровавая весна

Михайлов Дем Алексеевич
6. Изгой
Фантастика:
фэнтези
9.36
рейтинг книги
Кровавая весна

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

Не грози Дубровскому!

Панарин Антон
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому!

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Кодекс Крови. Книга I

Борзых М.
1. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга I

Польская партия

Ланцов Михаил Алексеевич
3. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Польская партия

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2