fpu/e_expl.c for i686

Andreas Jaeger aj@suse.de
Mon May 7 12:45:00 GMT 2001


Stephen L Moshier <moshier@mediaone.net> writes:

> > +__ieee754_expl (long double x)
> > ...
> > +       "fldl2e\n"
> > +       "fmulp\n"			/* x * log2(e) */
> > +       "fld				%%st\n"
> > +       "frndint\n"					/* int(x *> log2(e)) */
> > +       "fsubr	%%st,%%st(1)\n"		/* fract(x * log2(e)) */
> 
> This code seems adequate for double precision but it has poor
> accuracy for long double, due to error amplification over the
> wider domain of the long double function.  For example, expl(1000)
> is off by roughly 460 ulps.  I would suggest improving the range reduction

expl (1000) is .19e435 and can only be represented with long doubles.
How much would the error be for expl (100)?

> method here, but since that entails three or four more multiplications
> you might not want to make the speed sacrifice.  What would your
> policy be about this tradeoff of speed versus accuracy?

I personally would go for accuracy.

Andreas
-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj



More information about the Libc-alpha mailing list