Теория: Встроенные функции Fortran 90


Введение

Здесь большое число встроенных функций Fortran 90 и 5 встроенных подпрограмм. Численные и математические подпрограммы рассмотрены очень кратко, поскольку они не заменены по сравнению с Fortran 77 и они могут быть известны.

Раздел базируется на секции 13 стандарта ISO (1991), который содержит более формальное рассмотрение. Мы следуем представлению различных функций и подпрограмм стандарта, но более подробное рассмотрение мы увидим у Metcalf и Reid (1990, 1993).

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

1. Функции, которые определяют, есть ли некий аргумент в списке фактических параметров:

Функция PRESENT(A) возвращает .TRUE. если аргумент A есть в вызывающем списке, .FALSE. в противном случае.

2. Числовые функции:

Следующие доступные из Fortran 77: ABS, AIMAG, AINT, ANINT, CMPLX, CONJG, DBLE, DIM, DPROD, INT, MAX, MIN, MOD, NINT, REAL и SIGN.

Дополнительно, CEILING, FLOOR и MODULO добавлены к Fortran 90. Только последняя трудна для объяснения, которое облегчается примером из ISO (1991)

MOD (8,5)    дает  3     MODULO (8,5)    дает  3
MOD (-8,5)   дает -3     MODULO (-8,5)   дает  2
MOD (8,-5)   дает  3     MODULO (8,-5)   дает -2
MOD (-8,-5)  дает -3     MODULO (-8,-5)  дает v3

Следующие функции из Fortran 77 могут иметь параметры вида (kind-parameter) подобно AINT(A, kind), именно AINT, ANINT, CMPLX, INT, NINT и REAL.

Исторический факт, что численные функции в Fortran 66 могли иметь специальные (различные) имена для различных точностей, и эти явные имена являются единственными, которые можно использовать, когда имя функции используется как аргумент.

Полная таблица всех числовых функций следует ниже. Те имена, которые помечены символом звездочка *, не разрешены для использования в качестве аргумента. Некоторые функции, подобно INT и IFIX имеют два специальных имени, из которых оба могут быть использованы. С другой стороны некоторые функции могут не иметь никаких специальных имен. Ниже я использую C для значений комплексных с плавающей точкой, D для значений двойной точности с плавающей точкой, I для целых, и R для значений одинарной точности с плавающей точкой.

Функции        Generic  Specific Data type
                name     name     Arg   Res

Преобразование  INT      -        I     I
 в  integer            * INT      R     I
                       * IFIX     R     I
                       * IDINT    D     I
 (вещественной части)    -        C     I

Преобразование  REAL   * REAL     I     R
 в real                * FLOAT    I     R
                         -        R     R
                       * SNGL     D     R
 (вещественная часть)    -        C     R

Преобразование  DBLE     -        I     D
 в  double               -        R     D
 precision               -        D     D
 (вещественная часть)    -        C     D

Преобразование  CMPLX    -     I (2I)   C
 в  complex              -     R (2R)   C
                         -     D (2D)   C
                         -        C     C

Усечение                 AINT     AINT     R     R
                         DINT     D     D

Округление               ANINT    ANINT    R     R
                         DNINT    D     D
                NINT     NINT     R     I
                         IDNINT   D     I

Абсолютное               ABS      IABS     I     I
 значение                ABS      R     R
                         DABS     D     D
                         CABS     C     R

Остаток                  MOD      MOD     2I     I
                         AMOD    2R     R
                         DMOD    2D     D
                MODULO   -       2I     I
                         -       2R     R
                         -       2D     D

Floor(дно)      FLOOR    -        I     I
                         -        R     R
                         -        D     D

Ceiling(потолок)CEILING  -        I     I
                         -        R     R
                         -        D     D

Передача        SIGN     ISIGN   2I     I
 Знака                   SIGN    2R     R
                         DSIGN   2D     D

Положительная            DIM      IDIM    2I     I
 Разность                DIM     2R     R
                         DDIM    2D     D

Внутреннее      -        DPROD    R     D
Произведение (Inner product)
Maximum         MAX    * MAX0     I     I
                       * AMAX1    R     R
                       * DMAX1    D     D
                -      * AMAX0    I     R
                -      * MAX1     R     I

Minimum         MIN    * MIN0     I     I
                       * AMIN1    R     R
                       * DMIN1    D     D
                -      * AMIN0    I     R
                -      * MIN1     R     I

Мнимая часть    -        AIMAG    C     R

Сопряженное     -        CONJG    C     C

Усечение v это в сторону нуля, INT(-3.7) получает -3, но округление v это корректировка, NINT(-3.7) получает -4. Новые функции FLOOR и CEILING усекают бесконечно в сторону минуса и плюса, соответственно.

Функция CMPLX может иметь один или два аргумента, если имеются два аргумента, они должны быть одного и того же типа, но не COMPLEX.

Функция MOD(X,Y) вычисляет X - INT(X/Y)*Y.

Функция переноса знака SIGN(X,Y) берет знак второго аргумента и устанавливат его первому аргументу, ABS(X) если Y>=0 и -ABS(X) если Y<0.

Положительная разница DIM это функция. Я не могу никогда использовать, но (X,Y) дает X-Y, если разница положительна, и 0 в другом случае.

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

Две функции MAX и MIN уникальны в том, что они могут иметь произвольное число аргументов, но не менее двух. Аргументы могут быть любого типа, но не разрешен тип COMPLEX.

Теория  Далее>>>

Rambler's Top100

Copyright © fortran-online.info, 2007