   Declared Numerics ## Declared Numerics

The `:gbbopen-tools` module contains a set of declared-numeric and pseudo probability operators that provide convenient shorthands for declaring `fixnum`, `short-float`, `single-float`, `double-float`, `long-float`, and `pseudo-probability` numeric operations. If the feature :full-safety is present at compile time, these operators do not make their `fixnum`, `single-float`, `double-float`, and `long-float` declarations.

The names of the declared-numeric and pseudo-probability operators include these “type-indicator” characters:

 Characters Declared Type `&` `fixnum` `\$&` `short-float` `\$` `single-float` `\$\$` `double-float` `\$\$\$` `long-float` `%` `pseudo-probability`

Thus, the declared-numeric `+` operators are:

 `+&` `fixnum` addition `+\$&` `short-float` addition `+\$` `single-float` addition `+\$\$` `double-float` addition `+\$\$\$` `long-float` addition `+%` `pseudo-probability` addition

Most Common Lisp implementations map double-float numbers to the 64-bit IEEE 754 double format and single-float numbers to the 32-bit IEEE 754 single format. The four types of floating-point declared numeric operators (`short-float`, `single-float`, `double-float`, and `long-float`) are always defined, even if the Common Lisp implementation provides fewer distinct internal `float` representations. The features `:has-short-float`, `:has-single-float`, `:has-double-float`, and `:has-long-float` are added when the implementation provides that distinct internal `float` representation. (The feature `:has-single-float` is always defined.)

The following two features related to `fixnum` capabilities are defined when appropriate: `:fixnum-size-below-29` and `:fixnum-size-supports-unsigned-byte-32`.

Some examples of declared-numeric operators include:

```  (& x) ==> (the fixnum x)
(+& x y) ==> (the fixnum (+ (the fixnum x) (the fixnum y))
(>\$ a b) ==> (> (the single-float a) (the single-float b))
(minusp\$\$ value) ==> (minusp (the double-float value))
(truncate& x y)) ==> (the (values fixnum fixnum) (truncate (& x) (& y)))
```
The complete set of operators for each declared numeric type are listed in the following sections. (Pseudo probability operators are listed in the Pseudo Probabilities section of the manual.)

The GBBopen Project   Declared Numerics 