`
Читать книги » Книги » Компьютеры и Интернет » Программирование » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Перейти на страницу:
class="empty-line"/>

Синтаксис регулярных выражений основан на символах, имеющих особый смысл (см. главу 23).

Некоторые классы символов поддерживаются аббревиатурами.

Б.9. Численные методы

В стандартной библиотеке языка C++ содержатся основные строительные конструкции для математических (научных, инженерных и т.д.) вычислений.

Б.9.1. Предельные значения

Каждая реализация языка C++ определяет свойства встроенных типов, чтобы программисты могли использовать эти средства для проверки предельных значений, установки предохранителей и т.д.

В заголовке <limits> определен класс numeric_limits <T> для каждого встроенного или библиотечного типа T. Кроме того, программист может определить класс numeric_limits<X> для пользовательского числового типа X. Рассмотрим пример.

class numeric_limits<float> {

public:

  static const bool is_specialized = true;

  static const int radix = 2;    // основание системы счисления

                                 // (в данном случае двоичная)

  static const int digits = 24;  // количество цифр в мантиссе

                                 // в текущей системе счисления

  static const int digits10 = 6; // количество десятичных цифр

                                 // в мантиссе

  static const bool is_signed = true;

  static const bool is_integer = false;

  static const bool is_exact = false;

  static float min() { return 1.17549435E–38F; } // пример

  static float max() { return 3.40282347E+38F; } // пример

  static float epsilon() { return 1.19209290E–07F; } // пример

  static float round_error() { return 0.5F; }        // пример

  static float infinity() { return /* какое-то значение */; }

  static float quiet_NaN() { return /* какое-то значение */; }

  static float signaling_NaN() { return /* какое-то значение */; }

  static float denorm_min() { return min(); }

  static const int min_exponent = –125;  // пример

  static const int min_exponent10 = –37; // пример

  static const int max_exponent = +128;  // пример

  static const int max_exponent10 = +38; // пример

  static const bool has_infinity = true;

  static const bool has_quiet_NaN = true;

  static const bool has_signaling_NaN = true;

  static const float_denorm_style has_denorm = denorm_absent;

  static const bool has_denorm_loss = false;

  static const bool is_iec559 = true; // соответствует системе IEC-559

  static const bool is_bounded = true;

  static const bool is_modulo = false;

  static const bool traps = true;

  static const bool tinyness_before = true;

  static const float_round_style round_style =

                                 round_to_nearest;

};

В заголовках <limits.h> и <float.h> определены макросы, определяющие основные свойства целых чисел и чисел с плавающей точкой.

Б.9.2. Стандартные математические функции

В стандартной библиотеке определены основные математические функции (в заголовках <cmath> и <complex>).

Существуют версии этих функций, принимающие аргументы типа float, double, long double и complex. У каждой из этих функций тип возвращаемого значения совпадает с типом аргумента.

Если стандартная математическая функция не может выдать корректный с математической точки зрения результат, она устанавливает переменную errno.

Б.9.3. Комплексные числа

В стандартной библиотеке определены типы для комплексных чисел complex<float>, complex<double> и complex<long double>. Класс complex <Scalar>, где Scalar — некий другой тип, поддерживающий обычные арифметические операции, как правило, работоспособен, но не гарантирует переносимости программ.

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> предусмотрено много полезных операций.

Кроме того, к комплексным числам можно применять стандартные математические функции (см. раздел Б.9.2). Примечание: в классе complex нет операций < или % (см. также раздел 24.9).

Б.9.4. Класс valarray

Объект стандартного класса valarray — это одномерный массив чисел; иначе говоря, он предусматривает арифметические операции для массивов (аналогично классу Matrix из главы 24), а также срезы (slices) и шаги по индексу (strides).

Б.9.5. Обобщенные числовые алгоритмы

 Эти алгоритмы из раздела <numeric> обеспечивают общие варианты типичных операций над последовательностями числовых значений.

Б.10. Функции стандартной библиотеки языка С

Стандартная библиотека языка С включена в стандартную библиотеку языка С++ с минимальными изменениями. В ней предусмотрено относительно небольшое количество функций, полезность которых подтверждена многолетним опытом использования в разнообразных предметных областях, особенно в низкоуровневом программировании. Библиотека языка С разделена на несколько категорий.

• Ввод-вывод в стиле языка C.

• Строки в стиле языка C.

• Управление памятью.

• Дата и время.

• Остальное.

Библиотека языка С содержит намного больше функций, чем описано в этой книге; рекомендуем читателям обратиться к хорошим учебникам по языку С, например, к книге Kernighan, Ritchie, The C Programming Language (K&R).

Б.10.1. Файлы

Система ввода-вывода, описанная в заголовке <stdio>, основана на файлах. Указатель на файл (FILE*) может относиться как к файлу, так и к стандартным потокам ввода и вывода, stdin, stdout и stderr. Стандартные потоки доступны по умолчанию; остальные файлы должны быть открыты явным образом.

Режим — это строка, содержащая одну или несколько директив, определяющих, как именно должен быть открыт файл.

В конкретной операционной системе может быть (и, как правило, так и есть) больше

Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)