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

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

LOGICAL(L [, kind]) - преобразовывает логическую величину из одной разновидности в другую. Результат имеет такое же значение, что и L и параметр разновидности kind. Если kind отсутствует, то тип результата LOGICAL.

TRANSFER(source, mold [, size]) - переводит данные source в другой тип без изменения физического представления данных, т. е. значения отдельных битов результата и source совпадают. Тип и параметры типа результата такие же, как у mold.

Пусть физическое представление source есть последовательность n бит b1b2 ... bn, а представление mold занимает m бит, тогда результат:

при n = m равен b1b2 ... bn;

при n < m - b1b2 ... bns1s2 ... sm - n, где биты si не определены;

при n > m - b1b2 ... bm.

Если mold скаляр и параметр size опущен, то результат является скаляром. Если mold массив и size опущен, то результатом является одномерный массив, размер которого достаточен для размещения в нем source. Если параметр size задан, то результатом является одномерный массив размером size.

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

Функция

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

Тип результата

 

 

 

ICHAR(c)

CHARACTER(1)

INTEGER(4)

 

 

 

IACHAR(c)

"

"

CHAR(i [, kind])

Целый

CHARACTER(1)

 

 

 

ACHAR(i)

"

"

 

 

 

6.6. Элементные числовые функции

ABS(a) - абсолютная величина целого, вещественного или комплексного аргумента. Если a целого типа, то и результат целого типа, в остальных случаях результат будет вещественным. Для комплексного аргумента a = x + y i: ABS(a) = SQRT(x**2 + y**2).

Пример:

complex(4) :: z =(3.0, 4.0)

 

 

write(*, *) abs(z)

! 5.0

(тип результата - REAL(4))

AINT(a [, kind]) - обрезает вещественную величину a в сторону нуля до целого числа и выдает результат в виде вещественной величины, разновидность типа которой совпадает со значением аргумента kind, если

176

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

он задан, или - в противном случае - со стандартной разновидностью вещественного типа.

ANINT(a [, kind]) - возвращает в виде вещественной величины целое число, ближайшее к значению вещественного аргумента a (выполняет округление a). Разновидность типа результата совпадает со значением аргумента kind, если он задан, или - в противном случае - со стандартной разновидностью вещественного типа.

NINT(a [, kind]) - возвращает целое число, ближайшее к значению вещественного аргумента a (выполняет округление a). Разновидность типа результата совпадает со значением аргумента kind, если он задан, или - в противном случае - со стандартной разновидностью целого типа.

Пример:

real :: a(3) = (/ 2.8, -2.8, 1.3 /)

 

 

 

 

 

write(*, *) anint(a)

!

3.000000

-3.000000

1.000000

write(*, *) nint(2.8), nint(2.2)

!

3

2

 

 

write(*, *) nint(a(2)), nint(-2.2)

!

-3

-2

 

 

write(*, *) aint(2.6), aint(-2.6)

!

2.000000

-2.000000

 

CEILING(a [, kind]) - возвращает наименьшее целое, большее или равное значению вещественного аргумента a. Разновидность типа результата совпадает со значением аргумента kind, если он задан, или - в противном случае - со стандартной разновидностью целого типа. Необязательный параметр добавлен стандартом 1995 г.

CONJG(z) - возвращает комплексное число, сопряженное со значением комплексного аргумента z.

Пример:

print *, conjg((3.0, 5.6))

! (3.000000, -5.600000)

DIM(x, y) - возвращает x - y, если x > y, и 0, если x y. Аргументы x и y должны быть оба целого или вещественного типа.

Пример:

print *, dim(6, 4), dim(4.0, 6.0)

! 2 0.000000E+00

DPROD(x, y) - возвращает произведение двойной точности - REAL(8). Аргументы x и y должны быть стандартного вещественного типа.

Пример:

real :: a = 3.72382, b = 2.39265

 

write(*, *) a * b, dprod(a, b)

 

! Результат:

8.9097980

8.90979744044290

FLOOR(a [, kind]) - возвращает наибольшее целое, меньшее или равное значению вещественного аргумента a. Разновидность типа результата совпадает со значением аргумента kind, если он задан, или - в противном

177

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

случае - со стандартной разновидностью целого типа. Необязательный параметр добавлен стандартом 1995 г.

Пример для CEILING и FLOOR:

integer i, iarray(2)

 

 

i = ceiling(8.01)

! Возвращает

9

i = ceiling(-8.01)

! Возвращает

-8

iarray = ceiling((/8.01, -5.6/))

! Возвращает (9, -5)

i = floor(8.01)

! Возвращает

8

i = floor(-8.01)

! Возвращает

-9

iarray = floor((/ 8.01, -5.6 /), kind = 2)

! Возвращает (8, -6) типа INTEGER(2)

MOD(a, p) - возвращает остаток от деления a на p, т. е. MOD(a, p) = a - - INT(a/p)*p. Параметры a и p должны быть либо оба целыми, либо оба вещественными. Если p = 0, то результат не определен.

Пример:

write(*, *) mod(5, 3), mod(5.3, 3.0) ! 2 2.300000

MODULO(a, p) - возвращает a по модулю p. Параметры a и p должны быть либо оба целыми, либо оба вещественными. Результат r таков, что a = q * p + r, где q - целое число; |r| < p, и r имеет тот же знак, что и p. Если p = 0, то результат не определен. Для вещественных a и p

MODULO(a, p) = a - FLOOR(a / p) * p .

Пример:

print *, modulo(8, 5)

!

3

(q =

1)

print *, modulo(-8, 5)

!

2

(q = -2)

print *, modulo(8, -5)

!

-2

(q = -2)

print *, modulo(7.285, 2.35)

!

2.350001E-01

(q =

3)

print *, modulo(7.285, -2.35)

!

-2.115

(q = -4)

SIGN(a, b) - возвращает абсолютную величину a, умноженную на +1, если b 0, и -1, если b < 0. Параметры a и b должны быть либо оба целыми, либо оба вещественными.

Пример. Функция SIGN вернет 1.0, если второй ее аргумент - ya - больше нуля или равен ему, и -1.0 - в противном случае.

result = sign(1.0, ya)

6.7. Вычисление максимума и минимума

Функции нахождения максимума и минимума являются элементными и применимы к числовым данным вещественного и целого типа. Имена MAX и MIN являются родовыми.

AMAX0(a1, a2, [, a3, ...]) - возвращает максимум из двух или более значений стандартного целого типа. Результат имеет стандартный вещественный тип.

178