Print this page
5261 libm should stop using synonyms.h
5298 fabs is 0-sized, confuses dis(1) and others
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Gordon Ross <gwr@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/C/atanh.c
          +++ new/usr/src/lib/libm/common/C/atanh.c
↓ open down ↓ 19 lines elided ↑ open up ↑
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  24   24   */
  25   25  /*
  26   26   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  27   27   * Use is subject to license terms.
  28   28   */
  29   29  
  30      -#pragma weak atanh = __atanh
       30 +#pragma weak __atanh = atanh
  31   31  
  32   32  /* INDENT OFF */
  33   33  /*
  34   34   * atanh(x)
  35   35   * Code originated from 4.3bsd.
  36   36   * Modified by K.C. Ng for SUN 4.0 libm.
  37   37   * Method :
  38   38   *                  1              2x                          x
  39   39   *      atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------)
  40   40   *                  2             1 - x                      1 - x
↓ open down ↓ 3 lines elided ↑ open up ↑
  44   44   *                    2              1 - |x|
  45   45   *
  46   46   * Special cases:
  47   47   *      atanh(x) is NaN if |x| > 1 with signal;
  48   48   *      atanh(NaN) is that NaN with no signal;
  49   49   *      atanh(+-1) is +-INF with signal.
  50   50   */
  51   51  /* INDENT ON */
  52   52  
  53   53  #include "libm.h"
  54      -#include "libm_synonyms.h"
  55   54  #include "libm_protos.h"
  56   55  #include <math.h>
  57   56  
  58   57  double
  59   58  atanh(double x) {
  60   59          double t;
  61   60  
  62   61          if (isnan(x))
  63   62                  return (x * x);         /* switched from x + x for Cheetah */
  64   63          t = fabs(x);
  65   64          if (t > 1.0)
  66   65                  return (_SVID_libm_err(x, x, 30));      /* sNaN */
  67   66          if (t == 1.0)
  68   67                  return (_SVID_libm_err(x, x, 31));      /* x/0; */
  69   68          t = t / (1.0 - t);
  70   69          return (copysign(0.5, x) * log1p(t + t));
  71   70  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX