- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Операции над целыми числами
Основные: сложение, вычитание, умножение, деление.
Приоритеты – как и в математике
Получаемые значения ограничены диапазоном типа данных
# char a,b,c; a=200; b=56; c=a+b;// с будет равно единице
• Переполнение - полученное значение выходит за границы допустимого диапазона данных.
Часто переполнение обрабатывается согласно цикличной арифметики - отбрасывается кратное число предельно допустимых значений и оставляет остаток.
Стоит опасаться действий оптимизатора:
с=a-100+b; всё ок
c=a+b-100; оптимизатор преобразует вот так и будет переполнение
• Операция умножения требует большего времени выполнения на процессоре.
• Процессор сохраняет результат умножения в двух ячейках, соответствующих исходному типу( чтобы не потерять лидирующие знаки), и только потом обрезает до нужного типа, если не произошло переполнения.
• Операция деления разделена на
1. Получение целой части(/div)
2. Получение остатка от деления (%mod). Требует самого большого числа тактов.
Вещественные числа
10,11 в двоичной = 2,75 в 10(1*2^1+ 0*2^0…)
Обратный переход затруднен, т.к не каждое десятичное можно перевести в конечные двоичные числа.
Два подхода:
1. Согласно двоичной арифметике – двоично-кодированные десятичные числа.
2. Кодировать цифры числа как целое число, дополняя информацией о позиции десятичного разделителя.
Числа с фиксированной точкой
Формат числа с фиксированной точкой определяет, что вещественное число содержит не более заданного количества цифр N целой части и не более некоторого заданного количества M цифр запятой, итого N+M.
Достаточно сохранить его целочисленное представление (включая 1 бит знака) и номер позиции десятичной точки.
+Количество знаков после запятой определяет абсолютную погрешность.
-Относительная погрешность переменная.
-Некоторые числа нельзя вписать в формат.
Применяется, когда точность заранее определена: денежные операции, показания приборов.
Числа с плавающей точкой(float)
Вещественные число в интервале [0;1].
Количество возможных цифр в целой части фиксируется.
Т.к. мантисса всегда меньше 1, то позиции точки хранить не надо.
+Кол-во знаков мантиссы определяет относительную погрешность.
+Очень широкий диапазон чисел, низкая относительная погрешность.
Операции умножения могут приводить к тому, что порядок в результате вычисления выйдет за границы допустимого диапазона.
• Переполнение – порядок выше верхней границы диапазона.
• Потеря значимости – порядок меньше нижней границы диапазона.
Умножение и деление
• Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.
• Деление. Нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.
Сложение и вычитание
• Сначала выбирается оптимальный порядок, затем мантисса обоих чисел представляется в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализованной форме.
