Como se trata de CS y no de Stackoverflow, voy a suponer que está haciendo una pregunta sobre el análisis numérico y (para simplificar) el punto flotante IEEE-754 en particular. En ese caso, la respuesta a su pregunta depende en parte de lo que quiere decir con "más fácil", y en parte de los detalles del sistema.
No conozco ninguna CPU moderna que tenga una instrucción integrada que haga exactamente lo que esperaría, ya sea para la operación (que en adelante llamaremos , su nombre habitual en C) o ( ). Ambos se implementan utilizando funciones de biblioteca.exexp
2xexp2
Como es el caso con todos los métodos numéricos para operaciones trascendentales, hay algunos casos especiales a considerar:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Sin embargo, hay otra cosa que hace que el problema sea un poco menos complicado: el dominio útil es bastante pequeño. Para binary32, se exp(x)
desborda si o menos, y se desborda si o menos. Inusualmente para operaciones trascendentales, también podemos ignorar el caso subnormal, ya que es indistinguible de si es subnormal. Todo lo anterior también es cierto , excepto que el dominio es ligeramente diferente.x<−104x>88.7exp(x)
1.0
x
exp2
Su intuición es correcta en que la mayoría de las implementaciones calculan . Sin embargo, el costo de esa multiplicación por es trivial en comparación con el resto de la informática . Un método típico utiliza una tabla calculada previamente con elementos :ex=2x/ln21ln2exp2
K
exp2(x)=2n×T[j]×P(y)
donde es la parte entera de , la tabla contiene valores de para todo en el rango , y es una aproximación polinómica a (cuarto es suficiente para binario32 ) en el rango . La parte es barata, ya que solo está manipulando el exponente. es una tabla de búsqueda. Por lo tanto, es probable que sea la parte costosa de la operación.nxT2j/Kj[0,K)P2x2nTP[0,1K)2nTP
Debo señalar para completar que las FPU Intel x86 incluyen una instrucción llamada f2xm1
, que calcula para en el rango . Sin embargo, en una CPU moderna, esta es una instrucción bastante costosa y no canalizada, y no se recomienda utilizarla. Como señala correctamente la Sección 3.8.5 del Manual de referencia de Intel Optimization :x [ - 1 , 1 ]2x−1x[−1,1]
Aunque x87 admite instrucciones trascendentales, la implementación de la biblioteca de software de la función trascendental puede ser más rápida en muchos casos.
Editar: Se ha señalado en los comentarios que debería explicar algo de la nueva terminología utilizada en IEEE 754-2008. Parte del lenguaje ha cambiado desde 1985 y 1987, y la mayoría de las personas están mucho más familiarizadas con la antigua jerga.
Los términos "binary32" y "binary64" son los nuevos nombres para los números de coma flotante binarios de 32 y 64 bits, que el estándar anterior llamaba "single" y "double" respectivamente.
El término "número subnormal" reemplaza el término anterior "número denormal" o "número desnormalizado" .