**Syntax:**

**abs** *number* => *absolute-value*

**Arguments and Values:**

*number*---a *number*.

*absolute-value*---a non-negative *real*.

**Description:**

**abs** returns the absolute value of *number*.

If *number* is a *real*, the result is of the same *type* as *number*.

If *number* is a *complex*, the result is a positive *real* with the same magnitude as *number*. The result can be a *float* even if *number*'s components are *rationals* and an exact rational result would have been possible. Thus the result of `(abs #c(3 4))` can be either `5` or `5.0`, depending on the implementation.

**Examples:**

(abs 0) => 0 (abs 12/13) => 12/13 (abs -1.09) => 1.09 (abs #c(5.0 -5.0)) => 7.071068 (abs #c(5 5)) => 7.071068 (abs #c(3/5 4/5)) => 1 or approximately 1.0 (eql (abs -0.0) -0.0) => true

**Affected By:** None.

**Exceptional Situations:** None.

**See Also:**

Section 12.1.3.3 (Rule of Float Substitutability)

**Notes:**

If *number* is a *complex*, the result is equivalent to the following:

`(sqrt (+ (expt (realpart `*number*`) 2) (expt (imagpart `*number*`) 2)))`

An implementation should not use this formula directly for all *complexes* but should handle very large or very small components specially to avoid intermediate overflow or underflow.

The following X3J13 cleanup issues,