Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

6. Встроенные процедуры

print *, associated(a, b)

! T

print *, associated(c)

! T

print *, associated(c, e)

! F

print *, associated(c, e(1:10:2))

! T

PRESENT(a) - определяет, задан ли необязательный формальный параметр a при вызове процедуры. Функция PRESENT может быть вызвана только в процедуре с необязательными параметрами. Функция возвращает

.TRUE., если в вызове процедуры присутствует фактический параметр, соответствующий формальному параметру a. В противном случае PRESENT возвращает .FALSE.. Результат имеет стандартный логический тип.

Пример:

call who(1, 2)

! Напечатает:

a present

 

!

b present

call who(1)

! Напечатает:

a present

call who(b = 2)

! Напечатает:

b present

call who( )

! Напечатает:

No one

contains

 

 

subroutine who(a, b)

 

 

integer(4), optional :: a, b if(present(a)) print *, 'a present' if(present(b)) print *, 'b present'

if(.not. present(a) .and. .not. present(b)) print *, 'No one' end subroutine who

end

KIND(x) - возвращает стандартное целое, равное значению параметра разновидности аргумента x.

Пример:

real(kind(1e0)), parameter :: one = 1.0

! Вещественные константа one

real(kind(1e0)) :: err

! и переменная err одинарной точности

6.11. Числовые справочные и преобразовывающие функции

6.11.1. Модели данных целого и вещественного типа

Каждая разновидность целого и вещественного типа содержит конечное множество чисел. Так, тип INTEGER(2) представляет все целые числа из диапазона от -32,768 до +32,767. Каждое такое множество чисел может быть описано моделью. Данные о параметрах модели заданной разновидности типа и о конкретных характеристиках числа в задающей его модели позволяют получать встроенные числовые справочные и преобразовывающие функции, а также функции IMACH, AMACH и DMACH библиотеки IMSL.

Двоичное представление целого числа i задается формулой

185

О. В. Бартеньев. Современный ФОРТРАН

i = (1)s b0b1 bQ1 ,

знак

где s - это 0 или 1 (+ или -); bi - двоичное число (0 или 1); Q - число цифр в целом числе по основанию 2.

Вещественные числа с плавающей точкой представляются в CVF и FPS в близком соответствии со стандартом IEEE для арифметики с плавающей точкой (ANSI/IEEE Std 754-1985, IEEE Standard for Binary Floating-Point Arithmetic, 1985). Фортран поддерживает форматы одинарной точности - тип REAL(4), двойной точности - тип REAL(8) и повышенной точности, используемой для выполнения промежуточных операций. Например, в следующем коде:

real(4) :: a, b, c, d, f

! Задана опция /Op компилятора FPS

b = 0.0; c = 1.0e30; d = 1.0e30; f = 1.0e-30

a = (b + (c * d)) / 2.0 * f

 

print *, a

! 5.000000E+29

промежуточные вычисления, если задана опция компилятора /Op, FPS выполнит с повышенной точностью. Если же при компиляции задана опция /Oxp, предусматривающая полную оптимизацию скорости вычислений и проверку ошибок, то на этапе компиляции возникнут предупреждения вида (по причине переполнения в результате умножения c * d = 1.0e30 * 1.0e30)

warning F4756: overflow in constant arithmetic

а результатом вычислений будет машинная бесконечность - 1#INF........

Двоичное представление вещественного числа x с плавающей точкой задается формулой

x = (1)s b0 .b1b2 bP1 ×2E ,

знак мантисса

где s - это 0 или 1 (+ или -); bi - двоичное число (0 или 1); P - число цифр в мантиссе нормализованного представления вещественного числа по основанию 2; E - целое число, называемое (двоичным) порядком, из отрезка Emin E Emax. В табл. 6.1 приводятся значения параметров модели вещественных чисел для одинарной, двойной и повышенной точности.

Таблица 6.1. Параметры модели чисел стандарта IEEE Std 754

Параметр

 

Точность

 

 

 

 

 

 

одинарная

двойная

повышенная

 

 

 

 

Число бит для знака

1

1

1

 

 

 

 

P

24

53

64

Emax

+128

+1024

+16384

186

 

 

 

 

6. Встроенные процедуры

 

 

 

 

 

 

 

 

Emin

-125

-1021

 

-16381

 

 

Смещение двоичного порядка

+126

+1022

 

+16382

 

 

 

 

 

 

 

 

 

Число бит для двоичного порядка

8

11

 

15

 

 

Число бит для числа

32

64

 

80

 

 

 

 

 

 

 

 

Стандарт требует, чтобы числа одинарной и двойной точности представлялись в нормализованном виде, поэтому всегда b0 = 1 и, следовательно, для представления мантиссы чисел одинарной точности требуется 23 бита, а двойной - 52. Числа повышенной точности не нормализуются, поэтому для мантиссы требуется 64 бита. При записи порядка к нему с целью повышения скорости вычислений добавляется смещение, поэтому порядок всегда представляется в виде положительного числа e. Реально, однако, порядок E = e - смещение. Структура формата вещественных чисел двойной точности с плавающей точкой приведена на рис. 6.1.

1

11

52

Знак

Порядок +

Мантисса

 

смещение

 

Рис. 6.1. Структура IEEE-формата вещественных чисел двойной точности

Замечания:

1.Множество представимых в компьютере чисел с плавающей точкой конечно. Так, для типа REAL(4) их число примерно равно 231.

2.FPS и CVF содержат программу BitViewer просмотра двоичного представления вещественных чисел одинарной и двойной точности.

6.11.2. Числовые справочные функции

Эти функции выдают характеристики модели, в которой содержится параметр функции. Параметром функции может быть как скаляр, так и массив. Значение параметра может быть неопределенным.

DIGITS(x) - возвращает число двоичных значащих цифр в модели представления x (т. е. Q или P). Параметр x может быть целого или вещественного типа. Результат имеет стандартный целый тип.

Тип параметра x

DIGITS(x)

 

 

INTEGER(1)

7

 

 

INTEGER(2)

15

 

 

INTEGER(4)

31

 

 

REAL(4)

24

 

 

187

О. В. Бартеньев. Современный ФОРТРАН

 

 

REAL(8)

 

53

 

 

 

 

 

 

 

 

 

EPSILON(x) - возвращает 21P :

 

 

 

 

 

Тип параметра x

EPSILON(x)

 

 

 

 

 

 

 

 

 

REAL(8)

2.22044049250313E-016

 

 

 

 

 

 

 

 

 

REAL(4)

1.192093E-07

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Замечание. Возвращаемое функцией и EPSILON число часто называют

машинной точностью и обозначают εм.

HUGE(x) - для целого или вещественного x возвращает наибольшее значение x. Тип и параметр типа результата такие же, как у x. Значение

равно 2Q 1 - для целого x и (12P )2Emax - для вещественного x.

Тип параметра x

HUGE(x)

 

 

INTEGER(1)

127

 

 

INTEGER(2)

32,767

 

 

INTEGER(4)

2,147,483,647

 

 

REAL(4)

3.402823E+38

 

 

REAL(8)

1.797693134862316E+308

 

 

MAXEXPONENT(x) - для вещественного x возвращает максимальное значение порядка, т. е. Emax. Результат функции имеет стандартный целый тип.

Тип параметра x

MAXEXPONENT(x)

REAL(4)

128

 

 

REAL(8)

1024

 

 

MINEXPONENT(x) - для вещественного x возвращает минимальное значение порядка, т. е. Emin. Результат функции имеет стандартный целый тип.

Тип параметра x

MINEXPONENT(x)

 

 

REAL(4)

-125

 

 

REAL(8)

-1021

 

 

PRECISION(x) - для вещественного или комплексного x возвращает число значащих цифр, следующих после десятичной точки, используемых для представления чисел с таким же параметром типа, как у x. Результат функции имеет стандартный целый тип.

Тип параметра x

PRECISION(x)

188