during a computation. The affine forms for those quantities can be represented by a single coefficient matrix A and a vector b, where element is the coefficient of symbol in the affine form of ; and is the independent term of that form. Then the joint range of the quantities — that is, the range of the point — is the image of the hypercube by the affine map from to defined by . The range of this affine map is a zonotope bounding the joint range of the quantities . Thus one could say that AA is a "zonotope arithmetic". Each step of AA usually entails adding one more row and one more column to the matrix A. Affine form simplification Since each AA operation generally creates a new symbol , the number of terms in an affine form may be proportional to the number of operations used to compute it. Thus, it is often necessary to apply "symbol condensation" steps, where two or more symbols are replaced by a smaller set of new symbols. Geometrically, this means replacing a complicated zonotope P by a simpler zonotope Q that encloses it. This operation can be done without destroying the first-order approximation property of the final zonotope. Implementation Matrix implementation Affine arithmetic can be implemented by a global array A and a global vector b, as described above. This approach is reasonably adequate when the set of quantities to be computed is small and known in advance. In this approach, the programmer must maintain externally the correspondence between the row indices and the quantities of interest. Global variables hold the number m of affine forms (rows) computed so far, and the number n of symbols (columns) used so far; these are automatically updated at each AA operation. Vector implementation Alternatively, each affine form can be implemented as a separate vector of coefficients. This approach is more convenient for programming, especially when there are calls to library procedures that may use AA internally. Each affine form can be given a mnemonic name; it can be allocated when needed, be passed to procedures, and reclaimed when no longer needed. The AA code then looks much closer to the original formula. A global variable holds the number n of symbols used so far. Sparse vector implementation On fairly long computations, the set of "live" quantities (that will be used in future computations) is