Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

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

  • Читать дальше
  • 1
  • ...
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • ...

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

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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