Many of the math functions are defined only over a subset of the real or
complex numbers. Even if they are mathematically defined, their result
may be larger or smaller than the range representable by their return
type. These are known as domain errors, overflows, and
underflows, respectively. Math functions do several things when
one of these errors occurs. In this manual we will refer to the
complete response as signalling a domain error, overflow, or
underflow.

When a math function suffers a domain error, it raises the invalid
exception and returns NaN. It also sets errno to EDOM;
this is for compatibility with old systems that do not support IEEE 754 exception handling. Likewise, when overflow occurs, math
functions raise the overflow exception and return ∞ or
-∞ as appropriate. They also set errno to
ERANGE. When underflow occurs, the underflow exception is
raised, and zero (appropriately signed) is returned. errno may be
set to ERANGE, but this is not guaranteed.

Some of the math functions are defined mathematically to result in a
complex value over parts of their domains. The most familiar example of
this is taking the square root of a negative number. The complex math
functions, such as csqrt, will return the appropriate complex value
in this case. The real-valued functions, such as sqrt, will
signal a domain error.

Some older hardware does not support infinities. On that hardware,
overflows instead return a particular very large number (usually the
largest representable number). math.h defines macros you can use
to test for overflow on both old and new hardware.

— Macro: double HUGE_VAL

— Macro: float HUGE_VALF

— Macro: long double HUGE_VALL

An expression representing a particular very large number. On machines
that use IEEE 754 floating point format, HUGE_VAL is infinity.
On other machines, it's typically the largest positive number that can
be represented.

Mathematical functions return the appropriately typed version of
HUGE_VAL or −HUGE_VAL when the result is too large
to be represented.

Published under the terms of the GNU General Public License