Теория: Подпрограммы, программы и функции


3.2. Встроенные функции.

Встроенные функции определены в языке МS-Фортран и доступны для использования в программе на МS-Фортране. В таблице 5-1 приведены имена, назначения, типы параметров и типы функций для всех встроенных функций, допустимых в МS-Фортране, с дополнительными примечаниями после таблицы.

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

Имя встроенной функции может появиться в операторе INTRINSIC. Имя встроенной функции может также появиться в операторе описания типа, но только если тип тот же самый, что и стандартный тип этой встроенной функции.

Параметры некоторых встроенных функций ограничены назначением этих функций. Например, логарифм отрицательного числа математически не определен и поэтому недопустим.

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

Например, функция INT - это общее имя шести чуть отличающихся функций: одна с собственным именем, совпадающим с основным, три с особыми именами (IFIX,IDINT,ICHAR) и две - безымянных (для типов данных COMPLEX*8 и COMPLEX*16).

Все углы в таблице 5-1 выражены в радианах. Все параметры в ссылке на встроенную функцию должны быть того же типа. Х и У - действительные, Z - комплексное, I и J - целые, а С,С1 и С2 - символьные величины. Числа в квадратных скобках в колонке 1 ссылаются на примечания после таблицы.

В дальнейшем REAL эквивалентно REAL*4, DOUBLE PRECISION -REAL*8, a COMPLEX - COMPLEX*8. Если в указанном типе параметра -INTEGER, то тип может быть INTEGER*2 или INTEGER*4. Если указанный тип функции - INTEGER, тип будет целый по умолчанию определенный метакомандой $STORAGE. (Для более полной информации смотрите часть 6).

г============T=======================T==========T=========¬
|    ИМЯ     |       НАЗНАЧЕНИЕ      |ТИП ПАРАМ.|ТИП Ф    |
|============|=======================|==========|=========|
| Преобразование типов                                    |
| INT(общее) | преобразует в INTEGER |   любой  |INTEGER  |
| INT2(X)    | преобразует в INTEGER*|   любой  |INTEGER* |
| INT4(X)    | преобразует в INTEGER*|   любой  |INTEGER* |
| INT(X) [1] | преобразует в INTEGER |   REAL*4 |INTEGER  |
| IFIX(X)    | преобразует в INTEGER |   REAL*4 |INTEGER  |
| IDINT(X)   | преобразует в INTEGER |   REAL*8 |INTEGER  |
| ICHAR(C)[S]| преобразует в INTEGER | CHARACTER|INTEGER  |
| REAL(общее)| преобразует в REAL*4  |   любой  |REAL*4   |
| REAL(X) [2]| преобразует в REAL*4  |  INTEGER |REAL*4   |
|            |                       |   REAL*4 |REAL*4   |
| DREAL(Z)   | преобразует COMPLEX*16|COMPLEX*16|  REAL*8 |
|            | в REAL*8              |          |         |
| FLOAT(I)   | преобразует в REAL*4  |  INTEGER |  REAL*4 |
| CHAR(X)    | преобразует в символ. |  INTEGER |CHARACTER|
| SNGL(X)    | преобразует в REAL*4  |   REAL*8 |  REAL*4 |
| DBLE(общее)| преобразует в REAL*8  |    любой |  REAL*8 |
| CMPLX(Z[,Y]| преобразует в COMPLEX*|    любой |COMPLEX*8|
|         [4]|                       |          |         |
| DCMPLX(Z[,Y| преобразует в COMPLEX*|    любой |COMPLEX*1|
|                                                         |
| Взятие целой части                                      |
| AINT(общее)| целая часть от REAL   |   REAL*4 |  REAL*4 |
| AINT(X)    | целая часть от REAL*4 |   REAL*8 |  REAL*8 |
|            |                       |   REAL*4 |  REAL*4 |
| DINT(X)    | целая часть от REAL*8 |   REAL*8 |  REAL*8 |
|                                                         |
| Округление                                              |
| ANINT(общее| округление REAL       |   REAL*4 |  REAL*8 |
|            |                       |   REAL*8 |  REAL*8 |
| ANINT(X)   | округление REAL*4     |   REAL*4 |  REAL*4 |
| DNINT(X)   | округление REAL*8     |   REAL*8 |  REAL*8 |
|                                                         |
| Округление в целое                                      |
| NINT(общее)| округление с переводом|   REAL*4 | INTEGER |
|            | в целое               |   REAL*8 | INTEGER |
| NINT(X)    | округление с переводом|   REAL*4 | INTEGER |
|            | в целое               |          |         |
| IDNINT(X)  | округление с переводом|   REAL*8 | INTEGER |
|            | в целое               |          |         |
|                                                         |
| Абсолютная величина                                     |
| ABS(общее) | абсолютная величина   |    любой |   любой |
| IABS(I)    | абсолютное целое      |  INTEGER | INTEGER |
| ABS (X)    | абсолютное REAL*4     |   REAL*4 | REAL*4  |
| DABS(X)    | абсолютное REAL*8     |   REAL*8 | REAL*8  |
| CABS(Z)    | абсолютное COMPLEX    | COMPLEX*8| REAL*4  |
|            |                       | COMPLEX*1| REAL*8  |
| CDABC(Z)   | абсолютное COMPLEX*16 | COMPLEX*1| REAL*8  |
|                                                         |
| Взятие остатка                                          |
| MOD(общее) | остаток               |  INTEGER |INTEGER  |
|            |                       |   REAL*4 | REAL*4  |
| MOD(I,Y)   | целый остаток         |  INTEGER | INTEGER |
| AMOD(X,Y)  | остаток REAL*4        |   REAL*4 | REAL*4  |
| DMOD(X,Y)  | остаток REAL*8        |   REAL*8 | REAL*8  |
-----------------------------------------------------------
|                                                         |
| Передача знака                                          |
| SIGN(общее)| передача знака        |  INTEGER | INTEGER |
|            |                       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| ISIGN(I,Y) | передача знака целого |  INTEGER | INTEGER |
| SIGN(X,Y)  | передача знака REAL*4 |   REAL*4 | REAL*4  |
| DSIGN(X,Y) | передача знака REAL*8 |   REAL*8 | REAL*8  |
|                                                         |
| Положительная разность [6]                              |
| DIM(общее) | положительная разность|  INTEGER | INTEGER |
|            |                       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| IDIM(I,Y)  | разность целых        |  INTEGER | INTEGER |
| DIM(X,Y)   | разность REAL*4       |   REAL*4 | REAL*4  |
| DDIM(X,Y)  | разность REAL*8       |   REAL*8 | REAL*8  |
|                                                         |
| Поиск наибольшей величины                               |
| MAX(общее) | максимум              |  INTEGER | INTEGER |
|            |                       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| MAX0(I,Y..)| целый максимум        |  INTEGER | INTEGER |
| AMAX1(X,Y.)| максимум REAL*4       |   REAL*4 | REAL*4  |
| AMAX0(I,Y.)| максимум REAL*4       |  INTEGER | REAL*4  |
| MAX1(X,Y..)| целый максимум        |   REAL*4 | INTEGER |
| DMAX1(X,Y.)| максимум REAL*8       |   REAL*8 | REAL*8  |
|                                                         |
| Поиск наименьшей величины                               |
| MIN(общее) | минимум               |  INTEGER | INTEGER |
|            |                       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| MIN0(I,Y..)| целый минимум         |  INTEGER | INTEGER |
| AMIN1(X,Y.)| минимум REAL*4        |   REAL*4 | REAL*4  |
| AMIN0(I,Y.)| минимум REAL*4        |  INTEGER | REAL*4  |
| MIN1(X,Y..)| целый минимум         |   REAL*4 | INTEGER |
| DMIN1(X,Y.)| минимум REAL*8        |   REAL*8 | REAL*8  |
|                                                         |
| Перевод в REAL*8                                        |
| DPROD(X,Y) | перевод в REAL*8      |   REAL*4 | REAL*4  |
|                                                         |
| Мнимая часть комплексного числа                         |
| AIMAG(Z)   | выделяет мнимую часть | COMPLEX*8| REAL*4  |
|            | заданной пары в REAL*4|          |         |
| DIMAG(Z)   | выделяет мнимую часть |COMPLEX*16| REAL*8  |
|            | заданной пары в REAL*8|          |         |
|                                                         |
| Сопряжение комплексного числа                           |
| CONYG(Z)   | сопряжение COMPLEX*8  |COMPLEX*8 |COMPLEX*8|
| DCONYG(Z)  | сопряжение COMPLEX*16 |COMPLEX*16|COMPLEX*1|
-----------------------------------------------------------
| Квадратный корень                                       |
| SQRT(общее)| квадратный корень     |   REAL*4 |  REAL*4 |
|            |                       |   REAL*8 |  REAL*8 |
|            |                       |COMPLEX*8 |COMPLEX*8|
|            |                       |COMPLEX*16|COMPLEX*1|
| SQRT(X)    | квадратный корень REAL|   REAL*4 |  REAL*4 |
| DSQRT(X)   | квадратный корень REAL|   REAL*8 |  REAL*8 |
| CSQRT(Z)   | квадратный корень     | COMPLEX*8|COMPLEX*8|
|            | COMPLEX*8             |          |         |
| CDSQRT(Z)  | квадратный корень     |COMPLEX*16|COMPLEX*1|
|            | COMPLEX*16            |          |         |
| Экспонента                                              |
| EXP(общее) | экспонента            |   REAL*4 |  REAL*4 |
|            |                       |   REAL*8 |  REAL*8 |
|            |                       | COMPLEX*8|COMPLEX*8|
|            |                       |COMPLEX*16|COMPLEX*1|
| EXP(X)     | REAL*4 e в степени    |   REAL*4 |  REAL*4 |
| DEXP(X)    | REAL*8 e в степени    |   REAL*8 |  REAL*8 |
| CEXP(Z)    | COMPLEX*8 e в степени | COMPLEX*8|COMPLEX*8|
| CDEXP(Z)   | COMPLEX*16 e в степени|COMPLEX*16|COMPLEX*1|
|                                                         |
| Натуральный логарифм                                    |
| LOG(общее) | натуральный логарифм  |   REAL*4 |  REAL*4 |
|            |                       |   REAL*8 |  REAL*8 |
|            |                       | COMPLEX*8|COMPLEX*8|
|            |                       | COMPLEX*1|COMPLEX*1|
| ALOG(X)    | нат. логарифм REAL*4  |   REAL*4 |  REAL*4 |
| DLOG(X)    | нат. логарифм REAL*8  |   REAL*8 |  REAL*8 |
| CLOG(Z)    | нат. логарифм COMPLEX*| COMPLEX*8|COMPLEX*8|
| DLOG(Z)    | нат. логарифм COMPLEX*|COMPLEX*16|COMPLEX*1|
|                                                         |
| Десятичный логарифм                                     |
|LOG10(общее)| десятичный логарифм   |   REAL*4 |  REAL*4 |
|            |                       |   REAL*8 |  REAL*8 |
| ALOG10(X)  | дес. логарифм REAL*4  |   REAL*4 |  REAL*4 |
| DLOG10(X)  | дес. логарифм REAL*8  |   REAL*8 |  REAL*8 |
|                                                         |
| Синус                                                   |
| SIN(общее) | функция синус         |   REAL*4 |  REAL*4 |
|            |                       |   REAL*8 |  REAL*8 |
|            |                       | COMPLEX*8|COMPLEX*8|
|            |                       |COMPLEX*16|COMPLEX*1|
| SIN(X)     | REAL*4 синус          |   REAL*4 |  REAL*4 |
| DSIN(X)    | REAL*8 синус          |   REAL*8 |  REAL*8 |
| CSIN(Z)    | COMPLEX*8 синус       | COMPLEX*8|COMPLEX*8|
| CDSIN(Z)   | COMPLEX*16 синус      |COMPLEX*16|COMPLEX*1|
-----------------------------------------------------------
| Косинус                                                 |
| COS(общее) | функция косинус       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
|            |                       | COMPLEX*8|COMPLEX*8|
|            |                       |COMPLEX*16|COMPLEX*1|
| COS(X)     | REAL*4 косинус        |   REAL*4 | REAL*4  |
| DCOS(X)    | REAL*8 косинус        |   REAL*8 | REAL*8  |
| CCOS(Z)    | COMPLEX*8 косинус     | COMPLEX*8|COMPLEX*8|
| CDCOS(Z)   | COMPLEX*16 косинус    |COMPLEX*16|COMPLEX*1|
|                                                         |
| Тангенс                                                 |
| TAN(общее) | функция тангенс       |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| TAW(X)     | REAL*4 тангенс        |   REAL*4 | REAL*4  |
| DTAN(X)    | REAL*8 тангенс        |   REAL*8 | REAL*8  |
| Арксинус                                                |
| ASIN(общее)| функция арксинус      |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| ASIN(X)    | REAL*4 арксинус       |   REAL*4 | REAL*4  |
| DASIN(X)   | REAL*8 арксинус       |   REAL*8 | REAL*8  |
|                                                         |
| Арккосинус                                              |
| ACOS(общее)| функция арккосинус    |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| ACOS(X)    | REAL*4 арккосинус     |   REAL*4 | REAL*4  |
| DACOS(X)   | REAL*8 арккосинус     |   REAL*8 | REAL*8  |
|                                                         |
| Арктангенс                                              |
| ATAN(общее)| функция арктангенс    |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| ATAN(X)    | REAL*4 арктангенс     |   REAL*4 | REAL*4  |
| DATAW(X)   | REAL*8 арктангенс     |   REAL*8 | REAL*8  |
| ATAN2(X,Y) | REAL*4 арктангенс х/y |   REAL*4 | REAL*4  |
| DATAN2(X,Y)| REAL*8 арктангенс x/y |   REAL*8 | REAL*8  |
|                                                         |
| Гиперболический синус                                   |
| SINH(общее)| гиперболический синус |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| SINH(X)    | REAL*4 гиперб. синус  |   REAL*4 | REAL*4  |
| DSINH(X)   | REAL*8 гиперб. синус  |   REAL*8 | REAL*8  |
|                                                         |
| Гиперболический косинус                                 |
| COSH(общее)| гиперболич. косинус   |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| COSH(X)    | REAL*4 гиперб. косинус|   REAL*4 | REAL*4  |
| DCOSH(X)   | REAL*8 гиперб. косинус|   REAL*8 | REAL*8  |
-----------------------------------------------------------
| Гиперболический тангенс                                 |
| TANH(общее)| гиперболич. тангенс   |   REAL*4 | REAL*4  |
|            |                       |   REAL*8 | REAL*8  |
| TANH(X)    | REAL*4 гиперб. тангенс|   REAL*4 | REAL*4  |
| DTANH(X)   | REAL*8 гиперб. тангенс|   REAL*8 | REAL*8  |
|                                                         |
| Лексически больше или равно [7]                         |
| LGE(C1,C2) | первый параметр больше| CHARACTER| LOGICAL |
|            | или равен второму     |          |         |
|                                                         |
| Лексически больше [7]                                   |
| LGT(C1,C2) | первый параметр больше| CHARACTER| LOGICAL |
|            | второго               |          |         |
|                                                         |
| Лексически меньше или равно [7]                         |
| LLT(C1,C2) | первый параметр меньше| CHARACTER| LOGICAL |
|            | или равен второму     |          |         |
|                                                         |
| Лексически меньше [7]                                   |
| LLT(C1,C2) | первый параметр меньше| CHARACTER| LOGICAL |
|            | второго               |          |         |
| Конец файла [8]                                         |
| EOF(I)     | целый конец файла     |  INTEGER | LOGICAL |
L============|=======================|==========|=========-
    Таблица 5-1. Встроенные функции.

Примечания к таблице 5-1:

  1. Для Х типа INTEGER INT(X)=X. Для Х типа REAL или REAL*8, если Х - неотрицательно, то INT(X) - наибольшее целое, не превышающее Х; а если Х - отрицательно, то INT(X) - наибольшее отрицательное целое не меньшее чем Х. Для Х типа REAL IFIX(X) то же самое, что INT(X).
  2. Для Х типа REAL REAL*(X)=X. Для Х типа INTEGER или REAL*8 REAL(X) это значащая часть наибольшей точности Х, которую может содержать данный тип REAL. Для Х типа INTEGER FLOAT(X) - то же самое, что REAL(X).
  3. Для Х типа REAL*8 DBLE(X)=X. Для Х типа INTEGER или REAL DBLE(X) - это значащая часть наибольшей точности Х, которую может содержать тип данных двойной точности.
  4. COMPLEX и DCMPLX могут иметь один или два параметра. Если использован один параметр, он может быть типа INTEGER, REAL, DOUBLE PRECISION, COMPLEX или DOUBLE PRECISION COMPLEX. Если использованы два параметра, то они должны быть одного и того же типа и при этом допустимы типы INTEGER, REAL или DOUBLE PRECISION.
    При Z=COMPLEX*8, COMPLEX(Z)=Z. Для Z=INTEGER, REAL и REAL*8 COMPLEX(Z)=комплексной величине, действительная часть которой REAL(Z), а мнимая часть равна нулю.
    COMPLEX(X,Y)= комплексной величине, действительная часть которой - REAL(X), а мнимая - REAL(Y).
    При Z=COMPLEX*16, DCMPLX(Z)=Z. Для Z=INTEGER, REAL и REAL*8 DCMPL(Z)=комплексной величине, у которой действительная часть - REAL*8, а мнимая равна нулю. Для Z=COMPLEX*8 DCMPLX(Z) имеет действительную часть равной DBLE(Z), а мнимую равной DBLE(AIMAG(Z)).
    DCMPLX(X,Y)=комплексной величине, у которой действительная часть - REAL*8(X), а мнимая - REAL*8(Y).
  5. ICHAR преобразует символьную величину в целую. Целая величина символа - это внутреннее представление символа в коде ASCII, лежащее в диапазоне от 0 до 255. Для любых двух символов С1 и С2 (С1.LE.C2) будет .TRUE. тогда и только тогда если (ICHAR(C1).LE.ICHAR(C2)) есть .TRUE. Функция CHAR(I) возвращает 1-й символ таблиц ASCII. Это величина типа CHARACTER длиной один символ, при этом I должно быть целым выражением, величина которого принадлежит диапазону 0 ≤ i ≤ 255.
    ICHAR(CHAR(I)) = I для 0 ≤ I ≤ 255
    CHAR(ICHAR(C)) = C для любого С из набора ASCII
  6. DIM(X,Y) - это Х-Y, если X>Y, или нуль в противном случае.
  7. LGE(X,Y) возвращает .TRUE. если Х=Y или если Х следует за Y в таблице кодов ASCII; иначе возвращается .FALSE.
    LGT(X,Y) возвращает .TRUE. если Х следует за Y в таблице кодов ASCII; иначе возвращается .FALSE.
    LLE(X,Y) возвращает .TRUE. если X=Y или если Х предшевствует Y в таблице ASCII; иначе возвращается .FALSE.
    LLT(X,Y) возвращает .TRUE. если Х предшевствует Y в таблице ASCII; иначе возвращается .FALSE.
    Если у операндов неравная длина, то более короткий дополняется справа пробелами.
  8. EOF(X) возвращает .TRUE. если устройство, определенное этим параметром находится на или после записи конец-файла; иначе возвращается .FALSE. Величина Х должна соответствовать открытому файлу или нулю, что соответствует экрану или клавиатуре.

<<<Назад  Теория  Далее>>>

Rambler's Top100

Copyright © fortran-online.info, 2007