If every element in an arithmetic expression is of the same data type, the value produced by the expression is also of that data type. If elements of different data types are combined in an expression, the evaluation of that expression and the data type of the resulting value depend on the ranking associated with each data type. The following table shows the ranking assigned to each data type; the lowest ranking is 1:
Data Type | VAX Ranking | Alpha Ranking |
---|---|---|
BYTE | 1 | 1 |
LOGICAL*1 | 1 | 1 |
LOGICAL*2 | 2 | 2 |
LOGICAL (LOGICAL*4) | 3 | 3 |
LOGICAL*8[1] | None | 4 |
INTEGER*1 | 1 | 5 |
INTEGER*2 | 4 | 6 |
INTEGER (INTEGER*4) | 5 | 7 |
INTEGER*8[1] | None | 8 |
REAL (REAL*4) | 6 | 9 |
DOUBLE PRECISION (REAL*8) | 7 | 10 |
REAL*16 | 8 | 11 |
COMPLEX (COMPLEX*8) | 9 | 12 |
DOUBLE COMPLEX (COMPLEX*16) | 10 | 13 |
[1] Alpha only |
The data type of the value produced by an operation on two arithmetic elements of different data types is the data type of the highest-ranking element in the operation. For example, the data type of the value resulting from an operation on an integer and a real element is real. However, an operation involving a COMPLEX data type and either a DOUBLE PRECISION or REAL*16 data type produces a DOUBLE COMPLEX result.
The data type of an expression is the data type of the result of the last operation in that expression and is determined according to the following conventions:
1/4 + 1/4 + 1/4 +
1/4
is 0, not 1.
Y = (I/J)*X
, an integer division operation is
performed on I and J, and a real multiplication is performed
on that result and X.
0.3333333
is converted to
approximately 0.3333333134651184D0
. It is not
converted to either 0.3333333000000000D0
or
0.3333333333333333D0
.
These rules also generally apply to arithmetic operations in
which one of the operands is a constant. However, if a real
or complex constant is used in a higher-precision expression,
additional precision will be retained for the constant. The
effect is as if a DOUBLE PRECISION (REAL*8) or
REAL*16 representation of the constant
is given. For example, the expression 1.0D0 +
0.3333333
is treated as if it is 1.0D0 +
0.3333333000000000D0
.