Вещественный тип с плавающей точкой
Типы данных
Тип данных – это некоторый класс объектов данных вместе с набором операций для создания и работы с ними. В каждом языке имеется набор встроенных элементарных типов данных.
Дополнительно можно определять новые типы данных.
Основные элементы спецификации типа данных:
Ø Атрибуты, характеризующие объекты данных заданного типа;
Ø Значения, которые могут принимать объекты данных заданного типа;
Ø Операции, которые допустимы над объектами данных заданного типа.
Текущие значения атрибутов объекта данных хранятся в дескрипторе (описателе) данных.
Дескриптор может быть частью объекта данных или храниться в отдельной области памяти.
Под реализацией типа данных понимают:
Ø Способ представления объектов данных этого типа в памяти компьютера во время выполнения программы;
Ø Способ представления операций, определенных для этого типа данных (комбинация аппаратных и программных средств, реализующих конкретные алгоритмы и процедуры над представлениями объектов данных заданного типа в памяти).
Синтаксис типа данных – это набор синтаксических конструкций для представления основных элементов спецификации типа данных. Атрибуты объектов данных обычно представлены синтаксически через объявления или определения типов. Значения представляются литералами или именованными константами. Вызов операций осуществляется с помощью специальных символов, встроенных процедур и функций.
Элементарные типы данных
Элементарными типами данных называются типы данных, не определяемые в терминах других типов. Простейшие – скалярные типы данных. У каждого объекта только один атрибут.
Пример скалярных типов: числовой, логический, символьный и указательный тип данных.
Числовые типы
Ø Целый тип;
Ø Вещественный тип с плавающей точкой;
Ø Десятичный тип с фиксированной точкой.
Целый тип
В языках поддерживается несколько целых типов.
Пример: язык Ada – SHORT INTEGER, INTEGER и LONG INTEGER, язык С – int, short, long и char.
Спецификация. Множество чисел целого типа образует ограниченное упорядоченное подмножество бесконечного множества целых чисел, определенного в математике.
Операции над целочисленными объектами данных:
§ Арифметические операции:
o Бинарные операции (БинОп): сложение, вычитание, умножение, деление, деление по модулю.
Спецификация имеет вид:
БинОп: integer1´integer2®integer3,
где символом ´ обозначен знак операции;
o Унарные операции (УнарОп): операция отрицания, операция определения абсолютного значения.
Спецификация имеет вид:
УнарОп: integer1®integer2;
§ Битовые операции (БитОп): побитовое логическое И, побитовое логическое ИЛИ, сдвиг битов влево, сдвиг битов вправо.
При выполнении битовых операций целые числа рассматриваются как последовательности битов.
Спецификация имеет вид:
БитОп: integer1´integer2®integer3;
o Операции сравнения (СравнОп): равно, не равно, больше, меньше, больше или равно, меньше или равно.
Спецификация имеет вид:
СравнОп: integer1´integer2®Boolean;
§ Операция присваивания (ПрисвОп) – это операция, изменяющая связывание объекта данных со значением.
Спецификация определяется одним из двух способов:
o Установить значение, содержащееся в объекте данных integer1, равным значению, содержащемуся в объекте данных integer2, но не возвращать явный результат (изменение значения объекта integer1 является побочным эффектом данной операции).
ПрисвОп: integer1´integer2®void;
o Установить значение, содержащееся в объекте данных integer1, равным значению, содержащемуся в объекте данных integer2, а также создать и вернуть новый объект данных integer3, содержащий копию значения integer2.
ПрисвОп: integer1´integer2®integer3.
Первый способ характерен для языка Pascal, а второй способ – для языка С.
Реализация. Целочисленный тип данных реализуется при помощи аппаратного представления целых чисел и элементарных арифметических операций и операций сравнения, реализованных аппаратно.
Рис. 1.3. Три способа представления в памяти целых чисел.
Вещественный тип с плавающей точкой
Включен практически во все ЯП.
Спецификация. Вещественные числа с плавающей точкой определяются одним атрибутом (real или float). Множество значений определяется точностью и диапазоном.
Точность определяется числом разрядов мантиссы, а диапазон значений – диапазоном изменения экспоненты (от 10-38 до 10+38 для чисел обычной точности и от 10-308 до 10+308 для чисел удвоенной точности).
В некоторых ЯП точность может быть задана программистом количеством значащих цифр в десятичном представлении.
Некоторые числа, например, 0.1 или p, не могут быть точно представлены вещественными числами с плавающей точкой, т. к. они не могут быть представлены конечным набором двоичных цифр.
Применяются те же арифметические операции, что и для целых чисел, кроме битовых операций.
Операция проверки равенства двух вещественных чисел может быть запрещена разработчиком языка из-за проблемы округления.
В большинстве ЯП определены встроенные функции, такие как max, sqrt, sin.
Реализация. С помощью аппаратного представления.
Область памяти для хранения вещественного числа с плавающей точкой разделяется на две части: мантиссу и экспоненту.
Используется формат, определяемый стандартом IEEE Standard 7754: 32 бита для представления чисел обычной точности и 64 бита для представления чисел удвоенной точности.
Рис.1.4. Формат вещественных чисел с обычной (а) и двойной (б) точностью.