- •Внимание! Серым цветом выделен необязательный материал! Глава «Введение» - также для общего развития.
- •Курс лекций по программированию на языке Pascal Содержание курса
- •Введение
- •Программное управление компьютером
- •Этапы разработки программного обеспечения. Языки программирования.
- •Языки программирования
- •Трансляция
- •Алгоритмы и структурное программирование
- •Основные структуры алгоритмов. Понятие о структурном подходе к разработке алгоритмов
- •Методы разработки программного обеспечения
- •Структуры данных
- •Сортировка
- •Стратегии распределения памяти
- •Объектно-ориентированное программирование
- •Базовые элементы языка тurbo рascal
- •Алфавит
- •Константы и переменные
- •Выражения и операции
- •Структура программы
- •Типы данных языка тр
- •Простые типы
- •Целые типы
- •Логический тип
- •Символьный тип
- •Перечисляемый тип
- •Вещественный тип
- •Математические функции
- •Математические процедуры
- •Структурированные типы
- •Массивы
- •Множества
- •Процедуры преобразования
- •Совместимость и преобразование типов
- •Управляюшие структуры языка turbo pascal Операторы
- •Простой и составной оператор
- •Условный оператор
- •Оператор множественного выбора
- •Оператор цикла "пока" (с предусловием)
- •Оператор цикла "до" (с постусловием)
- •Оператор цикла с параметром (цикл по счетчику)
- •Оператор безусловного перехода
- •Процедуры и функции
- •Особенности функций
Вещественный тип
В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и представляются в компьютере абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой точностью, зависящей от внутреннего формата вещественного числа. Существуют следующие вещественные типы.
Название |
Длина, байт |
Кол-во значащих цифр |
Диапазон десятичного порядка |
Real |
6 |
11...12 |
-39...+38 |
Single |
4 |
7...8 |
-45…+38 |
Double |
8 |
15...16 |
-324...+308 |
Extended |
10 |
19...20 |
-4932...+4932 |
Comp |
8 |
19...20 |
-9.2*10+18…9.2*1018 (-263…(263-1)) (диапазон значений) |
Вещественное число в ТР может занимать от 4 до 10 смежных байт и имеет следующую структуру в памяти компьютера:
s |
е |
m |
Здесь s – знаковый разряд числа (один двоичный разряд), е – экспоненциальная часть (содержит порядок в двоичном представлении), m – мантисса числа (в двоичном представлении). Мантисса имеет длину от 23 (для Single) до 63 (для Extended) двоичных разрядов, что обеспечивает ту точность в десятичных цифрах, которая обозначена в таблице.
Вещественные значения могут записываться обычным способом с десятичной точкой (Х := -0.009), а также в экспоненциальном формате (Y := 123.4e-23). Если присутствует десятичная точка, за ней и перед ней д.б. хотя бы одна цифра. Если есть символ е - за ним д.б. хотя одна цифра.
Несмотря на большое разнообразие вещественных типов, все они кроме Real вводятся в расчете на арифметический сопроцессор – устройство, которое подключается непосредственно к центральному процессору и предназначен для выполнения операций над числами в формате с плавающей точкой и длинными целыми числами. Сопроцессор значительно (в десятки раз) ускоряет вычисления, связанные с вещественными числами. В процессорах, начиная с 80486 он встроен. Сопроцессор всегда обрабатывает числа в формате Extended (наиболее мощном). При этом остальные вещественные типы получаются простым усечением результатов до нужных размеров, что применяется в основном для экономии памяти. Т.е. если
Var
e1,e2 : Extended;
e3 : Double;
result : Single;
. . .
result := e1*e2/e3;
то значение выражения справа будет вычислено как тип Extended. Но при присваивании его переменной result меньшей мощности Single будет произведено усечение и значительно уменьшится число значащих цифр после десятичной точки.
Тип Real оптимизирован на работу без сопроцессора, поэтому его использование при наличии сопроцессора будет крайне неэффективно (время, «съедаемое» на преобразование его в сопроцессорный тип, перекрывает ускорение, а точности при этом не добавляется). Поэтому, если предполагается использовать разработанную программу на разных компьютерах (с сопроцессором и без него), целесообразно ввести свой вещественный тип (например, Float), и с помощью него описать все переменные. Конкретный тип, которому соответствует Float, зависит от наличия сопроцессора.
Type
Float = Real; {без сопроцессора}
Float = Double; {с сопроцессором}
Var
X : Float;
Y : array [1..9] of Float;
Чтобы программа могла задействовать возможности сопроцессора она должна иметь в своем начале директиву (ключ компилятора) $N+. Однако даже если в компьютере нет сопроцессора, ТР дает возможность эмулировать его работу программным путем. Т.е. можно создать программу, которая будет работать с вещественными числами большой точности, независимо от наличия сопроцессора. Это достигается существенными потерями в скорости счета. Включением эмуляции управляет ключ компилятора $E.
Особое место занимает тип Comp. Он трактуется как вещественное число без экспоненциальной и дробной части. Фактически, Comp – это «большое» целое число со знаком, сохраняющее 19…20 значащих цифр. В то же время тип Comp полностью совместим с любыми другими вещественными типами, над ним определены все вещественные операции и т.д. Наиболее подходящей областью применения являются бухгалтерские операции, когда денежные суммы выражаются в целых рублях (копейках), а действия над ними могут привести к очень длинным целым числам.
В ТР имеется набор стандартных процедур и функций, которые работают с вещественными и целыми данными.
