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

From: Bruce Evans <bde_at_FreeBSD.org>
Date: Sun, 11 Dec 2005 11:40:55 +0000 (UTC)
bde         2005-12-11 11:40:55 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         s_tanhf.c 
  Log:
  Fixed some magic numbers.
  
  The threshold for not being tiny was too small.  Use the usual 2**-12
  threshold.  As for sinhf, use a different method (now the same as for
  sinhf) to set the inexact flag for tiny nonzero x so that the larger
  threshold works, although this method is imperfect.  As for sinhf,
  this change is not just an optimization, since the general code that
  we fell into has accuracy problems even for tiny x.  On amd64, avoiding
  it fixes tanhf on 2*13495596 args with errors of between 1 and 1.3
  ulps and thus reduces the total number of args with errors of >= 1 ulp
  from 37533748 to 5271278; the maximum error is unchanged at 2.2 ulps.
  
  The magic number 22 is log(DBL_MAX)/2 plus slop.  This is bogus for
  float precision.  Use 9 (log(FLT_MAX)/2 plus less slop than for
  double precision).  Unlike for coshf and tanhf, this is just an
  optimization, and MAX isn't misspelled EPSILON in the commit log.
  
  I started testing with nonstandard rounding modes, and verified that
  the chosen thresholds work for all modes modulo problems not related
  to thresholds.  The best thresholds are not very dependent on the mode,
  at least for tanhf.
  
  Revision  Changes    Path
  1.8       +8 -8      src/lib/msun/src/s_tanhf.c
Received on Sun Dec 11 2005 - 11:40:56 UTC