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.
Thanks in advance
Jack
