Previous Next Contents Index Doc Set Home


Intrinsic Functions

6


This chapter tabulates and explains the set of intrinsic functions that are part of Sun FORTRAN 77. (For information about Fortran library routines, see the Sun Fortran Library Reference.)

Intrinsic functions that are Sun extensions of the ANSI FORTRAN 77 standard are marked with .

Intrinsic functions have generic and specific names when they accept arguments of more than one data type. In general, the generic name returns a value with the same data type as its argument. The function may also be called by one of its specific names to handle a specific argument data type.

With functions that work on more than one data item (e.g. sign(a1,a2) ), all the data arguments must be the same type.

In the following tables, the FORTRAN 77 intrinsic functions are listed by:

Intrinsic Function - description of what the function does
Definition - a mathematical definition
No. of Args. - number of arguments the function accepts
Generic Name - the function's generic name
Specific Names - the function's specific names
Argument Type - data type associated with each specific name
Function Type - data type returned for specific argument data type


Note - Compiler options -dbl, -i2, -r8, and -xtypemap change the default sizes of variables and have an effect on intrinsic references. See the Remarks section on
page 333.


Arithmetic and Mathematical Functions

This section details arithmetic, type conversion, trigonometric, and other functions. "a" stands for a function's single argument, "a1" and "a2" for the first and second arguments of a two argument function, and "ar" and "ai" for the real and imaginary parts of a function's complex argument.

Note that REAL*16 and COMPLEX*32 are SPARC and PowerPC only.

Arithmetic

Table  6-1 Arithmetic Functions 

Intrinsic Function
Definition
No. of
Args.
Generic
Name
Specific
Names
Argument
Type
Function Type

Absolute value

See Note (6).

|a|

(ar2 + ai2)**(1/2)

1

ABS

IABS

ABS

DABS

CABS

QABS

ZABS

CDABS

CQABS

INTEGER

REAL

DOUBLE

COMPLEX

REAL*16

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

INTEGER

REAL

DOUBLE

REAL

REAL*16

DOUBLE

DOUBLE

REAL*16

Truncation

See Note (1).

int(a)

1

AINT

AINT

DINT

QINT

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Nearest whole number

int(a+.5) if a 0----

int(a-.5) if a < 0

1

ANINT

ANINT

DNINT

QNINT

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Nearest integer

int(a+.5) if a 0

int(a-.5) if a < 0

1

NINT

NINT

IDNINT

IQNINT

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

Remainder

See Note (1).

a1-int(a1/a2)*a2

2

MOD

MOD

AMOD

DMOD

QMOD

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Transfer of sign

|a1| if a2 0

-|a1| if a2 <0

2

SIGN

ISIGN

SIGN

DSIGN

QSIGN

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Positive difference

a1-a2 if a1 \> a2

0 if a1 a2

2

DIM

IDIM

DIM

DDIM

QDIM

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Double and quad products

a1 * a2

2

-

DPROD

QPROD

REAL

DOUBLE

DOUBLE

REAL*16

Choosing largest value

max(a1, a2, ...)

2

MAX

MAX0

AMAX1

DMAX1

QMAX1

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

AMAX0

AMAX0

INTEGER

REAL

MAX1

MAX1

REAL

INTEGER

Choosing smallest value

min(a1, a2, ...)

2

MIN

MIN0

AMIN1

DMIN1

QMIN1

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

AMIN0

AMIN0

INTEGER

REAL

MIN1

MIN1

REAL

INTEGER

Type Conversion

Table  6-2 Type Conversion Functions 

Conversion to
No. of Arguments
Generic Name
Specific
Names
Argument Type
Function Type

INTEGER

See Note (1).

1

INT

-

INT

IFIX

IDINT

-

-

-

IQINT

INTEGER

REAL

REAL

DOUBLE

COMPLEX

COMPLEX*16

COMPLEX*32

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

REAL

See Note (2).

1

REAL

REAL

FLOAT

-

SNGL

SNGLQ

-

-

-

INTEGER

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

DOUBLE

See Note (3).

1

DBLE

DBLE

DFLOAT

DREAL

DBLEQ

-

-

-

-

INTEGER

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

REAL*16

See Note (3').

1

QREAL

QEXT

QREAL

QFLOAT

-

QEXT

QEXTD

-

-

-

-

INTEGER

INTEGER

REAL

INTEGER

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

COMPLEX

See Notes (4) and (8).

1 or 2

CMPLX

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX

DOUBLE COMPLEX

See Note (8).

1 or 2

DCMPLX

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

See Note (8).

1 or 2

QCMPLX

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

INTEGER

See Note (5).

1

-

-

ICHAR

IACHAR

CHARACTER

INTEGER

CHARACTER

See Note (5).

1

-

-

CHAR

ACHAR

INTEGER

CHARACTER

On an ASCII machine, including Sun systems:

On a non-ASCII machine, ACHAR and IACHAR were intended to provide a way to deal directly with ASCII.

Trigonometric

Table  6-3 Trigonometric Functions 

Intrinsic Function
Definition
No. of Args.
Generic Name
Specific
Names
Argument Type
Function Type

Sine

See Note (7).

sin(a)

1

SIN

SIN

DSIN

QSIN

CSIN

ZSIN

CDSIN

CQSIN

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Sine (degrees)

See Note (7).

sin(a)

1

SIND

SIND

DSIND

QSIND

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Cosine

See Note (7).

cos(a)

1

COS

COS

DCOS

QCOS

CCOS

ZCOS

CDCOS

CQCOS

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Cosine (degrees)

See Note (7).

cos(a)

1

COSD

COSD

DCOSD

QCOSD

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Tangent

See Note (7).

tan(a)

1

TAN

TAN

DTAN

QTAN

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Tangent (degrees)

See Note (7).

tan(a)

1

TAND

TAND

DTAND

QTAND

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arcsine

See Note (7).

arcsin(a)

1

ASIN

ASIN

DASIN

QASIN

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arcsine (degrees)

See Note (7).

arcsin(a)

1

ASIND

ASIND

DASIND

QASIND

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arccosine

See Note (7).

arccos(a)

1

ACOS

ACOS

DACOS

QACOS

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arccosine (degrees)

See Note (7).

arccos(a)

1

ACOSD

ACOSD

DACOSD

QACOSD

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arctangent

See Note (7).

arctan(a)

1

ATAN

ATAN

DATAN

QATAN

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan(a1/a2)

2

ATAN2

ATAN2

DATAN2

QATAN2

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Arctangent (degrees)

See Note (7).

arctan(a)

1

ATAND

ATAND

DATAND

QATAND

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan(a1/a2)

2

ATAN2D

ATAN2D

DATAN2D

QATAN2D

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Hyperbolic Sine

See Note (7).

sinh(a)

1

SINH

SINH

DSINH

QSINH

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Hyperbolic Cosine

See Note (7).

cosh(a)

1

COSH

COSH

DCOSH

QCOSH

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Hyperbolic Tangent

See Note (7).

tanh(a)

1

TANH

TANH

DTANH

QTANH

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Functions

Other Mathematical Functions

Table  6-4 Other Mathematical Functions  

Intrinsic Function
Definition
No. of Args.
Generic Name
Specific Names
Argument Type
Function Type

Imaginary part of a complex number

See Note (6).

ai

1

IMAG

AIMAG

DIMAG

QIMAG

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

Conjugate of a complex number

See Note (6).

(ar, -ai)

1

CONJG

CONJG

DCONJG

QCONJG

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Square root

a**(1/2)

1

SQRT

SQRT

DSQRT

QSQRT

CSQRT

ZSQRT

CDSQRT

CQSQRT

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Cube root

See Note(8').

a**(1/3)

1

CBRT

CBRT

DCBRT

QCBRT

CCBRT

ZCBRT

CDCBRT

CQCBRT

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Exponential

e**a

1

EXP

EXP

DEXP

QEXP

CEXP

ZEXP

CDEXP

CQEXP

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Natural logarithm

log(a)

1

LOG

ALOG

DLOG

QLOG

CLOG

ZLOG

CDLOG

CQLOG

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

Common logarithm

log10(a)

1

LOG10

ALOG10

DLOG10

QLOG10

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Error function

2/sqrt(pi)* integral from 0 to a of
exp(-t*t) dt

1

ERF

ERF

DERF

REAL

DOUBLE

REAL

DOUBLE

Error function

1.0 - erf(a)

1

ERFC

ERFC

DERFC

REAL

DOUBLE

REAL

DOUBLE


Character Functions

Table  6-5 Character Functions

Intrinsic Function
Definition
No. of Args.
Generic Name
Specific
Names
Argument Type
Function Type

Conversion
See Note (5).

Conversion to character

Conversion to integer

1

1

-

-

-

-

CHAR

ACHAR

ICHAR

IACHAR

(See also

Table 6-2.)

INTEGER

CHARACTER

CHARACTER

INTEGER

Index of a substring

Location of substring a2 in string a1

See Note (10).

2

-

INDEX

CHARACTER

INTEGER

Length

Length of character entity

See Note (11).

1

-

LEN

CHARACTER

INTEGER

Lexically greater than or equal

a1 a2

See Note (12).

2

-

LGE

CHARACTER

LOGICAL

Lexically greater than

a1 \> a2

See Note (12).

2

-

LGT

CHARACTER

LOGICAL

Lexically less than or equal

a1 a2

See Note (12).

2

-

LLE

CHARACTER

LOGICAL

Lexically less than

a1

See Note (12).

2

-

LLT

CHARACTER

LOGICAL

On an ASCII machine (including Sun systems):

On a non-ASCII machine, ACHAR and IACHAR were intended to provide a way to deal directly with ASCII.


Miscellaneous Functions

Other miscellaneous functions include bitwise functions, environmental inquiry functions, and memory allocation and deallocation functions.

Bit Manipulation

Table  6-6 Bitwise Functions

Bitwise Operations
No. of Args.
Specific Name
Argument Type
Function Type

Complement

1

NOT

INTEGER

INTEGER

And

2
2

AND IAND

INTEGER
INTEGER

INTEGER
INTEGER

Inclusive or

2
2

OR IOR

INTEGER
INTEGER

INTEGER
INTEGER

Exclusive or

2
2

XOR IEOR

INTEGER
INTEGER

INTEGER
INTEGER

Shift
See Note (14).

2

ISHFT

INTEGER

INTEGER

Left shift
See Note (14).

2

LSHIFT

INTEGER

INTEGER

Right shift
See Note (14).

2

RSHIFT

INTEGER

INTEGER

Logical right shift
See Note (14).

2

LRSHFT

INTEGER

INTEGER

Circular shift

3

ISHFTC

INTEGER

INTEGER

Bit extraction

3

IBITS

INTEGER

INTEGER

Bit set

2

IBSET

INTEGER

INTEGER

Bit test

2

BTEST

INTEGER

LOGICAL

Bit clear

2

IBCLR

INTEGER

INTEGER

The above functions are available as intrinsic or extrinsic functions. See also the discussion of the library bit manipulation routines in the Fortran Library Reference manual.

Environmental Inquiry Functions

Table  6-7 Environmental Inquiry Functions

Definition
No. of Args.
Generic Name
Specific Name
Argument Type
Function Type

Base of Number System

1

EPBASE

-

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

Number of Significant Bits

1

EPPREC

-

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

Minimum Exponent

1

EPEMIN

-

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

Maximum Exponent

1

EPEMAX

-

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

Least Nonzero Number

1

EPTINY

-

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Largest Number Representable

1

EPHUGE

-

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Epsilon
See Note (16).

1

EPMRSP

-

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

Memory

Table  6-8 Memory Functions

Intrinsic Function
Definition
No. of Args.
Generic Name
Specific Name
Argument Type
Function Type

Location

Address of

See Note (17).

1

-

LOC

Any

INTEGER

Allocate

Allocate memory and return address.

See Note (17).

1

-

MALLOC

INTEGER

INTEGER

Deallocate

Deallocate memory allocated by MALLOC.

1

-

FREE

Any

-

Size

Return the size of the argument in bytes.

See Note (18).

1

-

SIZEOF

Any expression or type name

INTEGER

Although malloc and free are not, strictly speaking, intrinsics, they are listed here and in the Sun Fortran Library Reference.


Remarks

The following remarks apply to all of the intrinsic function tables in this chapter.

The following functions permit arguments of an integer or logical type of any size:

and iand ieor iiand iieor iior inot ior jiand jieor jior jnot lrshft lshift not or rshift xor


Notes on Functions

Tables and notes 1 through 12 are based on the "Table of Intrinsic Functions," from ANSI X3.9-1978 Programming Language FORTRAN, with the FORTRAN extensions added.

(1) INT

If A is type integer, then INT(A) is A.

If A is type real or double precision, then:

if |A| < 1, then INT(A) is 0
if |A| 1, then INT(A) is the greatest integer that does not exceed the magnitude of A, and whose sign is the same as the sign of A. (Such a mathematical integer value may be too large to fit in the computer integer type.)

If A is type complex or double complex, then apply the above rule to the real part of A.

If A is type real, then IFIX(A) is the same as INT(A).

(2) REAL

If A is type real, then REAL(A) is A.

If A is type integer or double precision, then REAL(A) is as much precision of the significant part of A as a real datum can contain.

If A is type complex, then REAL(A) is the real part of A.

If A is type double complex, then REAL(A) is as much precision of the significant part of the real part of A as a real datum can contain.

(3) DBLE

If A is type double precision, then DBLE(A) is A.

If A is type integer or real, then DBLE(A) is as much precision of the significant part of A as a double precision datum can contain.

If A is type complex, then DBLE(A) is as much precision of the significant part of the real part of A as a double precision datum can contain.

If A is type COMPLEX*16, then DBLE(A) is the real part of A.

(3') QREAL

If A is type REAL*16, then QREAL(A) is A.

If A is type integer, real, or double precision, then QREAL(A) is as much precision of the significant part of A as a REAL*16 datum can contain.

If A is type complex or double complex, then QREAL(A) is as much precision of the significant part of the real part of A as a REAL*16 datum can contain.

If A is type COMPLEX*16 or COMPLEX*32, then QREAL(A) is the real part of A.

(4) CMPLX

If A is type complex, then CMPLX(A) is A.

If A is type integer, real, or double precision, then CMPLX(A) is
REAL(A) + 0i.

If A1 and A2 are type integer, real, or double precision, then CMPLX(A1,A2) is REAL(A1) + REAL(A2)*i.

If A is type double complex, then CMPLX(A) is
REAL( DBLE(A) ) + i*REAL( DIMAG(A) ).

If CMPLX has two arguments, then they must be of the same type, and they may be one of integer, real, or double precision.

If CMPLX has one argument, then it may be one of integer, real, double precision, complex, COMPLEX*16, or COMPLEX*32.

(4') DCMPLX

If A is type COMPLEX*16, then DCMPLX(A) is A.

If A is type integer, real, or double precision, then DCMPLX(A) is
DBLE(A) + 0i.

If A1 and A2 are type integer, real, or double precision, then DCMPLX(A1,A2) is DBLE(A1) + DBLE(A2)*i.

If DCMPLX has two arguments, then they must be of the same type, and they may be one of integer, real, or double precision.

If DCMPLX has one argument, then it may be one of integer, real, double precision, complex, COMPLEX*16, or COMPLEX*32.

(5) ICHAR

ICHAR(A) is the position of A in the collating sequence.

The first position is 0, the last is N-1, 0ICHAR(A)N-1, where N is the number of characters in the collating sequence, and A is of type character of length one.

CHAR and ICHAR are inverses in the following sense:

(6) COMPLEX

A COMPLEX value is expressed as an ordered pair of reals, (ar, ai), where ar is the real part, and ai is the imaginary part.

(7) Radians

All angles are expressed in radians, unless the "Intrinsic Function" column includes the "(degrees)" remark.

(8) COMPLEX Function

The result of a function of type COMPLEX is the principal value.

(8') CBRT

If a is of COMPLEX type, CBRT results in COMPLEX RT1=(A, B), where:
A>= 0.0, and -60 degrees <= arctan (B/A) < + 60 degrees.

Other two possible results can be evaluated as follows:

(9) Argument types

All arguments in an intrinsic function reference must be of the same type.

(10) INDEX

INDEX(X,Y) is the place in X where Y starts. That is, it is the starting position within character string X of the first occurrence of character string Y.

If Y does not occur in X, then INDEX(X,Y) is 0.

If LEN(X) < LEN(Y), then INDEX(X,Y) is 0.

(11) Argument to LEN

The value of the argument of the LEN function need not be defined at the time the function reference is executed.

(12) Lexical Compare

LGE( X, Y ) is true if X=Y, or if X follows Y in the collating sequence; otherwise, it is false.

LGT( X, Y ) is true if X follows Y in the collating sequence; otherwise, it is false.

LLE( X, Y ) is true if X=Y, or if X precedes Y in the collating sequence; otherwise, it is false.

LLT( X, Y ) is true if X precedes Y in the collating sequence; otherwise, it is false.

If the operands for LGE, LGT, LLE, and LLT are of unequal length, the shorter operand is considered as if it were extended on the right with blanks.

(13) Bit Functions

See Chapter D, "," for details on other bitwise operations.

(14) Shift

LSHIFT shifts a1 logically left by a2 bits (inline code).

LRSHFT shifts a1 logically right by a2 bits (inline code).

RSHIFT shifts a1 arithmetically right by a2 bits.

ISHFT shifts a1 logically left if a2 > 0 and right if a2 < 0.

The LSHIFT and RSHIFT functions are the FORTRAN analogs of the C << and >> operators. As in C, the semantics depend on the hardware.

The behavior of the shift functions with an out of range shift count is hardware dependent and generally unpredictable. In this release, shift counts larger than 31 result in hardware dependent behavior.

(15) Environmental inquiries

Only the type of the argument is significant.

(16) Epsilon

Epsilon is the least e, such that 1.0 + e 1.0.

(17) LOC and MALLOC

The LOC function returns the 32-bit address of a variable or of an external procedure. The function call MALLOC( n ) allocates a block of at least n bytes, and returns the 32-bit address of that block.

(18) SIZEOF

The SIZEOF intrinsic cannot be applied to arrays of an assumed size, characters of a length that is passed, or subroutine calls or names.


VMS Intrinsic Functions

This section lists VMS FORTRAN intrinsic routines recognized by f77. They are, of course, nonstandard.

Double-Precision Complex

Table  6-9 Double-Precision Complex Functions

Generic Name
Specific Names
Function
Argument Type
Result Type

CDABS

CDEXP

CDLOG

CDSQRT

Absolute value

Exponential, e**a

Natural log

Square root

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

REAL*8

COMPLEX*16

COMPLEX*16

COMPLEX*16

CDSIN

CDCOS

Sine

Cosine

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

DCMPLX

DCONJG

DIMAG

DREAL

Convert to DOUBLE COMPLEX

Complex conjugate

Imaginary part of complex

Real part of complex

Any numeric

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

REAL*8

REAL*8

Degree-Based Trigonometric

Table  6-10 Degree-Based Trigonometric Functions  

Generic Name
Specific Names
Function
Argument Type
Result Type

SIND

SIND

DSIND

QSIND

Sine

Sine

Sine

Sine

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

COSD

COSD

DCOSD

QCOSD

Cosine

Cosine

Cosine

Cosine

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

TAND

TAND

DTAND

QTAND

Tangent

Tangent

Tangent

Tangent

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ASIND

ASIND

DASIND

QASIND

Arc sine

Arc sine

Arc sine

Arc sine

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ACOSD

ACOSD

DACOSD

QACOSD

Arc cosine

Arc cosine

Arc cosine

Arc cosine

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAND

ATAND

DATAND

QATAND

Arc tangent

Arc tangent

Arc tangent

Arc tangent

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAN2D

ATAN2D

DATAN2D

QATAN2D

Arc tangent of a1/a2

Arc tangent of a1/a2

Arc tangent of a1/a2

Arc tangent of a1/a2

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

Bit-Manipulation

Table  6-11 Bit-Manipulation Functions  

Generic Name
Specific Names
Function
Argument Type
Result Type

IBITS

IIBITS

JIBITS

From a1, initial bit a2, extract a3 bits

From a1, initial bit a2, extract a3 bits

From a1, initial bit a2, extract a3 bits

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

ISHFT

IISHFT

JISHFT

Shift a1 logically by a2 bits *

Shift a1 logically left by a2 bits

Shift a1 logically left by a2 bits

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

ISHFTC

IISHFTC

JISHFTC

In a1, circular shift by a2 places, of right a3 bits

In a1, circular shift by a2 places, of right a3 bits

In a1, circular shift by a2 places, of right a3 bits

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IAND

IIAND

JIAND

Bitwise AND of a1, a2

Bitwise AND of a1, a2

Bitwise AND of a1, a2

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IOR

IIOR

JIOR

Bitwise OR of a1, a2

Bitwise OR of a1, a2

Bitwise OR of a1, a2

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IEOR

IIEOR

JIEOR

Bitwise exclusive OR of a1, a2

Bitwise exclusive OR of a1, a2

Bitwise exclusive OR of a1, a2

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

NOT

INOT

JNOT

Bitwise complement

Bitwise complement

Bitwise complement

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IBSET

IIBSET

JIBSET

In a1, set bit a2 to 1

In a1, set bit a2 to 1; return new a1

In a1, set bit a2 to 1; return new a1

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

BTEST

BITEST

BJTEST

If bit a2 of a1 is 1, return .TRUE.

If bit a2 of a1 is 1, return .TRUE.

If bit a2 of a1 is 1, return .TRUE.

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IBCLR

IIBCLR

JIBCLR

In a1, set bit a2 to 0; return new a1

In a1, set bit a2 to 0; return new a1

In a1, set bit a2 to 0; return new a1

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

* ISHFT--If a2 is positive, then shift left; if negative, then shift right.

Multiple Integer Types

The possibility of multiple integer types is not addressed by the FORTRAN Standard. f77 copes with their existence by treating a specific INTEGER INTEGER function name (IABS, and so forth) as a special sort of generic. The argument type is used to select the appropriate runtime routine name, which is not accessible to the programmer.

VMS FORTRAN takes a similar approach, but makes the specific names available.

Table  6-12 Integer Functions  

Specific Names
Function
Argument Type
Result Type

IIABS

JIABS

Absolute value

Absolute value

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IMAX0

JMAX0

Maximum 1

Maximum 1

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IMIN0

JMIN0

Minimum 1

Minimum 1

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IIDIM

JIDIM

Positive difference 2

Positive difference 2

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IMOD

JMOD

Remainder of a1/a2

Remainder of a1/a2

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IISIGN

JISIGN

Transfer of sign, |a1|* sign(a2)

Transfer of sign, |a1|* sign(a2)

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

1 There must be at least two arguments.

2 The positive difference is: a1-min(a1,a2))

Functions Coerced to a Particular Type

Some VMS FORTRAN functions coerce to a particular INTEGER type.

Table  6-13 Translated Functions that VMS Coerces to a Particular Type  

Specific Names
Function
Argument Type
Result Type

IINT

JINT

Truncation toward zero

Truncation toward zero

REAL*4

REAL*4

INTEGER*2

INTEGER*4

IIDINT

JIDINT

Truncation toward zero

Truncation toward zero

REAL*8

REAL*8

INTEGER*2

INTEGER*4

IIQINT

JIQINT

Truncation toward zero

Truncation toward zero

REAL*16

REAL*16

INTEGER*2

INTEGER*4

ININT

JNINT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*4

REAL*4

INTEGER*2

INTEGER*4

IIDNNT

JIDNNT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*8

REAL*8

INTEGER*2

INTEGER*4

IIQNNT

JIQNNT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*16

REAL*16

INTEGER*2

INTEGER*4

IIFIX

JIFIX

Fix

Fix

REAL*4

REAL*4

INTEGER*2

INTEGER*4

IMAX1(a,a2,...)

JMAX1(a,a2,...

Maximum of two or more arguments

Maximum of two or more arguments

REAL*4

REAL*4

INTEGER*2

INTEGER*4

IMIN1(a,a2,...

JMIN1(a,a2,...

Minimum of two or more arguments

Minimum of two or more arguments

READ*4

READ*4

INTEGER*2

INTEGER*4

Functions Translated to a Generic Name

In some cases, each VMS-specific name is translated into an f77 generic name.

Table  6-14 VMS Functions That Are Translated into f77 Generic Names

Specific Names
Function
Argument Type
Result Type

FLOATI

FLOATJ

Convert to REAL*4

Convert to REAL*4

INTEGER*2

INTEGER*4

REAL*4

REAL*4

DFLOTI

DFLOTJ

Convert to REAL*8

Convert to REAL*8

INTEGER*2

INTEGER*4

REAL*8

REAL*8

AIMAX0

AJMAX0

Maximum

Maximum

INTEGER*2

INTEGER*4

REAL*4

REAL*4

AIMIN0

AJMIN0

Minimum

Minimum

INTEGER*2

INTEGER*4

REAL*4

REAL*4

Zero Extend

The following zero-extend functions are recognized by f77. The first unused high-order bit is set to zero and extended toward the higher-order end to the width indicated in the table

Table  6-15 Zero-Extend Functions

Generic Name
Specific Names
Function
Argument Type
Result Type

ZEXT

Zero-extend

-

-

IZEXT

Zero-extend

BYTE

LOGICAL*1

LOGICAL*2 INTEGER*2

INTEGER*2

JZEXT

Zero-extend

BYTE

LOGICAL*1 LOGICAL*2

LOGICAL*4

INTEGER

INTEGER*2

INTEGER*4

INTEGER*4


Previous Next Contents Index Doc Set Home