Una opción mucho mejor que la respuesta de Andrei es utilizar la identidad $\exp(x) = \exp(x·2^{-k})^{2^k}$ para la elección juiciosa de $k$ y utilizar la serie de Taylor para aproximar $\exp(x·2^{-k})$ con suficiente precisión.
Supongamos que queremos calcular $\exp(x)$ utilizando la identidad anterior para $p$ -bit de precisión, lo que significa un error relativo de $2^{-p}$ . Realizaremos cada operación aritmética con $q$ -bit de precisión, donde $q=p+k+m$ y $k,m$ son enteros positivos que determinaremos más adelante. Para calcular $\exp(x·2^{-k})^{2^k}$ con error relativo $2^{-p}$ necesitamos calcular $\exp(x·2^{-k})$ con un error relativo como máximo de alrededor de $r_0 := 2^{-p-k-1}$ porque en cada cuadratura el error $r_n$ cambia a alrededor de $r_{n+1} ≤ 2r_n+2^{-q}$ , dando $r_k+2^{-q} ≤ (r_0+2^{-q})·2^k$ y por lo tanto $r_n ≤ 2^{-p}$ .
Por lo tanto, necesitamos utilizar suficientes términos de la expansión de Taylor para $\exp(x·2^{-k})$ para que nuestro error sea como máximo $|\exp(x·2^{-k})|·2^{-p-k-1}$ . Si $k = \max(0,\log_2 |x|) + c$ para algún número entero positivo $c$ entonces $|x·2^{-k}|<2^{-c}$ y así $|\exp(x·2^{-k})| > \exp(-1/2) > 1/2$ por lo que basta con que nuestro error sea menor que $2^{-p-k-1}/2$ . Asignamos este margen de error a dos mitades, una para el resto de Taylor y otra para el error en nuestras operaciones aritméticas. Dejando que $z := x·2^{-k}$ tenemos $\sum_{i=n}^∞ |z^i/i!| ≤ |z|^n/n! · \sum_{i=0}^∞ (|z|/n)^i ≤ |z|^n/n! ≤ 2^{-c·n}$ para cualquier $n ≥ 1$ por lo que sólo tenemos que calcular $\sum_{i=0}^{n-1} z^i/i!$ donde $n ≥ 1$ y $2^{-c·n} < 2^{-p-k-1}/4$ , ambos se mantienen si $c·n ≥ p+k+3$ . Cada término requiere una suma, una multiplicación y una división, a través de la identidad trivial $z^{n+1}/(n+1)! = z^n/n! · z/n$ y, por tanto, si empezamos con $z$ en $q$ -de precisión, entonces el error relativo acumulado es, como máximo, de unos $2n·2^{-q}$ ya que cada " $· z/n$ "introduce un factor de error adicional de aproximadamente $(1+2^{-q})^2$ . Como queremos $2n·2^{-q} < 2^{-p-k-1}/4$ , o lo que es lo mismo $n < 2^{m-4}$ es suficiente con tener $m = \log_2 n + 4$ .
Incluso si utilizamos la multiplicación de los libros de texto, es decir, que la multiplicación en $q$ -La precisión de los bits se lleva $O(q^2)$ tiempo, el método anterior produce un algoritmo relativamente eficiente al elegir $k$ adecuadamente. La fase de Taylor toma $O(n·q^2)$ tiempo, y la fase de exponenciación tarda $O(k·q^2)$ tiempo. Si elegimos $c = \sqrt{p}$ podemos elegir $n = \sqrt{p}+k$ que dará $k,n ∈ O( \sqrt{p} + \log |x| )$ y $q ∈ O( p + \log |x| )$ . Así, para $x$ dentro de un dominio acotado, todo el algoritmo tarda $O(p^{2.5})$ tiempo.
Lo anterior se basa en técnicas puramente elementales. Un análisis más cuidadoso utilizando las mismas técnicas arroja un algoritmo aún mejor (véase Evaluación eficiente de funciones elementales de precisión múltiple ).
Hay formas de hacerlo mucho mejor, que se reducen básicamente a utilizar una iteración AM-GM para calcular $\ln$ y, a continuación, utilizando la inversión de Newton-Raphson para obtener $\exp$ (ver La media aritmética-geométrica y el cálculo rápido de funciones elementales ).