# expm1

## NAME



           expm1, expm1f, expm1l - exponential minus 1
    


## LIBRARY



           Math library (_libm_ , _-lm_)
    


## SYNOPSIS



           **#include <math.h>**
    
           **double expm1(double** _x_**);**
           **float expm1f(float** _x_**);**
           **long double expm1l(long double** _x_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **expm1**():
               _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
                   || _XOPEN_SOURCE >= 500
                   || /* Since glibc 2.19: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
    
           **expm1f**(), **expm1l**():
               _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
                   || /* Since glibc 2.19: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
    


## DESCRIPTION



           These functions return a value equivalent to
    
               exp(x) - 1
    
           The result is computed in a way that is accurate even if the value
           of _x_ is near zero—a case where _exp(x) - 1_ would be inaccurate due
           to subtraction of two numbers that are nearly equal.
    


## RETURN VALUE



           On success, these functions return _exp(x) - 1_.
    
           If _x_ is a NaN, a NaN is returned.
    
           If _x_ is +0 (-0), +0 (-0) is returned.
    
           If _x_ is positive infinity, positive infinity is returned.
    
           If _x_ is negative infinity, -1 is returned.
    
           If the result overflows, a range error occurs, and the functions
           return -**HUGE_VAL** , -**HUGE_VALF** , or -**HUGE_VALL** , respectively.
    


## ERRORS



           See math_error(7) for information on how to determine whether an
           error has occurred when calling these functions.
    
           The following errors can occur:
    
           Range error, overflow
                  _errno_ is set to **ERANGE**(but see BUGS).  An overflow
                  floating-point exception (**FE_OVERFLOW**) is raised.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **expm1**(), **expm1f**(), **expm1l**()          │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           C11, POSIX.1-2008.
    


## BUGS



           Before glibc 2.17, on certain architectures (e.g., x86, but not
           x86_64) **expm1**() raised a bogus underflow floating-point exception
           for some large negative _x_ values (where the function result
           approaches -1).
    
           Before approximately glibc 2.11, **expm1**() raised a bogus invalid
           floating-point exception in addition to the expected overflow
           exception, and returned a NaN instead of positive infinity, for
           some large positive _x_ values.
    
           Before glibc 2.11, the glibc implementation did not set _errno_ to
           **ERANGE** when a range error occurred.
    


* * *