'\" t .\" Copyright 1995 Jim Van Zandt .\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified 2002-07-27 Walter Harms .\" (walter.harms@informatik.uni-oldenburg.de) .\" .TH expm1 3 2023-03-30 "Linux man-pages 6.04" .SH NAME expm1, expm1f, expm1l \- exponential minus 1 .SH LIBRARY Math library .RI ( libm ", " \-lm ) .SH SYNOPSIS .nf .B #include .PP .BI "double expm1(double " x ); .BI "float expm1f(float " x ); .BI "long double expm1l(long double " x ); .PP .fi .RS -4 Feature Test Macro Requirements for glibc (see .BR feature_test_macros (7)): .RE .PP .BR expm1 (): .nf _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 500 .\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .PP .BR expm1f (), .BR expm1l (): .nf _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH DESCRIPTION These functions return a value equivalent to .PP .nf exp(x) \- 1 .fi .PP The result is computed in a way that is accurate even if the value of .I x is near zero\[em]a case where .I "exp(x) \- 1" would be inaccurate due to subtraction of two numbers that are nearly equal. .SH RETURN VALUE On success, these functions return .IR "exp(x)\ \-\ 1" . .PP If .I x is a NaN, a NaN is returned. .PP If .I x is +0 (\-0), +0 (\-0) is returned. .PP If .I x is positive infinity, positive infinity is returned. .PP If .I x is negative infinity, \-1 is returned. .PP If the result overflows, a range error occurs, and the functions return .RB \- HUGE_VAL , .RB \- HUGE_VALF , or .RB \- HUGE_VALL , respectively. .SH ERRORS See .BR math_error (7) for information on how to determine whether an error has occurred when calling these functions. .PP The following errors can occur: .TP Range error, overflow .I errno is set to .B ERANGE (but see BUGS). An overflow floating-point exception .RB ( FE_OVERFLOW ) is raised. .\" .\" POSIX.1 specifies an optional range error (underflow) if .\" x is subnormal. glibc does not implement this. .SH ATTRIBUTES For an explanation of the terms used in this section, see .BR attributes (7). .ad l .nh .TS allbox; lbx lb lb l l l. Interface Attribute Value T{ .BR expm1 (), .BR expm1f (), .BR expm1l () T} Thread safety MT-Safe .TE .hy .ad .sp 1 .SH STANDARDS C11, POSIX.1-2008. .SH HISTORY C99, POSIX.1-2001. BSD. .SH BUGS Before glibc 2.17, .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6778 on certain architectures (e.g., x86, but not x86_64) .BR expm1 () raised a bogus underflow floating-point exception for some large negative .I x values (where the function result approaches \-1). .PP Before approximately glibc 2.11, .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6814 .\" e.g., expm1(1e5) through expm1(1.00199970127e5), .\" but not expm1(1.00199970128e5) and beyond. .BR 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 .I x values. .PP Before glibc 2.11, .\" It looks like the fix was in glibc 2.11, or possibly glibc 2.12. .\" I have no test system for glibc 2.11, but glibc 2.12 passes. .\" From the source (sysdeps/i386/fpu/s_expm1.S) it looks .\" like the changes were in glibc 2.11. the glibc implementation did not set .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6788 .I errno to .B ERANGE when a range error occurred. .SH SEE ALSO .BR exp (3), .BR log (3), .BR log1p (3)