## DOUBLE PRECISION

A REAL variable or constant occupies one word of storage and this limits its accuracy. When greater accuracy is required, DOUBLE PRECISION variables and constants may be used. These occupy two words of storage and can store a greater number of significant digits.

### DOUBLE PRECISION constants

DOUBLE PRECISION constants are written in exponential form, but with the letter 'D' in place of 'E', e.g.

1D-7

14713D-3

12.7192D0

9.413D5

### DOUBLE PRECISION variables

DOUBLE PRECISION variables must be declared in a type specification of the form:

```	DOUBLE PRECISION variable_list
```

where variable_list is a list of variables, separated by commas.

### Input and output

DOUBLE PRECISION values can be used in list-directed input and output in the same way as REAL values. In formatted input and output, they may be used with the F and E format specifications and with a new format specification D, which has a similar form to the E specification, i.e.

Dw.d

In output, this specification prints a value in exponential form with a 'D' instead of an 'E'.

### Expressions

If both operands of an arithmetic operation are of type DOUBLE PRECISION, the result is also of type DOUBLE PRECISION. If one operand is of type REAL or INTEGER, the result is of type DOUBLE PRECISION, but this does not imply that the other operand is converted to this type.

### Functions

All the intrinsic functions in Figure 18 on page 45 which take REAL arguments also take DOUBLE PRECISION arguments and return DOUBLE PRECISION values.

## COMPLEX

FORTRAN provides for the representation of complex numbers using the type COMPLEX.

### COMPLEX constants

A COMPLEX constant is written as two REAL constants, separated by a comma and enclosed in parentheses. The first constant represents the real, and the second the imaginary part.

Example:

The complex number 3.0-i1.5, where = -1, is represented in FORTRAN as:

(3.0,-1.5).

### COMPLEX variables

COMPLEX variables must be declared in a COMPLEX type specification:

```	COMPLEX variable_list
```

### Input and output

In list-directed output, a COMPLEX value is printed as described under 'COMPLEX constants'. In list-directed input, two REAL values are read for each COMPLEX variable in the input list, corresponding to the real and imaginary parts in that order.

In formatted input and output, COMPLEX values are read or printed with two REAL format specifications, representing the real and imaginary parts in that order. It is good practice to use additional format specifiers to print the values in parentheses, or in the '' form. Both forms are illustrated in Figure 27.

```	PROGRAM COMPLX
COMPLEX A,B,C
C = A*B
WRITE(6,200)A,B,C
100	FORMAT(2F10.3)
200	FORMAT(1HO,'   A = (',F10.3,',',F10.3,')'/
1	1HO,'   B = (',F10.3,',',F10.3,')'/
2	1H0,' A*B =',F8.3,' + I',F8.3)
STOP
END
```

Results:

```A = (	12.500,	8.400)
B = (	6.500	9.600)
C =    0.610 + I 174.600
```

Figure 27: Complex numbers example

### COMPLEX expressions

An operation with two COMPLEX operands always gives a COMPLEX result. In mixed mode expressions, COMPLEX values may be used with REAL or INTEGER, but not with DOUBLE PRECISION values. The REAL or INTEGER value is converted to a COMPLEX value with an imaginary part of zero.

### COMPLEX functions

COMPLEX arguments may be used in generic functions such as ABS, EXP, LOG, SQRT, SIN and COS to obtain a COMPLEX value. The following functions are provided for use with COMPLEX values. (C, I, R and D represent COMPLEX, INTEGER, REAL and DOUBLE precision arguments respectively.)

```Name               Type        Definition

AIMAG(C)           REAL        Imaginary part

CMPLX(IRD1,IRD2)   COMPLEX     Complex number:
(IRD1,IRD2)

CONJG(C)           COMPLEX     Complex conjugate

REAL(C)            REAL        Real part

```

Figure 28: Some functions used with COMPLEX values

[Contents]  [Previous]  [Next]  [Home]

NDP77
http://www.ndp77.net
webmaster Massimo F. ARENA
webmaster@ndp77.net
2004:02:14:17:30:17