#### Arithmetic Expressions

Arithmetic evaluation and testing is performed by predicates that take
arithmetic expressions as arguments. An arithmetic expression
is a term built from numbers, variables, and functors that represent
arithmetic functions. These expressions are evaluated to yield an
arithmetic result, which may be either an integer or a float; the type
is determined by the rules described below.

At the time of evaluation, each variable in an arithmetic expression must
be bound to a number or another arithmetic expression. If the expression
is not sufficiently bound or if it is bound to terms of the wrong type
then Prolog raises exceptions of the appropriate type (see ref-ere-hex). Some arithmetic operations can also detect overflows.
They also raise exceptions. e.g. Division by zero results in a domain
error being raised.

Only certain functors are permitted in arithmetic expressions. These
are listed below, together with a description of their arithmetic
meanings. For the rest of the section, `X` and `Y` are
considered to be arithmetic expressions.