# **[](https://en.cppreference.com/w/c/header/math)** provides standard math functions: trigonometric, exponential, logarithmic, rounding, and IEEE 754 utilities (`isnan`, `isinf`). Append `f` for float or `l` for long double versions. Compile with `-lm` to link the math library. ## Example This example demonstrates basic math functions and special-value checking. ```c // compile: gcc -o mathexample mathexample.c -lm // run: ./mathexample // description: math functions and special value detection #include #include int main() { printf("sqrt(2) = %.6f\n", sqrt(2.0)); printf("sin(pi/4) = %.6f\n", sin(M_PI / 4)); printf("exp(1) = %.6f\n", exp(1.0)); printf("log(10) = %.6f\n", log(10.0)); double nan_val = 0.0 / 0.0; double inf_val = 1.0 / 0.0; printf("isnan(nan): %d, isinf(inf): %d\n", isnan(nan_val), isinf(inf_val)); return 0; } ``` ## Common functions **Root and power**: - `sqrt(x)`: square root - `cbrt(x)`: cube root - `pow(x, y)`: x to power y - `hypot(x, y)`: sqrt(x² + y²) without overflow **Exponential and logarithm**: - `exp(x)`, `exp2(x)`, `exp10(x)`: e^x, 2^x, 10^x - `expm1(x)`: e^x - 1 (accurate for small x) - `log(x)`, `log2(x)`, `log10(x)`: natural, base-2, base-10 logarithm - `log1p(x)`: log(1 + x) (accurate for small x) **Trigonometric** (argument in radians): - `sin(x)`, `cos(x)`, `tan(x)` - `asin(x)`, `acos(x)`, `atan(x)`: inverse (range: -π/2 to π/2) - `atan2(y, x)`: inverse with quadrant correction **Hyperbolic**: - `sinh(x)`, `cosh(x)`, `tanh(x)` - `asinh(x)`, `acosh(x)`, `atanh(x)`: inverse **Rounding**: - `ceil(x)`: round up (smallest integer ≥ x) - `floor(x)`: round down (largest integer ≤ x) - `round(x)`: round to nearest integer (0.5 rounds away from zero) - `trunc(x)`: truncate toward zero - `nearbyint(x)`: round to nearest using current rounding mode - `rint(x)`: similar to nearbyint but may raise exception **Absolute value and remainder**: - `fabs(x)`: absolute value (floating-point) - `fmod(x, y)`: floating-point remainder (sign of x) - `remainder(x, y)`: IEEE remainder (nearest multiple of y) - `drem(x, y)`: alias for remainder **Minimum and maximum**: - `fmin(x, y)`: minimum (NaN-safe: returns non-NaN if possible) - `fmax(x, y)`: maximum **Special value checks**: - `isnan(x)`: check if NaN - `isinf(x)`: check if infinite - `isfinite(x)`: check if finite (not NaN or inf) - `isnormal(x)`: check if normal (not zero, subnormal, inf, or NaN) - `signbit(x)`: check sign bit **Constants** (non-standard; require `-D_USE_MATH_DEFINES` or `-D_GNU_SOURCE`): - `M_PI`: π - `M_E`: e - `M_LN2`, `M_LN10`: ln(2), ln(10) - `M_LOG2E`, `M_LOG10E`: log₂(e), log₁₀(e) - `M_SQRT2`, `M_SQRT1_2`: √2, 1/√2