# expm1¶

expm1(x: array, /) array

Calculates an implementation-dependent approximation to `exp(x)-1` for each element `x_i` of the input array `x`.

Note

The purpose of this function is to calculate `exp(x)-1.0` more accurately when `x` is close to zero. Accordingly, conforming implementations should avoid implementing this function as simply `exp(x)-1.0`. See FDLIBM, or some other IEEE 754-2019 compliant mathematical library, for a potential reference implementation.

Note

For complex floating-point operands, `expm1(conj(x))` must equal `conj(expm1(x))`.

Note

The exponential function is an entire function in the complex plane and has no branch cuts.

Parameters:

x (array) – input array. Should have a floating-point data type.

Returns:

out (array) – an array containing the evaluated result for each element in `x`. The returned array must have a floating-point data type determined by Type Promotion Rules.

Notes

Special cases

For real-valued floating-point operands,

• If `x_i` is `NaN`, the result is `NaN`.

• If `x_i` is `+0`, the result is `+0`.

• If `x_i` is `-0`, the result is `-0`.

• If `x_i` is `+infinity`, the result is `+infinity`.

• If `x_i` is `-infinity`, the result is `-1`.

For complex floating-point operands, let `a = real(x_i)`, `b = imag(x_i)`, and

• If `a` is either `+0` or `-0` and `b` is `+0`, the result is `0 + 0j`.

• If `a` is a finite number and `b` is `+infinity`, the result is `NaN + NaN j`.

• If `a` is a finite number and `b` is `NaN`, the result is `NaN + NaN j`.

• If `a` is `+infinity` and `b` is `+0`, the result is `+infinity + 0j`.

• If `a` is `-infinity` and `b` is a finite number, the result is `+0 * cis(b) - 1.0`.

• If `a` is `+infinity` and `b` is a nonzero finite number, the result is `+infinity * cis(b) - 1.0`.

• If `a` is `-infinity` and `b` is `+infinity`, the result is `-1 + 0j` (sign of imaginary component is unspecified).

• If `a` is `+infinity` and `b` is `+infinity`, the result is `infinity + NaN j` (sign of real component is unspecified).

• If `a` is `-infinity` and `b` is `NaN`, the result is `-1 + 0j` (sign of imaginary component is unspecified).

• If `a` is `+infinity` and `b` is `NaN`, the result is `infinity + NaN j` (sign of real component is unspecified).

• If `a` is `NaN` and `b` is `+0`, the result is `NaN + 0j`.

• If `a` is `NaN` and `b` is not equal to `0`, the result is `NaN + NaN j`.

• If `a` is `NaN` and `b` is `NaN`, the result is `NaN + NaN j`.

where `cis(v)` is `cos(v) + sin(v)*1j`.

Changed in version 2022.12: Added complex data type support.