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

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/complex/k_cexpl.c
          +++ new/usr/src/lib/libm/common/complex/k_cexpl.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      -/* INDENT OFF */
       31 +
  31   32  /*
  32   33   * long double __k_cexpl(long double x, int *n);
  33   34   * Returns the exponential of x in the form of 2**n * y, y=__k_cexpl(x,&n).
  34   35   *
  35   36   *      1. Argument Reduction: given the input x, find r and integer k
  36   37   *         and j such that
  37   38   *                   x = (32k+j)*ln2 + r,  |r| <= (1/64)*ln2 .
  38   39   *
  39   40   *      2. expl(x) = 2^k * (2^(j/32) + 2^(j/32)*expm1(r))
  40   41   *         Note:
↓ open down ↓ 18 lines elided ↑ open up ↑
  59   60   *      is not important because the ultimate result will over or under
  60   61   *      flow. So we will simply replace n = 1000000 and r = 0.0. For
  61   62   *      moderate size x, according to an error analysis, the error is
  62   63   *      always less than 1 ulp (unit in the last place).
  63   64   *
  64   65   * Constants:
  65   66   * Only decimal values are given. We assume that the compiler will convert
  66   67   * from decimal to binary accurately enough to produce the correct
  67   68   * hexadecimal values.
  68   69   */
  69      -/* INDENT ON */
  70   70  
  71      -#include "libm.h"               /* __k_cexpl */
  72      -#include "complex_wrapper.h"    /* HI_XWORD */
       71 +#include "libm.h"                       /* __k_cexpl */
       72 +#include "complex_wrapper.h"            /* HI_XWORD */
  73   73  
  74      -/* INDENT OFF */
  75      -/* ln2/32 = 0.0216608493924982909192885037955680177523593791987579766912713 */
       74 +/*
       75 + * ln2/32 = 0.0216608493924982909192885037955680177523593791987579766912713
       76 + */
  76   77  #if defined(__x86)
  77   78  static const long double
  78      -                        /* 43 significant bits, 21 trailing zeros */
  79      -ln2_32hi = 2.166084939249657281834515742957592010498046875e-2L,
  80      -ln2_32lo = 1.7181009433463659920976473789104487579766912713e-15L;
  81      -static const long double exp2_32_hi[] = {       /* exp2_32[j] = 2^(j/32) */
  82      -        1.0000000000000000000000000e+00L,
  83      -        1.0218971486541166782081522e+00L,
  84      -        1.0442737824274138402382006e+00L,
  85      -        1.0671404006768236181297224e+00L,
  86      -        1.0905077326652576591003302e+00L,
  87      -        1.1143867425958925362894369e+00L,
  88      -        1.1387886347566916536971221e+00L,
  89      -        1.1637248587775775137938619e+00L,
  90      -        1.1892071150027210666875674e+00L,
  91      -        1.2152473599804688780476325e+00L,
  92      -        1.2418578120734840485256747e+00L,
  93      -        1.2690509571917332224885722e+00L,
  94      -        1.2968395546510096659215822e+00L,
  95      -        1.3252366431597412945939118e+00L,
  96      -        1.3542555469368927282668852e+00L,
  97      -        1.3839098819638319548151403e+00L,
  98      -        1.4142135623730950487637881e+00L,
  99      -        1.4451808069770466200253470e+00L,
 100      -        1.4768261459394993113155431e+00L,
 101      -        1.5091644275934227397133885e+00L,
 102      -        1.5422108254079408235859630e+00L,
 103      -        1.5759808451078864864006862e+00L,
 104      -        1.6104903319492543080837174e+00L,
 105      -        1.6457554781539648445110730e+00L,
 106      -        1.6817928305074290860378350e+00L,
 107      -        1.7186192981224779156032914e+00L,
 108      -        1.7562521603732994831094730e+00L,
 109      -        1.7947090750031071864148413e+00L,
 110      -        1.8340080864093424633989166e+00L,
 111      -        1.8741676341102999013002103e+00L,
 112      -        1.9152065613971472938202589e+00L,
 113      -        1.9571441241754002689657438e+00L,
       79 +        /* 43 significant bits, 21 trailing zeros */
       80 +        ln2_32hi = 2.166084939249657281834515742957592010498046875e-2L,
       81 +        ln2_32lo = 1.7181009433463659920976473789104487579766912713e-15L;
       82 +
       83 +static const long double exp2_32_hi[] = {       /* exp2_32[j] = 2^(j/32) */
       84 +        1.0000000000000000000000000e+00L, 1.0218971486541166782081522e+00L,
       85 +        1.0442737824274138402382006e+00L, 1.0671404006768236181297224e+00L,
       86 +        1.0905077326652576591003302e+00L, 1.1143867425958925362894369e+00L,
       87 +        1.1387886347566916536971221e+00L, 1.1637248587775775137938619e+00L,
       88 +        1.1892071150027210666875674e+00L, 1.2152473599804688780476325e+00L,
       89 +        1.2418578120734840485256747e+00L, 1.2690509571917332224885722e+00L,
       90 +        1.2968395546510096659215822e+00L, 1.3252366431597412945939118e+00L,
       91 +        1.3542555469368927282668852e+00L, 1.3839098819638319548151403e+00L,
       92 +        1.4142135623730950487637881e+00L, 1.4451808069770466200253470e+00L,
       93 +        1.4768261459394993113155431e+00L, 1.5091644275934227397133885e+00L,
       94 +        1.5422108254079408235859630e+00L, 1.5759808451078864864006862e+00L,
       95 +        1.6104903319492543080837174e+00L, 1.6457554781539648445110730e+00L,
       96 +        1.6817928305074290860378350e+00L, 1.7186192981224779156032914e+00L,
       97 +        1.7562521603732994831094730e+00L, 1.7947090750031071864148413e+00L,
       98 +        1.8340080864093424633989166e+00L, 1.8741676341102999013002103e+00L,
       99 +        1.9152065613971472938202589e+00L, 1.9571441241754002689657438e+00L,
 114  100  };
      101 +
 115  102  static const long double exp2_32_lo[] = {
 116      -        0.0000000000000000000000000e+00L,
 117      -        2.6327965667180882569382524e-20L,
 118      -        8.3765863521895191129661899e-20L,
 119      -        3.9798705777454504249209575e-20L,
 120      -        1.0668046596651558640993042e-19L,
 121      -        1.9376009847285360448117114e-20L,
 122      -        6.7081819456112953751277576e-21L,
 123      -        1.9711680502629186462729727e-20L,
 124      -        2.9932584438449523689104569e-20L,
 125      -        6.8887754153039109411061914e-20L,
 126      -        6.8002718741225378942847820e-20L,
 127      -        6.5846917376975403439742349e-20L,
 128      -        1.2171958727511372194876001e-20L,
 129      -        3.5625253228704087115438260e-20L,
 130      -        3.1129551559077560956309179e-20L,
 131      -        5.7519192396164779846216492e-20L,
 132      -        3.7900651177865141593101239e-20L,
 133      -        1.1659262405698741798080115e-20L,
 134      -        7.1364385105284695967172478e-20L,
 135      -        5.2631003710812203588788949e-20L,
 136      -        2.6328853788732632868460580e-20L,
 137      -        5.4583950085438242788190141e-20L,
 138      -        9.5803254376938269960718656e-20L,
 139      -        7.6837733983874245823512279e-21L,
 140      -        2.4415965910835093824202087e-20L,
 141      -        2.6052966871016580981769728e-20L,
 142      -        2.6876456344632553875309579e-21L,
 143      -        1.2861930155613700201703279e-20L,
 144      -        8.8166633394037485606572294e-20L,
 145      -        2.9788615389580190940837037e-20L,
 146      -        5.2352341619805098677422139e-20L,
 147      -        5.2578463064010463732242363e-20L,
      103 +        0.0000000000000000000000000e+00L, 2.6327965667180882569382524e-20L,
      104 +        8.3765863521895191129661899e-20L, 3.9798705777454504249209575e-20L,
      105 +        1.0668046596651558640993042e-19L, 1.9376009847285360448117114e-20L,
      106 +        6.7081819456112953751277576e-21L, 1.9711680502629186462729727e-20L,
      107 +        2.9932584438449523689104569e-20L, 6.8887754153039109411061914e-20L,
      108 +        6.8002718741225378942847820e-20L, 6.5846917376975403439742349e-20L,
      109 +        1.2171958727511372194876001e-20L, 3.5625253228704087115438260e-20L,
      110 +        3.1129551559077560956309179e-20L, 5.7519192396164779846216492e-20L,
      111 +        3.7900651177865141593101239e-20L, 1.1659262405698741798080115e-20L,
      112 +        7.1364385105284695967172478e-20L, 5.2631003710812203588788949e-20L,
      113 +        2.6328853788732632868460580e-20L, 5.4583950085438242788190141e-20L,
      114 +        9.5803254376938269960718656e-20L, 7.6837733983874245823512279e-21L,
      115 +        2.4415965910835093824202087e-20L, 2.6052966871016580981769728e-20L,
      116 +        2.6876456344632553875309579e-21L, 1.2861930155613700201703279e-20L,
      117 +        8.8166633394037485606572294e-20L, 2.9788615389580190940837037e-20L,
      118 +        5.2352341619805098677422139e-20L, 5.2578463064010463732242363e-20L,
 148  119  };
 149      -#else   /* sparc */
      120 +#else /* sparc */
 150  121  static const long double
 151      -                        /* 0x3FF962E4 2FEFA39E F35793C7 00000000 */
 152      -ln2_32hi = 2.166084939249829091928849858592451515688e-2L,
 153      -ln2_32lo = 5.209643502595475652782654157501186731779e-27L;
 154      -static const long double exp2_32_hi[] = {       /* exp2_32[j] = 2^(j/32) */
      122 +        /* 0x3FF962E4 2FEFA39E F35793C7 00000000 */
      123 +        ln2_32hi = 2.166084939249829091928849858592451515688e-2L,
      124 +        ln2_32lo = 5.209643502595475652782654157501186731779e-27L;
      125 +static const long double exp2_32_hi[] = {       /* exp2_32[j] = 2^(j/32) */
 155  126          1.000000000000000000000000000000000000000e+0000L,
 156  127          1.021897148654116678234480134783299439782e+0000L,
 157  128          1.044273782427413840321966478739929008785e+0000L,
 158  129          1.067140400676823618169521120992809162607e+0000L,
 159  130          1.090507732665257659207010655760707978993e+0000L,
 160  131          1.114386742595892536308812956919603067800e+0000L,
 161  132          1.138788634756691653703830283841511254720e+0000L,
 162  133          1.163724858777577513813573599092185312343e+0000L,
 163  134          1.189207115002721066717499970560475915293e+0000L,
 164  135          1.215247359980468878116520251338798457624e+0000L,
↓ open down ↓ 50 lines elided ↑ open up ↑
 215  186          +6.378397921440028439244761449780848545957e-0035L,
 216  187          +7.792430785695864249456461125169277701177e-0035L,
 217  188          +7.361337767588456524131930836633932195088e-0035L,
 218  189          -6.472995147913347230035214575612170525266e-0035L,
 219  190          +8.587474417953698694278798062295229624207e-0035L,
 220  191          +2.371815422825174835691651228302690977951e-0035L,
 221  192          -3.026891682096118773004597373421900314256e-0037L,
 222  193  };
 223  194  #endif
 224  195  
 225      -static const long double
 226      -        one = 1.0L,
      196 +static const long double one = 1.0L,
 227  197          two = 2.0L,
 228  198          ln2_64 = 1.083042469624914545964425189778400898568e-2L,
 229  199          invln2_32 = 4.616624130844682903551758979206054839765e+1L;
 230  200  
 231  201  /* rational approximation coeffs for [-(ln2)/64,(ln2)/64] */
 232      -static const long double
 233      -        t1 =  1.666666666666666666666666666660876387437e-1L,
      202 +static const long double t1 = 1.666666666666666666666666666660876387437e-1L,
 234  203          t2 = -2.777777777777777777777707812093173478756e-3L,
 235      -        t3 =  6.613756613756613482074280932874221202424e-5L,
      204 +        t3 = 6.613756613756613482074280932874221202424e-5L,
 236  205          t4 = -1.653439153392139954169609822742235851120e-6L,
 237      -        t5 =  4.175314851769539751387852116610973796053e-8L;
 238      -/* INDENT ON */
      206 +        t5 = 4.175314851769539751387852116610973796053e-8L;
 239  207  
 240  208  long double
 241      -__k_cexpl(long double x, int *n) {
      209 +__k_cexpl(long double x, int *n)
      210 +{
 242  211          int hx, ix, j, k;
 243  212          long double t, r;
 244  213  
 245  214          *n = 0;
 246  215          hx = HI_XWORD(x);
 247  216          ix = hx & 0x7fffffff;
      217 +
 248  218          if (hx >= 0x7fff0000)
 249      -                return (x + x); /* NaN of +inf */
 250      -        if (((unsigned) hx) >= 0xffff0000)
      219 +                return (x + x);         /* NaN of +inf */
      220 +
      221 +        if (((unsigned)hx) >= 0xffff0000)
 251  222                  return (-one / x);      /* NaN or -inf */
      223 +
 252  224          if (ix < 0x3fc30000)
 253  225                  return (one + x);       /* |x|<2^-60 */
      226 +
 254  227          if (hx > 0) {
 255  228                  if (hx > 0x401086a0) {  /* x > 200000 */
 256  229                          *n = 200000;
 257  230                          return (one);
 258  231                  }
 259      -                k = (int) (invln2_32 * (x + ln2_64));
      232 +
      233 +                k = (int)(invln2_32 * (x + ln2_64));
 260  234          } else {
 261  235                  if (ix > 0x401086a0) {  /* x < -200000 */
 262  236                          *n = -200000;
 263  237                          return (one);
 264  238                  }
 265      -                k = (int) (invln2_32 * (x - ln2_64));
      239 +
      240 +                k = (int)(invln2_32 * (x - ln2_64));
 266  241          }
      242 +
 267  243          j = k & 0x1f;
 268  244          *n = k >> 5;
 269      -        t = (long double) k;
      245 +        t = (long double)k;
 270  246          x = (x - t * ln2_32hi) - t * ln2_32lo;
 271  247          t = x * x;
 272  248          r = (x - t * (t1 + t * (t2 + t * (t3 + t * (t4 + t * t5))))) - two;
 273  249          x = exp2_32_hi[j] - ((exp2_32_hi[j] * (x + x)) / r - exp2_32_lo[j]);
 274  250          k >>= 5;
      251 +
 275  252          if (k > 240) {
 276  253                  XFSCALE(x, 240);
 277  254                  *n -= 240;
 278  255          } else if (k > 0) {
 279  256                  XFSCALE(x, k);
 280  257                  *n = 0;
 281  258          }
      259 +
 282  260          return (x);
 283  261  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX