Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
15.04.2015
Размер:
439.06 Кб
Скачать

7.3. Вещественные типы

Внутреннее представление

Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей — мантис­сы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87x10-1, и в памяти хранится мантисса 87 и порядок -1 (для наглядно­сти мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее).

Существует несколько вещественных типов, различающихся точностью и диапа­зоном представления данных. Точность числа определяется длиной мантиссы, а диапазон — длиной порядка.

Вещественные типы данных

Тип

Название

Размер, байт

Значащих десятичных цифр

Диапазон значений

real

Вещественный

6

11-12

2.9е-39 .. 1.7е+38

single

Одинарной точности

4

7-8

1.5е-45 .. 3.4е+38

double

Двойной точности

8

15-16

5.0е-324 . . 1.7е+308

extended

Расширенный

10

19-20

3.4е-4932 .. 1.1е+4923

comp

Большое целое

8

19-20

-9.22е18 .. 9.22е18

(-263 .. 263-1)

Примечание. Для первых четырех типов в таблице приведены абсолютные величины минималь­ных и максимальных значений.

Real является стандартным для Паскаля, все остальные относятся к стандартным типам сопроцессора. Из этих четырех типов первые три являются вещественными. Тип Comp на самом деле представляет собой длинные целые числа. Величины это­го типа хранятся таким же образом, как целые, но отнести его к целым мешает то, что по области применимости он несколько отличается от остальных. Это объясняется тем, что тип Comp не относится к порядковым типам. Comp введен для того, чтобы с использованием сопроцессора можно было выполнять операцию над длинными целыми числами.

При наличии сопроцессора все операции выполняются над данными в форме типа данных Extended, все остальные значения получаются путем усечения значения типа Extended до нужной ширины в соответствии с заданным типом переменных.

Внутреннее представление переменных вещественных типов подробно рассматривается в курсе «Информатика». Для значений вещественных типов различают2 части:

- мантисса – нормализованное значение числа;

- порядок – число, показывающее степень, в которую надо возвести мантиссу, чтобы получить истинное значение числа. (из-за нормализации мантиссы).

Real хранится в памяти так:

S M E Real

возрастание адресов справа налево

S E M Single

возрастание адресов справа налево

Все нормальные типы сопроцессора: Single, Double, Extended хранятся таким же образом.

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

Если сопроцессор имеется, желательно не использовать тип данных Real, предпочтительнее - Single или Double. Программа будет выполняться в 2 раза быстрее.

На Паскале имеется возможность управлять характером работы с этими вещественными типами.

  1. {$N+}

    {$N-}

    разрешить или запретить использовать типы данных сопроцессора:

директивы разрешения (запрета) использования в процессоре типа данных сопроцессора

Директива {$N+} задает, что разрешено использование всех 5 вещественных типов данных.

Директива {$N-} задает, что разрешено использование только тип Real.

По умолчанию действует {$N-}.

Данная установка перекрывает возможную установку, которая была сделана в среде.

При наличии {$N-} следующая запись будет считаться неправильной:

Var

v: Single;

  1. Вы можете управлять, кто должен выполнять действия над данными вещественного типа:

  • аппаратными средствами (сопроцессором) с использованием его встроенных команд

  • программно (работа с типами данных сопроцессора эмулируется центральным процессором).

Директива {$E+} - разрешает эмуляцию сопроцессора, если его нет, а директива {$E-} - запрещает эмуляцию сопроцессора. По умолчанию действует {$E+}. Словоэмуляцияозначает моделирование (программное) работы сопроцессора, т.е. воспроизведение реальной работы сопроцессора на его программной модели.

Если использовать {$E-}, компилятором будет использован такой код, который нельзя выполнить на машине без сопроцессора.

  1. {$N+} {$E+}

  2. {$N+} {$E-}

  3. {$N-} {$E+}

  4. {$N-} {$E-}

1-я комбинация соответствует ситуации, когда разрешено использовать типы данных сопроцессора. Если сопроцессора нет, то он будет эмулироваться, если есть - будет сгенерирован код для работы без эмуляции.

2-я комбинация: директива компилятора {$N+} указывает, что будут использованы типы данных сопроцессора, причем работа с ними будет идти без эмуляции.

3-я и4-я: типы данных сопроцессора не используются и поэтому директива {$E}не играет роли.

Как быть, если мы заранее не знаем, есть ли сопроцессор или нет, т.е. можно ли использовать его типы данных без эмуляции или нет? Есть по крайней мере два варианта решения:

  1. Если в программе используются все 5 вещественных типов данных, то можно поступить так:

{$IFDEF CPU87} В этом случае компилятор будет сам

{$N+} выбирать (в зависимости от наличия или

{$ELSE} директивы отсутствия сопроцессора) правильную

{$N-} условной модель генерации кода для работы с

{$ENDIF} компиляции вещественными числами

  1. если при наличии сопроцессора надо вместо Real использовать Single, то можно записать так:

{$IFOPT N+} {$N } Здесь мы ввели свой тип float,

type или более сложно ……… под которым в зависимости

real=single; {$IFOPT N+} от наличия сопроцессора пони-

{$ENDIF} type float = single; мает то Real то Single

{$ELSE}

type float = real;

{$ENDIF}

Var R:float;

Рассмотрим теперь, что же можно делать с величинами вещественных типов, то есть какие к ним применяются операции и функции.

Операции

Арифметические операции для вещественных величин. Результат их выполнения — вещественный.

Операция

Знак операции

Сложение

+

Вычитание

-

Умножение

*

Деление

/

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

Примечание. Обратите внимание на то, что целочисленное и вещественное деление записываются с помощью разных операций. Если требуется получить вещественный результат деле­ния двух целых величин, нужно использовать операцию /, если целый — операцию di v.

К вещественным величинам можно также применять операции отношения. Результат этих операций имеет логический тип.

Стандартные функции и процедуры для вещественных величин

Имя

Описание

Результат

Пояснения

abs

Модуль

Вещественный

|х| записывается abs(x)

arctan

Арктангенс угла

Вещественный

arctg x записывается arctan(x)

cos

Косинус угла

Вещественный

cos x записывается cos(x)

ехр

Экспонента

Вещественный

ех записывается ехр(х)

frac

Дробная часть аргумента

Вещественный

frac(3.1) даст в результате 0,1

int

Целая часть аргумента

Вещественный

int(3.1) даст в результате 3,0

ln

Натуральный логарифм

Вещественный

logex записывается ln(х)

pi

Значение числа 

Вещественный

3,1415926536

round

Округление до целого

Вещественный

round(3.1) даст в результате 3

round (3.8) даст в результате 4

sin

Синус угла

Вещественный

sin x записывается sin(x)

sqr

Квадрат

Вещественный

х2 записывается sqr(x)

sqrt

Квадратный корень

Вещественный

x записывается sqrt(x)

trunc

Целая часть аргумента

Целый

trunc(3.1) даст в результате 3

Соседние файлы в папке WORD