Print this page
11210 libm should be cstyle(1ONBLD) clean

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/C/j1.c
          +++ new/usr/src/lib/libm/common/C/j1.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  24   24   */
       25 +
  25   26  /*
  26   27   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  27   28   * Use is subject to license terms.
  28   29   */
  29   30  
  30   31  /*
  31   32   * floating point Bessel's function of the first and second kinds
  32   33   * of order zero: j1(x),y1(x);
  33   34   *
  34   35   * Special cases:
↓ open down ↓ 2 lines elided ↑ open up ↑
  37   38   */
  38   39  
  39   40  #pragma weak __j1 = j1
  40   41  #pragma weak __y1 = y1
  41   42  
  42   43  #include "libm.h"
  43   44  #include "libm_protos.h"
  44   45  #include <math.h>
  45   46  #include <values.h>
  46   47  
  47      -#define GENERIC double
  48      -static const GENERIC
  49      -zero    = 0.0,
  50      -small   = 1.0e-5,
  51      -tiny    = 1.0e-20,
  52      -one     = 1.0,
  53      -invsqrtpi = 5.641895835477562869480794515607725858441e-0001,
  54      -tpi     = 0.636619772367581343075535053490057448;
       48 +#define GENERIC double
       49 +
       50 +static const GENERIC zero = 0.0,
       51 +        small = 1.0e-5,
       52 +        tiny = 1.0e-20,
       53 +        one = 1.0,
       54 +        invsqrtpi = 5.641895835477562869480794515607725858441e-0001,
       55 +        tpi = 0.636619772367581343075535053490057448;
       56 +
       57 +static GENERIC pone(GENERIC);
       58 +static GENERIC qone(GENERIC);
  55   59  
  56      -static GENERIC pone(GENERIC), qone(GENERIC);
  57   60  static const GENERIC r0[4] = {
  58   61          -6.250000000000002203053200981413218949548e-0002,
  59   62          1.600998455640072901321605101981501263762e-0003,
  60   63          -1.963888815948313758552511884390162864930e-0005,
  61   64          8.263917341093549759781339713418201620998e-0008,
  62   65  };
       66 +
  63   67  static const GENERIC s0[7] = {
  64   68          1.0e0,
  65   69          1.605069137643004242395356851797873766927e-0002,
  66   70          1.149454623251299996428500249509098499383e-0004,
  67   71          3.849701673735260970379681807910852327825e-0007,
  68   72  };
       73 +
  69   74  static const GENERIC r1[12] = {
  70   75          4.999999999999999995517408894340485471724e-0001,
  71   76          -6.003825028120475684835384519945468075423e-0002,
  72   77          2.301719899263321828388344461995355419832e-0003,
  73   78          -4.208494869238892934859525221654040304068e-0005,
  74   79          4.377745135188837783031540029700282443388e-0007,
  75   80          -2.854106755678624335145364226735677754179e-0009,
  76   81          1.234002865443952024332943901323798413689e-0011,
  77   82          -3.645498437039791058951273508838177134310e-0014,
  78   83          7.404320596071797459925377103787837414422e-0017,
  79   84          -1.009457448277522275262808398517024439084e-0019,
  80   85          8.520158355824819796968771418801019930585e-0023,
  81   86          -3.458159926081163274483854614601091361424e-0026,
  82   87  };
       88 +
  83   89  static const GENERIC s1[5] = {
  84   90          1.0e0,
  85   91          4.923499437590484879081138588998986303306e-0003,
  86   92          1.054389489212184156499666953501976688452e-0005,
  87   93          1.180768373106166527048240364872043816050e-0008,
  88   94          5.942665743476099355323245707680648588540e-0012,
  89   95  };
  90   96  
  91   97  GENERIC
  92      -j1(GENERIC x) {
       98 +j1(GENERIC x)
       99 +{
  93  100          GENERIC z, d, s, c, ss, cc, r;
  94  101          int i, sgn;
  95  102  
  96  103          if (!finite(x))
  97      -                return (one/x);
      104 +                return (one / x);
      105 +
  98  106          sgn = signbit(x);
  99  107          x = fabs(x);
      108 +
 100  109          if (x > 8.00) {
 101  110                  s = sin(x);
 102  111                  c = cos(x);
 103      -        /*
 104      -         * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x0)-q1(x)*sin(x0))
 105      -         * where x0 = x-3pi/4
 106      -         *      Better formula:
 107      -         *              cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4)
 108      -         *                      =  1/sqrt(2) * (sin(x) - cos(x))
 109      -         *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
 110      -         *                      = -1/sqrt(2) * (cos(x) + sin(x))
 111      -         * To avoid cancellation, use
 112      -         *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
 113      -         * to compute the worse one.
 114      -         */
      112 +
      113 +                /* BEGIN CSTYLED */
      114 +                /*
      115 +                 * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x0)-q1(x)*sin(x0))
      116 +                 * where x0 = x-3pi/4
      117 +                 *      Better formula:
      118 +                 *              cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4)
      119 +                 *                      =  1/sqrt(2) * (sin(x) - cos(x))
      120 +                 *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
      121 +                 *                      = -1/sqrt(2) * (cos(x) + sin(x))
      122 +                 * To avoid cancellation, use
      123 +                 *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
      124 +                 * to compute the worse one.
      125 +                 */
      126 +                /* END CSTYLED */
 115  127                  if (x > 8.9e307) {      /* x+x may overflow */
 116      -                        ss = -s-c;
 117      -                        cc =  s-c;
      128 +                        ss = -s - c;
      129 +                        cc = s - c;
 118  130                  } else if (signbit(s) != signbit(c)) {
 119  131                          cc = s - c;
 120      -                        ss = cos(x+x)/cc;
      132 +                        ss = cos(x + x) / cc;
 121  133                  } else {
 122      -                        ss = -s-c;
 123      -                        cc = cos(x+x)/ss;
      134 +                        ss = -s - c;
      135 +                        cc = cos(x + x) / ss;
 124  136                  }
 125      -        /*
 126      -         * j1(x) = 1/sqrt(pi*x) * (P(1,x)*cc - Q(1,x)*ss)
 127      -         * y1(x) = 1/sqrt(pi*x) * (P(1,x)*ss + Q(1,x)*cc)
 128      -         */
      137 +
      138 +                /*
      139 +                 * j1(x) = 1/sqrt(pi*x) * (P(1,x)*cc - Q(1,x)*ss)
      140 +                 * y1(x) = 1/sqrt(pi*x) * (P(1,x)*ss + Q(1,x)*cc)
      141 +                 */
 129  142                  if (x > 1.0e40)
 130      -                    d = (invsqrtpi*cc)/sqrt(x);
      143 +                        d = (invsqrtpi * cc) / sqrt(x);
 131  144                  else
 132      -                        d =  invsqrtpi*(pone(x)*cc-qone(x)*ss)/sqrt(x);
      145 +                        d = invsqrtpi * (pone(x) * cc - qone(x) * ss) / sqrt(x);
 133  146  
 134  147                  if (x > X_TLOSS) {
 135      -                    if (sgn != 0) { d = -d; x = -x; }
      148 +                        if (sgn != 0) {
      149 +                                d = -d;
      150 +                                x = -x;
      151 +                        }
      152 +
 136  153                          return (_SVID_libm_err(x, d, 36));
 137      -                } else
 138      -                    if (sgn == 0)
 139      -                                return (d);
 140      -                        else
 141      -                                return (-d);
      154 +                } else if (sgn == 0) {
      155 +                        return (d);
      156 +                } else {
      157 +                        return (-d);
      158 +                }
 142  159          }
      160 +
 143  161          if (x <= small) {
 144  162                  if (x <= tiny)
 145      -                        d = 0.5*x;
      163 +                        d = 0.5 * x;
 146  164                  else
 147      -                        d =  x*(0.5-x*x*0.125);
      165 +                        d = x * (0.5 - x * x * 0.125);
      166 +
 148  167                  if (sgn == 0)
 149  168                          return (d);
 150  169                  else
 151  170                          return (-d);
 152  171          }
 153      -        z = x*x;
      172 +
      173 +        z = x * x;
      174 +
 154  175          if (x < 1.28) {
 155      -            r = r0[3];
 156      -            s = s0[3];
 157      -            for (i = 2; i >= 0; i--) {
 158      -                r = r*z + r0[i];
 159      -                s = s*z + s0[i];
 160      -            }
 161      -            d = x*0.5+x*(z*(r/s));
      176 +                r = r0[3];
      177 +                s = s0[3];
      178 +
      179 +                for (i = 2; i >= 0; i--) {
      180 +                        r = r * z + r0[i];
      181 +                        s = s * z + s0[i];
      182 +                }
      183 +
      184 +                d = x * 0.5 + x * (z * (r / s));
 162  185          } else {
 163      -            r = r1[11];
 164      -            for (i = 10; i >= 0; i--) r = r*z + r1[i];
 165      -            s = s1[0]+z*(s1[1]+z*(s1[2]+z*(s1[3]+z*s1[4])));
 166      -            d = x*(r/s);
      186 +                r = r1[11];
      187 +
      188 +                for (i = 10; i >= 0; i--)
      189 +                        r = r * z + r1[i];
      190 +
      191 +                s = s1[0] + z * (s1[1] + z * (s1[2] + z * (s1[3] + z * s1[4])));
      192 +                d = x * (r / s);
 167  193          }
      194 +
 168  195          if (sgn == 0)
 169  196                  return (d);
 170  197          else
 171  198                  return (-d);
 172  199  }
 173  200  
 174  201  static const GENERIC u0[4] = {
 175  202          -1.960570906462389461018983259589655961560e-0001,
 176  203          4.931824118350661953459180060007970291139e-0002,
 177  204          -1.626975871565393656845930125424683008677e-0003,
 178  205          1.359657517926394132692884168082224258360e-0005,
 179  206  };
      207 +
 180  208  static const GENERIC v0[5] = {
 181  209          1.0e0,
 182  210          2.565807214838390835108224713630901653793e-0002,
 183  211          3.374175208978404268650522752520906231508e-0004,
 184  212          2.840368571306070719539936935220728843177e-0006,
 185  213          1.396387402048998277638900944415752207592e-0008,
 186  214  };
      215 +
 187  216  static const GENERIC u1[12] = {
 188  217          -1.960570906462389473336339614647555351626e-0001,
 189  218          5.336268030335074494231369159933012844735e-0002,
 190  219          -2.684137504382748094149184541866332033280e-0003,
 191  220          5.737671618979185736981543498580051903060e-0005,
 192  221          -6.642696350686335339171171785557663224892e-0007,
 193  222          4.692417922568160354012347591960362101664e-0009,
 194  223          -2.161728635907789319335231338621412258355e-0011,
 195  224          6.727353419738316107197644431844194668702e-0014,
 196  225          -1.427502986803861372125234355906790573422e-0016,
 197  226          2.020392498726806769468143219616642940371e-0019,
 198  227          -1.761371948595104156753045457888272716340e-0022,
 199  228          7.352828391941157905175042420249225115816e-0026,
 200  229  };
      230 +
 201  231  static const GENERIC v1[5] = {
 202  232          1.0e0,
 203  233          5.029187436727947764916247076102283399442e-0003,
 204  234          1.102693095808242775074856548927801750627e-0005,
 205  235          1.268035774543174837829534603830227216291e-0008,
 206  236          6.579416271766610825192542295821308730206e-0012,
 207  237  };
 208  238  
 209      -
 210  239  GENERIC
 211      -y1(GENERIC x) {
      240 +y1(GENERIC x)
      241 +{
 212  242          GENERIC z, d, s, c, ss, cc, u, v;
 213  243          int i;
 214  244  
 215  245          if (isnan(x))
 216      -                return (x*x);   /* + -> * for Cheetah */
      246 +                return (x * x);         /* + -> * for Cheetah */
      247 +
 217  248          if (x <= zero) {
 218  249                  if (x == zero)
 219      -                    /* return -one/zero;  */
 220      -                    return (_SVID_libm_err(x, x, 10));
      250 +                        /* return -one/zero;  */
      251 +                        return (_SVID_libm_err(x, x, 10));
 221  252                  else
 222      -                    /* return zero/zero; */
 223      -                    return (_SVID_libm_err(x, x, 11));
      253 +                        /* return zero/zero; */
      254 +                        return (_SVID_libm_err(x, x, 11));
 224  255          }
      256 +
 225  257          if (x > 8.0) {
 226  258                  if (!finite(x))
 227  259                          return (zero);
      260 +
 228  261                  s = sin(x);
 229  262                  c = cos(x);
 230      -        /*
 231      -         * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x0)-q1(x)*sin(x0))
 232      -         * where x0 = x-3pi/4
 233      -         *      Better formula:
 234      -         *              cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4)
 235      -         *                      =  1/sqrt(2) * (sin(x) - cos(x))
 236      -         *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
 237      -         *                      = -1/sqrt(2) * (cos(x) + sin(x))
 238      -         * To avoid cancellation, use
 239      -         *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
 240      -         * to compute the worse one.
 241      -         */
      263 +
      264 +                /* BEGIN CSTYLED */
      265 +                /*
      266 +                 * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x0)-q1(x)*sin(x0))
      267 +                 * where x0 = x-3pi/4
      268 +                 *      Better formula:
      269 +                 *              cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4)
      270 +                 *                      =  1/sqrt(2) * (sin(x) - cos(x))
      271 +                 *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
      272 +                 *                      = -1/sqrt(2) * (cos(x) + sin(x))
      273 +                 * To avoid cancellation, use
      274 +                 *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
      275 +                 * to compute the worse one.
      276 +                 */
      277 +                /* END CSTYLED */
 242  278                  if (x > 8.9e307) {      /* x+x may overflow */
 243      -                        ss = -s-c;
 244      -                        cc =  s-c;
      279 +                        ss = -s - c;
      280 +                        cc = s - c;
 245  281                  } else if (signbit(s) != signbit(c)) {
 246  282                          cc = s - c;
 247      -                        ss = cos(x+x)/cc;
      283 +                        ss = cos(x + x) / cc;
 248  284                  } else {
 249      -                        ss = -s-c;
 250      -                        cc = cos(x+x)/ss;
      285 +                        ss = -s - c;
      286 +                        cc = cos(x + x) / ss;
 251  287                  }
 252      -        /*
 253      -         * j1(x) = 1/sqrt(pi*x) * (P(1,x)*cc - Q(1,x)*ss)
 254      -         * y1(x) = 1/sqrt(pi*x) * (P(1,x)*ss + Q(1,x)*cc)
 255      -         */
      288 +
      289 +                /*
      290 +                 * j1(x) = 1/sqrt(pi*x) * (P(1,x)*cc - Q(1,x)*ss)
      291 +                 * y1(x) = 1/sqrt(pi*x) * (P(1,x)*ss + Q(1,x)*cc)
      292 +                 */
 256  293                  if (x > 1.0e91)
 257      -                    d =  (invsqrtpi*ss)/sqrt(x);
      294 +                        d = (invsqrtpi * ss) / sqrt(x);
 258  295                  else
 259      -                        d = invsqrtpi*(pone(x)*ss+qone(x)*cc)/sqrt(x);
      296 +                        d = invsqrtpi * (pone(x) * ss + qone(x) * cc) / sqrt(x);
 260  297  
 261  298                  if (x > X_TLOSS)
 262  299                          return (_SVID_libm_err(x, d, 37));
 263  300                  else
 264  301                          return (d);
 265  302          }
 266      -                if (x <= tiny) {
 267      -                        return (-tpi/x);
 268      -                }
 269      -        z = x*x;
      303 +
      304 +        if (x <= tiny)
      305 +                return (-tpi / x);
      306 +
      307 +        z = x * x;
      308 +
 270  309          if (x < 1.28) {
 271      -            u = u0[3]; v = v0[3]+z*v0[4];
 272      -            for (i = 2; i >= 0; i--) {
 273      -                u = u*z + u0[i];
 274      -                v = v*z + v0[i];
 275      -            }
      310 +                u = u0[3];
      311 +                v = v0[3] + z * v0[4];
      312 +
      313 +                for (i = 2; i >= 0; i--) {
      314 +                        u = u * z + u0[i];
      315 +                        v = v * z + v0[i];
      316 +                }
 276  317          } else {
 277      -            for (u = u1[11], i = 10; i >= 0; i--) u = u*z+u1[i];
 278      -            v = v1[0]+z*(v1[1]+z*(v1[2]+z*(v1[3]+z*v1[4])));
      318 +                for (u = u1[11], i = 10; i >= 0; i--)
      319 +                        u = u * z + u1[i];
      320 +
      321 +                v = v1[0] + z * (v1[1] + z * (v1[2] + z * (v1[3] + z * v1[4])));
 279  322          }
 280      -        return (x*(u/v) + tpi*(j1(x)*log(x)-one/x));
      323 +
      324 +        return (x * (u / v) + tpi * (j1(x) * log(x) - one / x));
 281  325  }
 282  326  
 283  327  static const GENERIC pr0[6] = {
 284      -        -.4435757816794127857114720794e7,
 285      -        -.9942246505077641195658377899e7,
 286      -        -.6603373248364939109255245434e7,
 287      -        -.1523529351181137383255105722e7,
 288      -        -.1098240554345934672737413139e6,
 289      -        -.1611616644324610116477412898e4,
      328 +        -.4435757816794127857114720794e7, -.9942246505077641195658377899e7,
      329 +        -.6603373248364939109255245434e7, -.1523529351181137383255105722e7,
      330 +        -.1098240554345934672737413139e6, -.1611616644324610116477412898e4,
 290  331  };
      332 +
 291  333  static const GENERIC ps0[6] = {
 292      -        -.4435757816794127856828016962e7,
 293      -        -.9934124389934585658967556309e7,
 294      -        -.6585339479723087072826915069e7,
 295      -        -.1511809506634160881644546358e7,
 296      -        -.1072638599110382011903063867e6,
 297      -        -.1455009440190496182453565068e4,
      334 +        -.4435757816794127856828016962e7, -.9934124389934585658967556309e7,
      335 +        -.6585339479723087072826915069e7, -.1511809506634160881644546358e7,
      336 +        -.1072638599110382011903063867e6, -.1455009440190496182453565068e4,
 298  337  };
 299      -static const GENERIC huge    = 1.0e10;
 300  338  
      339 +static const GENERIC huge = 1.0e10;
 301  340  static GENERIC
 302      -pone(GENERIC x) {
      341 +pone(GENERIC x)
      342 +{
 303  343          GENERIC s, r, t, z;
 304  344          int i;
 305      -                /* assume x > 8 */
      345 +
      346 +        /* assume x > 8 */
 306  347          if (x > huge)
 307  348                  return (one);
 308  349  
 309      -        t = 8.0/x; z = t*t;
 310      -        r = pr0[5]; s = ps0[5]+z;
      350 +        t = 8.0 / x;
      351 +        z = t * t;
      352 +        r = pr0[5];
      353 +        s = ps0[5] + z;
      354 +
 311  355          for (i = 4; i >= 0; i--) {
 312      -                r = z*r + pr0[i];
 313      -                s = z*s + ps0[i];
      356 +                r = z * r + pr0[i];
      357 +                s = z * s + ps0[i];
 314  358          }
 315      -        return (r/s);
 316      -}
 317  359  
      360 +        return (r / s);
      361 +}
 318  362  
 319  363  static const GENERIC qr0[6] = {
 320      -        0.3322091340985722351859704442e5,
 321      -        0.8514516067533570196555001171e5,
 322      -        0.6617883658127083517939992166e5,
 323      -        0.1849426287322386679652009819e5,
 324      -        0.1706375429020768002061283546e4,
 325      -        0.3526513384663603218592175580e2,
      364 +        0.3322091340985722351859704442e5, 0.8514516067533570196555001171e5,
      365 +        0.6617883658127083517939992166e5, 0.1849426287322386679652009819e5,
      366 +        0.1706375429020768002061283546e4, 0.3526513384663603218592175580e2,
 326  367  };
      368 +
 327  369  static const GENERIC qs0[6] = {
 328      -        0.7087128194102874357377502472e6,
 329      -        0.1819458042243997298924553839e7,
 330      -        0.1419460669603720892855755253e7,
 331      -        0.4002944358226697511708610813e6,
 332      -        0.3789022974577220264142952256e5,
 333      -        0.8638367769604990967475517183e3,
      370 +        0.7087128194102874357377502472e6, 0.1819458042243997298924553839e7,
      371 +        0.1419460669603720892855755253e7, 0.4002944358226697511708610813e6,
      372 +        0.3789022974577220264142952256e5, 0.8638367769604990967475517183e3,
 334  373  };
 335  374  
 336  375  static GENERIC
 337      -qone(GENERIC x) {
      376 +qone(GENERIC x)
      377 +{
 338  378          GENERIC s, r, t, z;
 339  379          int i;
      380 +
 340  381          if (x > huge)
 341      -                return (0.375/x);
      382 +                return (0.375 / x);
      383 +
      384 +        t = 8.0 / x;
      385 +        z = t * t;
      386 +        /* assume x > 8 */
      387 +        r = qr0[5];
      388 +        s = qs0[5] + z;
 342  389  
 343      -        t = 8.0/x; z = t*t;
 344      -                /* assume x > 8 */
 345      -        r = qr0[5]; s = qs0[5]+z;
 346  390          for (i = 4; i >= 0; i--) {
 347      -                r = z*r + qr0[i];
 348      -                s = z*s + qs0[i];
      391 +                r = z * r + qr0[i];
      392 +                s = z * s + qs0[i];
 349  393          }
 350      -        return (t*(r/s));
      394 +
      395 +        return (t * (r / s));
 351  396  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX