Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Вещественные типы. Сопроцессор




В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.

В переменных вещественных типов содержатся числа, состоящие из целой и дробной частей. В Object Pascal определено шесть вещественных типов. Все типы различаются пороговым (минимальным положительным) и максимальным значениями, а также точностью (количеством значащих цифр) и объемом (табл. 8).

Обратите внимание на четкое разделение целых и вещественных чисел. Операции с целыми числами всегда выполняются точно, а с вещественными – с погрешностью. Результат сложения двух целых чисел 2+2 всегда будет точно равен 4, а результат сложения двух вещественных чисел 2.0+2.0 может оказаться равным и 3.9999999, и 4.000001. Такова особенность машинной арифметики. Это не ошибка языка Паскаль или процессора, а свойство любого компьютера.

Четкое разделение целого и вещественного типов потребовало введения двух разных операций деления: деление нацело (обозначается DIV) и вещественного деления (обозначается "/"). Не забывайте, что 10 DIV 3=3, а 10/3=3.33333.

 

Таблица 8 - Вещественные типы данных

Название Диапазон значений Количество значащих цифр Размер, байт
Real 5.0e-324…1.7e308 15-16
Single 1.5e-45…3.4e38 7-8
Double 5.0e-324…1.7e308 15-16
Extended 3.4e-4951…1.1e4932 19-20
Comp -2e63…+2e63-1 19-20
Currency +/- 922 337 203 685 477.5807; 19-20

 

Вещественное число в памяти компьютера представляется следующим образом:

S e m

Здесь s - знаковый разряд числа, е - экспонента, m - мантисса. Длина мантиссы меняется от 23 двоичных разрядов (тип Single) до 63 (тип Extended). Это обеспечивает точность десятичных цифр 7-8 для Single и 19-20 для Extended. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

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



Модели процессоров (начиная с Pentium) выпускаются уже со встроенным сопроцессором.

Сопроцессор - весьма сложное устройство. Это полноценный процессор со своим набором регистров (включая управляющие). Сопроцессор может работать независимо от основного процессора и параллельно с ним. Т.е. это вроде как отдельный вычислительный блок, и его нужно рассматривать именно как отдельное устройство.

Сопроцессор "смотрит" на команды, выполняемые процессором. Когда сопроцессор "видит" команду, которую он должен выполнить, он начинает ее обработку. Сопроцессор выполняет свои числовые операции параллельно с процессором. То есть, пока сопроцессор выполняет арифметическую команду, процессор может продолжать выполнять свои команды. Тем самым возникает истинная параллельность работы; процессор может выполнять команду, пока сопроцессор выполняет другую команду. В частности, это имеет значение в случае, когда команда сопроцессора занимает много времени, что характерно для некоторых команд с плавающей точкой.

Процессор не может читать внутренние регистры сопроцессора, и наоборот. Все данные, передаваемые между ними, должны быть помещены в память, к которой оба процессора имеют доступ. Но из-за того, что регистры адресации находятся в процессоре, сопроцессору трудно эффективно адресовать память, используя те же способы адресации, которые использует процессор. Чтобы позволить сопроцессору адресовать память с помощью способов адресации процессора, существует взаимодействие двух процессоров при выполнении команд плавающей точки.



Сопроцессор добавляет арифметические возможности в систему, но не замещает ни одну команду процессора. Команды ADD, SUB, MUL и DIV выполняются процессором, а арифметический сопроцессор выполняет дополнительные, более эффективные команды арифметической обработки.

Каждый сопроцессор имеет собственный набор команд и средства для операций с плавающей запятой для выполнения экспоненциальных, логарифмических и тригонометрических функций. Сопроцессор содержит 80-битовые регистры с плавающей запятой, которые могут представить числовые значения до 10 в 400 степени. Математические вычисления в сопроцессоре выполняются примерно в 100 раз быстрее, чем в основном процессоре.

Основной процессор выполняет специальные операции и передает числовые данные в сопроцессор, который выполняет необходимые вычисления и возвращает результат.

Для изображения чисел с плавающей точкой в сопроцессоре существует три формата данных.

Короткий формат имеет 32 бита, а длинный - 64 бита. Третий формат определяет 80-битовые числа. Сопроцессор использует такой формат "промежуточного действительного числа", чтобы обеспечить очень высокую точность для промежуточных результатов вычислений.

Ученые и математики давным-давно разработали способ представления вещественных чисел в достаточно удобном виде. На первом этапе вводится десятичная точка. Этот символ "." показывает границу между целой и дробной частью числа. В случае целого числа позиция, представляющая единицы, всегда находится на правом краю числа; в случае, когда используется десятичная точка, цифры справа от нее представляют значения, меньшие единицы.

Десятичная точка позволяет записывать дроби. Число 1/2 теперь выглядит как 0.5, а 1/4 выглядит как 0.25, и 1/5 выглядит как 0.2.

Поскольку каждая позиция десятичного числа отличается от соседней на степень 10, умножение числа на 10 эквивалентно сдвигу десятичной точки на одну позицию вправо. Аналогично деление на 10 сдвигает десятичную точку на позицию влево. Это свойство можно использовать для сдвига десятичной точки на соответствующее место: мы сдвигаем десятичную точку и одновременно корректируем число на степень 10. Такое представление чисел называется представлением "с плавающей точкой", поскольку десятичная точка "плавает" в числе - она больше не помечает абсолютное место между целой и дробной частями. Положение десятичной точки можно выбрать из соображений удобства, а затем умножить число на нужную степень 10, чтобы получить правильное значение.

 

Отметим, что арифметический сопроцессор всегда обрабатывает числа в формате Extended, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются в основном для экономии памяти.

 

Особое положение в Object Pascal занимают типы Comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в Comp дробная часть имеет длину 0 разрядов, т.е. просто отсутствует, в Currency длина дробной части -4 десятичных разряда.

Фактически оба типа определяют большое целое число со знаком, сохраняющее 19...20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях Comp и Currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т.д.

Типы Currency и Comp являются типами с фиксированной десятичной точкой. Работа с ними осуществляется быстрее и проще, чем с остальными вещественными числами с плавающей точкой. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.

Типы Real, Single, Double и Extended - типы с так называемой плавающей десятичной точкой. Десятичная точка подразумевается перед старшим байтом мантиссы, но при арифметических действиях с числом она сдвигается вправо или влево (зависит от операции и двоичного порядка числа). Операции с типами Real, Single, Double и Extended называют арифметикой с плавающей точкой.


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал