Thread: fast exponential function algorithm

1. No Profile Picture
Junior Member
Devshed Newbie (0 - 499 posts)

Join Date
Apr 2003
Posts
2
Rep Power
0

fast exponential function algorithm

Hi !

I am trying to write a program which calculates an exponential function as fast as possible on a PC
I tried a polynom approximation. It is the fastest algorithm i have
got and it has an accurracy of 10 digits.
take a look!

---------------------------------------------------------------------

const float umrechnungf=0.434294481903251f;

const float z00=1.00000000000000f;
const float z11=1.258925411794167f;
const float z22=1.584893192461113f;
const float z33=1.995262314968879f;
const float z44=2.511886431509580f;
const float z55=3.162277660168379f;
const float z66=3.981071705534972f;
const float z77=5.011872336272723f;
const float z88=6.309573444801932f;
const float z99=7.943282347242815f;
const float Kette24Lf=10.423067565678043f;
const float Kette12Lf=5.211533782839021f;
const float Kette50LLf=9.430584850580696f;
const float Kette10LLf=1.886116970116139f;

float Jacks_Exp(float Wert)

{

W=fabs(Wert*umrechnungf);

g=int(W);
z=int((W-g)*10);
h=W-(float(g)+float(z)/10);

switch (z)
{
case 0 : binaer=z00;break;
case 1 : binaer=z11;break;
case 2 : binaer=z22;break;
case 3 : binaer=z33;break;
case 4 : binaer=z44;break;
case 5 : binaer=z55;break;
case 6 : binaer=z66;break;
case 7 : binaer=z77;break;
case 8 : binaer=z88;break;
case 9 : binaer=z99;break;
}

ergebnis = pow(10,g)*binaer*((Kette24Lf/(Kette12Lf-h-(Kette50LLf/(Kette10LLf/h+h))))-1);

if (Wert < 0)
return (1/ergebnis);
else
{
return ergebnis;
}

}

I know that floats are very slow - especially divisions.
I would be very thankfuf if some could help me. Maybe some has a solution to my problem or some hints how I could improve the performance of my algorithm.
Is there a faster way of dividing floating numbers ?
Does anybody know a better algorithm ?
Could someone also recommend me some good books which deal with this kind of the problem.

Jack
2. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Feb 2003
Location
Slovak republic
Posts
15
Rep Power
0

"unlimited" accuracy

hi.

the fastest way to work with numbers is to use some optimized library. I should sugest you GMP lib. (www.swox.com/gmp).
It could be used to work with huge numbers (even millions digits each number or more) and also with huge accuracy (limited only by your memory).
It has all mathematical functions (mul, div, pow, log, binary operations, and much more....) and it is one of the fastest (if not the fastest one) functions cose it is speed optimized.

i hope i helped you.