Print this page
11175 libm should use signbit() correctly
11188 c99 math macros should return strictly backward compatible values

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/C/tanh.c
          +++ new/usr/src/lib/libm/common/C/tanh.c
↓ open down ↓ 59 lines elided ↑ open up ↑
  60   60  #include <math.h>
  61   61  
  62   62  static const double
  63   63          one = 1.0,
  64   64          two = 2.0,
  65   65          small = 1.0e-10,
  66   66          big = 1.0e10;
  67   67  /* INDENT ON */
  68   68  
  69   69  double
  70      -tanh(double x) {
       70 +tanh(double x)
       71 +{
  71   72          double t, y, z;
  72   73          int signx;
  73   74          volatile double dummy __unused;
  74   75  
  75   76          if (isnan(x))
  76   77                  return (x * x); /* + -> * for Cheetah */
  77   78          signx = signbit(x);
  78   79          t = fabs(x);
  79   80          z = one;
  80   81          if (t <= 22.0) {
↓ open down ↓ 6 lines elided ↑ open up ↑
  87   88                          /* raise the INEXACT flag for non-zero t */
  88   89                          dummy = t + big;
  89   90  #ifdef lint
  90   91                          dummy = dummy;
  91   92  #endif
  92   93                          return (x);
  93   94                  }
  94   95          } else if (!finite(t))
  95   96                  return (copysign(1.0, x));
  96   97          else
  97      -                return (signx == 1 ? -z + small * small : z - small * small);
       98 +                return ((signx != 0) ? -z + small * small : z - small * small);
  98   99  
  99      -        return (signx == 1 ? -z : z);
      100 +        return ((signx != 0) ? -z : z);
 100  101  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX