cvs commit: src/lib/msun/src s_exp2f.c

Bruce Evans bde at
Sun Feb 10 21:20:02 PST 2008

bde         2008-02-11 05:20:02 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         s_exp2f.c 
  Use double precision for z and thus for the entire calculation of
  exp2(i/TBLSIZE) * p(z) instead of only for the final multiplication
  and addition.  This fixes the code to match the comment that the maximum
  error is 0.5010 ulps (except on machines that evaluate float expressions
  in extra precision, e.g., i386's, where the evaluation was already
  in extra precision).
  Fix and expand the comment about use of double precision.
  The relative roundoff error from evaluating p(z) in non-extra precision
  was about 16 times larger than in exp2() because the interval length
  is 16 times smaller.  Its maximum was at least P1 * (1.0 ulps) *
  max(|z|) ~= log(2) * 1.0 * 1/32 ~= 0.0217 ulps (1.0 ulps from the
  addition in (1 + P1*z) with a cancelation error when z ~= -1/32).  The
  actual final maximum was 0.5313 ulps, of which 0.0303 ulps must have
  come from the additional roundoff error in p(z).  I can't explain why
  the additional roundoff error was almost 3/2 times larger than the rough
  Revision  Changes    Path
  1.6       +4 -3      src/lib/msun/src/s_exp2f.c

More information about the cvs-src mailing list