4

I am using Matlab daily. But I just realized that I even do not know what algorithm Matlab is using for calculating the exponential function $e^x$.

The power series expansion is obviously not appropriate for a big $|x|$.

S. Kohn
  • 283
  • 1
  • 5
  • Closely related: https://math.stackexchange.com/questions/61209/what-algorithm-is-used-by-computers-to-calculate-logarithms. "not appropriate for a big |x|" - it's solvable by computing it as $e^{\lfloor x \rfloor}\cdot e^{x - \lfloor x \rfloor}$. –  Mar 18 '21 at 23:08
  • Also related: https://cs.stackexchange.com/questions/27832/is-2x-faster-to-compute-than-expx/ – Pseudonym Mar 19 '21 at 04:16
  • 1
    Also perhaps an obvious point: Matlab may use its own proprietary algorithm. It's probably based on a standard one, though. – Pseudonym Mar 19 '21 at 04:44

1 Answers1

4

Let $x = n \log_e(2) + x'$, then $e^x = 2^n \cdot e^{x'}$. You can pick n so that $- 0.5\cdot \log_e(2) ≤ x' ≤ +0.5 \cdot \log_e(2)$.

$e^{x'}$ is easy to calculate because $x'$ is small, and $2^n$ can be calculated easiest by producing the bit represenation of $2^n$ as a floating point number.

That's the principle. You'll want to take care that x' is calculated with the highest possible precision, and that $e^{x'}$ is also calculated with the highest precision. And you want to take care if x and x+eps use different values n, that $e^x$ and $e^{x+eps}$ fit together nicely; you wouldn't want a sitation where $e^{x+eps} < e^x$ with eps > 0.

gnasher729
  • 29,996
  • 34
  • 54