.BG D
.FN .Machine
.TL
Machine Arithmetic Constants
.PP
The object `.Machine' is a list with various
numeric components whose names
are made up of the characters `single.' or `double.' followed
by the name of a particular parameter of machine arithmetic (described
below).
For example, `single.digits' is the number of base `single.base' digits
in the floating point representation of a single-precision number.
In addition, the component `integer.max' is the largest integer.
.PP
.IP `base'
the base for the floating-point representation.
.IP `digits'
the number of significant digits in the given base.
.IP `rounding' 
the rounding action:
0 if floating-point addition chops;
1 if floating-point addition rounds, but not in the IEEE style;
2 if floating-point addition rounds in the IEEE style;
3 if floating-point addition chops, and there is partial underflow;
4 if floating-point addition rounds, but not in the IEEE style, and there is partial underflow;
5 if floating-point addition rounds in the IEEE style, and there is partial underflow.
.IP `guard'
The number of guard digits for multiplication with truncating arithmetic.
It is 0 if floating-point arithmetic rounds, or if it
truncates and only `digits' base `base' digits
participate in the post-normalization shift of the 
floating-point significand in multiplication;
1 if floating-point arithmetic truncates and more
than `digits' base `base' digits participate in the
post-normalization shift of the floating-point significand in multiplication.
.IP `eps'
the largest negative integer such that `1+base^eps != 1',
except that `eps' is bounded below by `-(digits+3)'.
.IP `neg.eps'
the largest negative integer such that `1-base^neg.eps != 1',
except that `neg.eps' is bounded below by `-(digits+3)'.
.IP `exponent'
the number of bits (decimal places if `base' == 10)
reserved for the representation of the exponent
(including the bias or sign) of a floating-point number.
.IP `min.exp'
the largest in magnitude negative integer such that
`base^min.exp' is positive and normalized.
.IP `max.exp'
the smallest positive power of `base' that overflows
.IP `ulp.digits'
the smallest positive floating-point number such
that `1+ulp.digits != 1'.
In particular, if either
`base == 2' or `rounding == 0', `ulp.digits' is `base^eps'.
Otherwise, `ulp.digits' is `base^eps/2'.
.IP `neg.ulp.digits'
A small positive floating-point number such that
`1-neg.ulp.digits != 1'.
In particular, if `base == 2' or `rounding == 0',
`neg.ulp.digits' is `base^neg.eps'.
Otherwise, `neg.ulp.digits' is `(base^neg.eps)/2'.
Because `neg.eps' is bounded below by `-(digits+3)',
`neg.ulp.digits' may not be the smallest number that can alter 1 by subtraction.
.IP `xmin'
the smallest non-vanishing normalized floating-point
power of the radix, i.e., `xmin' is `base^min.exp'.
.IP `xmax'
the largest finite floating-point number.
In particular `xmax' is `(1-neg.ulp.digits)*digits^max.exp'.
Note - on some machines `xmax' will be only the
second, or perhaps third, largest number, being
too small by 1 or 2 units in the last digit of the significand.
.SH SOURCE
Adapted from
W. J. Cody,
"MACHAR: A subroutine to dynamically determine machine parameters,"
.ul
TOMS (14), 1988.
.EX
\&.Machine$integer.max  # largest integer
.KW dataset
.WR
