Sun Studio 12: Fortran Library Reference

3.5 VMS Intrinsic Functions

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

3.5.1 VMS Double-Precision Complex

Table 3–9 VMS 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

3.5.2 VMS Degree-Based Trigonometric

Table 3–10 VMS Degree-Based Trigonometric Functions

Generic Name  

Specific Names  

Function  

Argument Type  

Result Type  

SIND

SIND

DSIND

QSIND

Sine 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

COSD

COSD

DCOSD

QCOSD

Cosine 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

TAND

TAND

DTAND

QTAND

Tangent 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ASIND

ASIND

DASIND

QASIND

Arc sine 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ACOSD

ACOSD

DACOSD

QACOSD

Arc cosine 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAND

ATAND

DATAND

QATAND

Arc tangent 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAN2D

ATAN2D

DATAN2D

QATAN2D

Arc tangent of a1/a2 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

3.5.3 VMS Bit-Manipulation

Table 3–11 VMS Bit-Manipulation Functions

Generic Name  

Specific Names  

Function  

Argument Type  

Result Type  

IBITS

IIBITS

JIBITS

KIBITS

From a1, initial bit a2, extract a3 bits

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

ISHFT

IISHFT

JISHFT

KISHFT

Shift a1 logically by a2 bits; if a2 positive shift left, if a2 negative shift right

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

ISHFTC

IISHFTC

JISHFTC

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

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IOR

IIOR

JIOR

KIOR

Bitwise OR of a1, a2

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

IEOR

IIEOR

JIEOR

KIEOR

Bitwise exclusive OR of a1, a2

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

NOT

INOT

JNOT

KNOT

Bitwise complement 

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

IBSET

IIBSET

JIBSET

KIBSET

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

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

BTEST

BITEST

BJTEST

BKTEST

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

-

INTEGER*2

INTEGER*4

INTEGER*8

-

LOGICAL

LOGICAL

LOGICAL

IBCLR

IIBCLR

JIBCLR

KIBCLR

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

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

3.5.4 VMS Multiple Integer Types

The possibility of multiple integer types is not addressed by the Fortran Standard. The compiler copes with their existence by treating a specific INTEGER-to-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 3–12 VMS Integer Functions

Specific Names  

Function  

Argument Type  

Result Type  

IIABS

JIABS

KIABS

Absolute value 

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8

IMAX0

JMAX0

Maximum 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IMIN0

JMIN0

Minimum 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IIDIM

JIDIM

KIDIM

Positive difference 

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8

IMOD

JMOD

Remainder of a1/a2 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IISIGN

JISIGN

KISIGN

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

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8