En el espíritu de arbautjc comentario, dado que los operadores que usted tiene, usted puede asegurarse siempre de que la magnitud del argumento es menor que $1$. Además si $x<0$, usted puede hacer como vonbrand sugerido y el uso del índice de leyes para ayudar a sus cálculos. Esto probablemente va a ser mucho más lento que la simple utilización de la exp(..)
comando integrado.
El siguiente es el código de MATLAB, pero se debe trabajar en la Octava así.
function y = myexp(x)
% determine if x is negative or not
if (x < 0)
isneg = true;
x = -x;
else
isneg = false;
end
% scale the input variable to have magnitude less than 1
scale = 1; % initialise the scale argument
factor = 16; % set a factor which will be used to increment the scale
while x > 1
x = x / factor;
scale = scale * factor;
end
% evaluate exp(x) with 0<x<1
y=0; t=1; k=1; % initialise parameters
tol = 1e-6; % convergence tolerance
while abs(t)>tol
y=y+t;
t=t*(x/k);
k=k+1;
end
% unscale the result
y=y^scale;
% check if the input was negative and reciprocate the result if needed
if isneg
y = 1/y;
end
end
Algunos de los resultados que se muestran a continuación. V
es valor y T
es el tiempo de ejecución. tol
estaba a 1e-6
.
x=-100
exp V: 3.720076e-44 T: 0.000004
myexp V: 3.720262e-44 T: 0.000059
x=-10
exp V: 4.539993e-05 T: 0.000002
myexp V: 4.540017e-05 T: 0.000021
x=-5
exp V: 6.737947e-03 T: 0.000002
myexp V: 6.737952e-03 T: 0.000016
x=-4
exp V: 1.831564e-02 T: 0.000002
myexp V: 1.831572e-02 T: 0.000016
x=-3
exp V: 4.978707e-02 T: 0.000002
myexp V: 4.978711e-02 T: 0.000016
x=-2
exp V: 1.353353e-01 T: 0.000002
myexp V: 1.353358e-01 T: 0.000016
x=-1
exp V: 3.678794e-01 T: 0.000002
myexp V: 3.678795e-01 T: 0.000015
x=0
exp V: 1.000000e+00 T: 0.000002
myexp V: 1.000000e+00 T: 0.000016
x=1
exp V: 2.718282e+00 T: 0.000002
myexp V: 2.718282e+00 T: 0.000016
x=2
exp V: 7.389056e+00 T: 0.000002
myexp V: 7.389029e+00 T: 0.000016
x=3
exp V: 2.008554e+01 T: 0.000002
myexp V: 2.008552e+01 T: 0.000016
x=4
exp V: 5.459815e+01 T: 0.000002
myexp V: 5.459791e+01 T: 0.000017
x=5
exp V: 1.484132e+02 T: 0.000002
myexp V: 1.484131e+02 T: 0.000016
x=10
exp V: 2.202647e+04 T: 0.000002
myexp V: 2.202635e+04 T: 0.000017
x=100
exp V: 2.688117e+43 T: 0.000002
myexp V: 2.687982e+43 T: 0.000016