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.