- •Конспект лекций (часть 1) Оглавление
- •Введение
- •1. Этапы и проблемы решения задач с использованием компьютера
- •Алфавит языка
- •Ключевые слова
- •Идентификаторы
- •Знаки операций
- •Константы
- •Комментарии
- •2.3. Структура и основные элементы программы
- •2.4. Трансляция программ и их выполнение
- •3. Стандартные (базовые) типы данных, операции и выражения
- •3.1. Типы данных, переменные и константы Понятие типов данных
- •Классификация простых предопределенных типов данных
- •Переменные, константы
- •3.2. Целочисленные типы данных
- •3.3. Вещественные типы данных
- •3.4. Логический тип данных
- •3.5. Символьный тип данных
- •3.6. Операции и выражения
- •Преобразования типов данных
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные (битовые) операции
- •Операции составного присваивания
- •Условная операция
- •Операция sizeof
- •Приоритеты рассмотренных операций
- •3.7. Ввод и вывод простых типов данных
- •Вывод текстовых строк
- •Ввод/вывод арифметических типов данных
- •Форматирование ввода / вывода
- •4.1. Идеи структурного программирования
- •Условная инструкция (if)
- •Инструкция множественного выбора (switch)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Итерационный цикл (for)
- •Инструкции перехода
- •5. Приемы программирования циклов
- •5.1. Рекуррентные вычисления
- •5.2. Инвариант цикла
- •6. Массивы и указатели
- •6.1. Понятие массива
- •6.2. Объявление массивов Объявление одномерных массивов
- •Объявление многомерных массивов
- •6.3. Ввод-вывод массивов
- •6.4. Текстовые строки как массивы символов
- •6.5. Массивы и указатели
- •7. Разработка программ при работе с массивами
- •8. Функции и структура программы
- •9. Организация ввода/вывода и работа с файлами
- •Быстрое возведение чисел в целую степень
- •Нахождение наибольшего общего делителя (алгоритм Евклида)
3.3. Вещественные типы данных
Стандарт C++ определяет три типа данных для хранения вещественных значений: float,doubleиlong double. Все эти типы предназначены для представления отрицательных и положительных значений (спецификаторunsigned к ним не применим) в разных диапазонах:
тип float занимает в памяти 4 байта с диапазоном абсолютных значений от 3.4е-38 до 3.4е+38;
тип doubleзанимает в памяти 8 байт с диапазоном абсолютных значений от 1.7е-308 до 1.7е+308;
тип long double занимает в памяти 10 байт с диапазоном абсолютных значений от 3.4e-4932 до 3.4e+4932.
.
Замечание. В консольных приложенияхWindowsтип данныхlong double занимает в памяти 8 байт, то есть ничем не отличается от типаdouble.
Константы вещественных типов задаются двумя способами:
нормальный формат: 123.456или-3.14;
экспоненциальный формат: 1.23456e2(1.23456е+2).Привести другие примеры.
Дробная часть отделяется от целой части точкой, а не запятой.
По умолчанию вещественные константы трактуются как константы типа double. Для явного указания другого типа вещественной константы можно использовать суффиксыF (f) - типfloatилиL(l) - типlong double:
3.14F- константа типаfloat,
3.14L- константа типа long double.
Вещественные типы данных (типы данных с плавающей точкой) хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка:
-1.2345e+2
| |
мантисса порядок
Тип floatзанимает 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу.
Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон.
Все вычисления с вещественными значениями осуществляются приближенно, при этом, ошибки вычислений могут достигать весьма существенных значений. Это объясняется дискретностью внутреннего (машинного) представления непрерывного диапазона вещественных значений. Точность представления значений вещественных типов зависит от размера мантиссы. Относительная точность представления вещественных значений остается постоянной при различных значениях порядка. Однако, абсолютная точность существенно зависит от значения порядка (с уменьшением порядка абсолютная точность возрастает).
Дать приближенную оценку точности на примерах.
Пример неточности вычислений:
float a = 1e30f, b;
b = a + 1e10f;
cout << b - a << endl; // На экран выведено 0
3.4. Логический тип данных
Величины логического типа могут принимать только значения trueиfalse, являющиеся зарезервированными словами. Внутренняя форма представления значенияfalse- О (нуль). Любое другое значение интерпретируется какtrue. При преобразовании к целому типуtrueимеет значение1 (единица).
В памяти переменные этого типа занимают 1 байт.
Определения переменных этого типа выглядят, например, так:
bool b1, b2 = true, b3 (false), b4 = 1, b5 = 0;
Константы – литералы задаются ключевыми словами trueиfalse.
Именованные константы этого типа особого смысла не имеют, но имеют право на существование.