A longsety is a sequence of zero or more long
bold
tags. The term follows the fashion of the Revised Report, where the
suffix -ety
means “or empty”.
The Algol 68 modes int
, real
, compl
,
bits
and bytes
can be prefixed with any number
of long
tag words. The effect of each long
is
to double the precision of the mode.
At some point, however, a “saturation” point is reached where the
addition of extra long
has no further effect on the mode.
Where that point resides is up to the particular implementation.
For example, if the precision of int
is four bytes or
32-bit, the precision of long int
is 64-bit, and the
precision of long long int
is 128-bit.
A longsety can also be used in an integral denotation in order to specify the mode of the denotation. For example in the formula:
long 20 + long 30
The denotations long 20
and long 30
are of mode
long int
, which determines its precision. The reason why
it is important to specify the mode in the denotations is that in
Algol 68 it is not legal to widen to a mode having a different
precision, so the following identity declaration is not legal:
long long int number = 100; # BAD #
This is because the mode of the denotation 100
is int
whereas the expected mode is long long int
. This
can be achieved by a longsety in the denotation:
long long int number = long long 100;
Note that some Algol 68 implementations allow to widen to modes having a different precision.
Simplified [RR 1.2.1.E]:
E) LONGSETY :: long LONGSETY ; EMPTY.