Читаем Программирование полностью

int val = rand()%max;

Долгое время такой код считался совершенно неудовлетворительным, поскольку он просто отбрасывает младшие разряды случайного числа, а они, как правило, не обладают свойствами, которыми должны обладать числа, генерируемые традиционными датчиками случайных чисел. Однако в настоящее время во многих операционных системах эта проблема решена достаточно успешно, но для обеспечения переносимости своих программ мы рекомендуем все же скрывать вычисления случайных чисел в функциях.

int randint(int max) { return rand()%max; }

int randint(int min, int max) { return randint(max–min)+min; }

  Таким образом, мы можем скрыть определение функции randint(), если окажется, что реализация функции rand() является неудовлетворительной. В промышленных программных системах, а также в приложениях, где требуются неравномерные распределения, обычно используются качественные и широко доступные библиотеки случайных чисел, например Boost::random. Для того чтобы получить представление о качестве вашего датчика случайных чисел, выполните упр. 10.

<p id="AutBody_Root477"><strong>24.8. Стандартные математические функции</strong></p>

В стандартной библиотеке есть стандартные математические функции (cos, sin, log и т.д.). Их объявления можно найти в заголовке .

Стандартные математические функции могут иметь аргументы типов float, double, long double и complex (раздел 24.9). Эти функции очень полезны при вычислениях с плавающей точкой. Более подробная информация содержится в широко доступной документации, а для начала можно обратиться к документации, размещенной в веб.

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

errno = 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";

Если вы выполняете серьезные математические вычисления, то всегда должны проверять значение errno, чтобы убедиться, что после возвращения результата оно по-прежнему равно 0. Если нет, то что-то пошло не так, как надо. Для того чтобы узнать, какие математические функции могут устанавливать флажок errno и чему он может быть равен, обратитесь к документации.

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

Обработка ошибок с помощью переменной errno носит довольно примитивный характер. Она уходит корнями в первую версию (выпуска 1975 года) математических функций языка C. 

<p id="AutBody_Root478"><strong>24.9. Комплексные числа</strong></p>

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

template 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 ()) { }

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

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных