Программирование. Принципы и практика использования C++ Исправленное издание, стр. 342
errnoerrno = 0;double s2 = sqrt(–1);if (errno) cerr << "Что-то где-то пошло не так, как надо";if (errno == EDOM) // ошибка из-за выхода аргумента // за пределы области определения cerr << " фунция sqrt() для отрицательных аргументов не определена.";pow(very_large,2); // плохая идеяif (errno==ERANGE) // ошибка из-за выхода за пределы допустимого // диапазона cerr << "pow(" << very_large << ",2) слишком большое число для double";Если вы выполняете серьезные математические вычисления, то всегда должны проверять значение
errno0errno
errnoerrnoerrnoerrnoerrnoEDOMERANGEEDOMERANGEОбработка ошибок с помощью переменной
errno24.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; } // мнимая часть // операторы : = += –= *= /=};Стандартная библиотека
complexfloatdoublelong doublecomplex<complex>
Примечание: в классе
complex<%Класс
complex<T>doubletypedef 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()); // ...}Помните, что не все операции над числами типов
intdoublecomplexif (z2<z3) // ошибка: операция < для комплексных чисел не определенаОбратите внимание на то, что представление (схема) комплексных чисел в стандартной библиотеке языка С++ сопоставима с соответствующими типами в языках C и Fortran.
24.10. Ссылки
По существу, вопросы, поднятые в этой главе, такие как ошибки округления, операции над матрицами и арифметика комплексных чисел, сами по себе интереса не представляют. Мы просто описываем некоторые возможности, предоставляемые языком С++, людям, которым необходимо выполнять математические вычисления.
Если вы подзабыли математику, то можете обратиться к следующим источникам информации.
Архив MacTutor History of Mathematics, размещенный на веб-странице http://www-gap.dcs.st-and.ac.uk/~history.