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

int x = f;

cout << x << ' ' << f << '\n';

Значение переменной x будет равно 2. Оно не будет равным 3, как вы могли подумать, если применили “правило округления 4/5”. В языке C++ преобразование типа float в тип int сопровождается усечением, а не округлением.

  При вычислениях следует опасаться возможного переполнения и усечения.

Язык C++ не решит эту проблему за вас. Рассмотрим пример.

void f(int i, double fpd)

{

 char c = i;      // да: тип char действительно представляет

                  // очень маленькие целые числа

 short s = i;     // опасно: переменная типа int может

                  // не поместиться

                  // в памяти, выделенной для переменной

                  // типа short

 i = i+1;         // что, если число i станет максимальным?

 long lg = i*i;   // опасно: переменная типа long не может

                  // вместить результат

 float fps = fpd; // опасно: большее число типа large может

                  // не поместиться в типе float

 i = fpd;         // усечение: например, 5.7 –> 5

 fps = i;         // можно потерять точность (при очень

                  // больших целых)

}

void g()

{

  char ch = 0;

  for (int i = 0; i<500; ++i)

    cout << int(ch++) << '\t';

}

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

ПОПРОБУЙТЕ

Выполните функцию g(). Модифицируйте функцию f() так, чтобы она выводила на печать переменные c, s, i и т.д. Протестируйте программу на разных значениях.

  Представление целых чисел и их преобразование еще будет рассматриваться в разделе 25.5.3. По возможности ограничивайтесь немногими типами данных, чтобы минимизировать вероятность ошибок. Например, используя только тип double и избегая типа float, мы минимизируем вероятность возникновения проблем, связанных с преобразованием doublefloat. Например, мы предпочитаем использовать только типы int, double и complex (см. раздел 24.9) для вычислений, char — для символов и bool — для логических сущностей. Остальные арифметические типы мы используем только при крайней необходимости.

<p id="AutBody_Root463"><strong>24.2.1. Пределы числовых диапазонов</strong></p>

  Каждая реализация языка C++ определяет свойства встроенных типов в заголовках , и , чтобы программисты могли проверить пределы диапазонов, установить сигнальные метки и т.д. Эти значения перечислены в разделе Б.9.1. Они играют очень важную роль для создания низкоуровневых инструментов. Если они вам нужны, значит, вы работаете непосредственно с аппаратным обеспечением, хотя существуют и другие приложения. Например, довольно часто возникают вопросы о тонкостях реализации языка, например: “Насколько большим является тип int?” или “Имеет ли знак тип char?” Найти определенные и правильные ответы в системной документации бывает трудно, а в стандарте указаны только минимальные требования. Однако можно легко написать программу, находящую ответы на эти вопросы.

cout << "количество байтов в типе int: " << sizeof(int) << '\n';

cout << "наибольшее число типа int: " << INT_MAX << endl;

cout << "наименьшее число типа int: " << numeric_limits::min()

     << '\n';

if (numeric_limits::is_signed)

  cout << "тип char имеет знак n";

else

  cout << "тип char не имеет знака\n";

cout << "char с минимальным значением: "

     << numeric_limits::min() <<'\n';

cout << "минимальное значение типа char: "

     << int(numeric_limits::min()) << '\n';

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

Эти пределы также могут быть полезными для выявления переполнения.

<p id="AutBody_Root464"><strong>24.3. Массивы</strong></p>
Перейти на страницу:

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

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

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

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

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

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

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

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