Namespaces
Variants
Views
Actions

expm1

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
Exponential functions
(C99)
expm1
(C99)
(C99)
(C99)
Power functions
(C99)
(C99)
Trigonometric and hyperbolic functions
(C99)
(C99)
(C99)
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Nearest integer floating point operations
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
Floating point manipulation functions
(C99)(C99)
(C99)
(C99)
Classification
(C99)
(C99)
(C99)
Macro constants
 
Defined in header <math.h>
float       expm1f( float arg );
(since C99)
double      expm1( double arg );
(since C99)
long double expm1l( long double arg );
(since C99)

Computes the e (Euler's number, 2.7182818) raised to the given power arg, minus 1. This function is more accurate than the expression exp(arg)-1 if arg is close to zero.

Contents

[edit] Parameters

arg - floating point value

[edit] Return value

earg
-1

If the result is too large for the underlying type, range error occurs and HUGE_VAL is returned.

[edit] Example

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <string.h>
 
int main()
{
    /* Euler's number:  e = 2.718282 */
    printf("expm1(1.0)       = %f\n", expm1(1.0));
    printf("log1p(1.718282)  = %f\n", log1p(1.718282));    /* inverse of expm1 */
    printf("expm1(+0)        = %f\n", expm1(+0));
    printf("expm1(-0)        = %f\n", expm1(-0));
    printf("expm1(+INFINITY) = %f\n", expm1(+INFINITY));
    printf("expm1(-INFINITY) = %f\n", expm1(-INFINITY));
    printf("expm1(NAN)       = %f\n", expm1(NAN));
    printf("\n");
 
    /* range error */
    errno = 0;
    printf("expm1(710.0)     = %f\n", expm1(710.0));
    printf("%s\n",strerror(errno));
    printf("\n");
 
    /* Expect expm1(x)to be more accurate than exp(x)-1 for small magnitude x. */
    printf("exp(1e-16)-1     = %g\n",  exp(1e-16)-1);     // 0
    printf("expm1(1e-16)     = %g\n",  expm1(1e-16));     // 1e-16
 
    return 0;
}

Possible output:

expm1(1.0)       = 1.718282
log1p(1.718282)  = 1.000000
expm1(+0)        = 0.000000
expm1(-0)        = 0.000000
expm1(+INFINITY) = inf
expm1(-INFINITY) = -1.000000
expm1(NAN)       = nan
 
expm1(710.0)     = inf
Numerical result out of range
 
exp(1e-16)-1     = 0
expm1(1e-16)     = 1e-16

[edit] See also

returns e raised to the given power (ex)
(function) [edit]
(C99)
returns 2 raised to the given power (2x)
(function) [edit]