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

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/LD/erfl.c
          +++ new/usr/src/lib/libm/common/LD/erfl.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      -/* long double function erf,erfc (long double x)
       31 +/* BEGIN CSTYLED */
       32 +/*
       33 + * long double function erf,erfc (long double x)
  31   34   * K.C. Ng, September, 1989.
  32   35   *                           x
  33   36   *                    2      |\
  34   37   *     erf(x)  =  ---------  | exp(-t*t)dt
  35      - *                 sqrt(pi) \|
       38 + *                 sqrt(pi) \|
  36   39   *                           0
  37   40   *
  38   41   *     erfc(x) =  1-erf(x)
  39   42   *
  40   43   * method:
  41      - *      Since erf(-x) = -erf(x), we assume x>=0.
       44 + *      Since erf(-x) = -erf(x), we assume x>=0.
  42   45   *      For x near 0, we have the expansion
  43   46   *
  44      - *          erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....).
       47 + *          erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....).
  45   48   *
  46      - *      Since 2/sqrt(pi) = 1.128379167095512573896158903121545171688,
       49 + *      Since 2/sqrt(pi) = 1.128379167095512573896158903121545171688,
  47   50   *      we use x + x*P(x^2) to approximate erf(x). This formula will
  48   51   *      guarantee the error less than one ulp where x is not too far
  49   52   *      away from 0. We note that erf(x)=x at x = 0.6174...... After
  50   53   *      some experiment, we choose the following approximation on
  51   54   *      interval [0,0.84375].
  52   55   *
  53   56   *      For x in [0,0.84375]
  54   57   *                 2                2        4               40
  55      - *         P =  P(x ) = (p0 + p1 * x + p2 * x + ... + p20 * x  )
       58 + *         P =  P(x ) = (p0 + p1 * x + p2 * x + ... + p20 * x  )
  56   59   *
  57   60   *         erf(x)  = x + x*P
  58      - *         erfc(x) = 1 - erf(x)           if x<=0.25
       61 + *         erfc(x) = 1 - erf(x)           if x<=0.25
  59   62   *                 = 0.5 + ((0.5-x)-x*P)  if x in [0.25,0.84375]
  60   63   *      precision: |P(x^2)-(erf(x)-x)/x| <= 2**-122.50
  61   64   *
  62   65   *      For x in [0.84375,1.25], let s = x - 1, and
  63   66   *      c = 0.84506291151 rounded to single (24 bits)
  64   67   *         erf(x)  = c  + P1(s)/Q1(s)
  65   68   *         erfc(x) = (1-c)  - P1(s)/Q1(s)
  66   69   *      precision: |P1/Q1 - (erf(x)-c)| <= 2**-118.41
  67   70   *
  68   71   *
↓ open down ↓ 15 lines elided ↑ open up ↑
  84   87   *      precision: absolute error of R2/S2 is bounded by 2**-120.07
  85   88   *
  86   89   *      Else if inf > x >= 107
  87   90   *         erf(x)  = 1 with inexact
  88   91   *         erfc(x) = 0 with underflow
  89   92   *
  90   93   *      Special case:
  91   94   *         erf(inf)  = 1
  92   95   *         erfc(inf) = 0
  93   96   */
       97 +/* END CSTYLED */
  94   98  
  95   99  #pragma weak __erfl = erfl
  96  100  #pragma weak __erfcl = erfcl
  97  101  
  98  102  #include "libm.h"
  99  103  #include "longdouble.h"
 100  104  
 101      -static long double
 102      -tiny        = 1e-40L,
 103      -nearunfl    = 1e-4000L,
 104      -half        = 0.5L,
 105      -one         = 1.0L,
 106      -onehalf     = 1.5L,
 107      -L16_3       = 16.0L/3.0L;
      105 +static long double tiny = 1e-40L,
      106 +        nearunfl = 1e-4000L,
      107 +        half = 0.5L,
      108 +        one = 1.0L,
      109 +        onehalf = 1.5L,
      110 +        L16_3 = 16.0L / 3.0L;
      111 +
 108  112  /*
 109  113   * Coefficients for even polynomial P for erf(x)=x+x*P(x^2) on [0,0.84375]
 110  114   */
 111      -static long double P[] = {      /* 21 coeffs */
 112      -   1.283791670955125738961589031215451715556e-0001L,
 113      -  -3.761263890318375246320529677071815594603e-0001L,
 114      -   1.128379167095512573896158903121205899135e-0001L,
 115      -  -2.686617064513125175943235483344625046092e-0002L,
 116      -   5.223977625442187842111846652980454568389e-0003L,
 117      -  -8.548327023450852832546626271083862724358e-0004L,
 118      -   1.205533298178966425102164715902231976672e-0004L,
 119      -  -1.492565035840625097674944905027897838996e-0005L,
 120      -   1.646211436588924733604648849172936692024e-0006L,
 121      -  -1.636584469123491976815834704799733514987e-0007L,
 122      -   1.480719281587897445302529007144770739305e-0008L,
 123      -  -1.229055530170782843046467986464722047175e-0009L,
 124      -   9.422759064320307357553954945760654341633e-0011L,
 125      -  -6.711366846653439036162105104991433380926e-0012L,
 126      -   4.463224090341893165100275380693843116240e-0013L,
 127      -  -2.783513452582658245422635662559779162312e-0014L,
 128      -   1.634227412586960195251346878863754661546e-0015L,
 129      -  -9.060782672889577722765711455623117802795e-0017L,
 130      -   4.741341801266246873412159213893613602354e-0018L,
 131      -  -2.272417596497826188374846636534317381203e-0019L,
 132      -   8.069088733716068462496835658928566920933e-0021L,
      115 +static long double P[] = {              /* 21 coeffs */
      116 +        1.283791670955125738961589031215451715556e-0001L,
      117 +        -3.761263890318375246320529677071815594603e-0001L,
      118 +        1.128379167095512573896158903121205899135e-0001L,
      119 +        -2.686617064513125175943235483344625046092e-0002L,
      120 +        5.223977625442187842111846652980454568389e-0003L,
      121 +        -8.548327023450852832546626271083862724358e-0004L,
      122 +        1.205533298178966425102164715902231976672e-0004L,
      123 +        -1.492565035840625097674944905027897838996e-0005L,
      124 +        1.646211436588924733604648849172936692024e-0006L,
      125 +        -1.636584469123491976815834704799733514987e-0007L,
      126 +        1.480719281587897445302529007144770739305e-0008L,
      127 +        -1.229055530170782843046467986464722047175e-0009L,
      128 +        9.422759064320307357553954945760654341633e-0011L,
      129 +        -6.711366846653439036162105104991433380926e-0012L,
      130 +        4.463224090341893165100275380693843116240e-0013L,
      131 +        -2.783513452582658245422635662559779162312e-0014L,
      132 +        1.634227412586960195251346878863754661546e-0015L,
      133 +        -9.060782672889577722765711455623117802795e-0017L,
      134 +        4.741341801266246873412159213893613602354e-0018L,
      135 +        -2.272417596497826188374846636534317381203e-0019L,
      136 +        8.069088733716068462496835658928566920933e-0021L,
 133  137  };
 134  138  
 135  139  /*
 136  140   * Rational erf(x) = ((float)0.84506291151) + P1(x-1)/Q1(x-1) on [0.84375,1.25]
 137  141   */
 138      -static long double C1   = (long double)((float)0.84506291151);
 139      -static long double P1[] = {     /*  12 top coeffs */
 140      -  -2.362118560752659955654364917390741930316e-0003L,
 141      -   4.129623379624420034078926610650759979146e-0001L,
 142      -  -3.973857505403547283109417923182669976904e-0002L,
 143      -   4.357503184084022439763567513078036755183e-0002L,
 144      -   8.015593623388421371247676683754171456950e-0002L,
 145      -  -1.034459310403352486685467221776778474602e-0002L,
 146      -   5.671850295381046679675355719017720821383e-0003L,
 147      -   1.219262563232763998351452194968781174318e-0003L,
 148      -   5.390833481581033423020320734201065475098e-0004L,
 149      -  -1.978853912815115495053119023517805528300e-0004L,
 150      -   6.184234513953600118335017885706420552487e-0005L,
 151      -  -5.331802711697810861017518515816271808286e-0006L,
      142 +static long double C1 = (long double)((float)0.84506291151);
      143 +static long double P1[] = {             /*  12 top coeffs */
      144 +        -2.362118560752659955654364917390741930316e-0003L,
      145 +        4.129623379624420034078926610650759979146e-0001L,
      146 +        -3.973857505403547283109417923182669976904e-0002L,
      147 +        4.357503184084022439763567513078036755183e-0002L,
      148 +        8.015593623388421371247676683754171456950e-0002L,
      149 +        -1.034459310403352486685467221776778474602e-0002L,
      150 +        5.671850295381046679675355719017720821383e-0003L,
      151 +        1.219262563232763998351452194968781174318e-0003L,
      152 +        5.390833481581033423020320734201065475098e-0004L,
      153 +        -1.978853912815115495053119023517805528300e-0004L,
      154 +        6.184234513953600118335017885706420552487e-0005L,
      155 +        -5.331802711697810861017518515816271808286e-0006L,
 152  156  };
 153      -static long double Q1[] = {     /*  12 bottom coeffs with leading 1.0 hidden */
 154      -   9.081506296064882195280178373107623196655e-0001L,
 155      -   6.821049531968204097604392183650687642520e-0001L,
 156      -   4.067869178233539502315055970743271822838e-0001L,
 157      -   1.702332233546316765818144723063881095577e-0001L,
 158      -   7.498098377690553934266423088708614219356e-0002L,
 159      -   2.050154396918178697056927234366372760310e-0002L,
 160      -   7.012988534031999899054782333851905939379e-0003L,
 161      -   1.149904787014400354649843451234570731076e-0003L,
 162      -   3.185620255011299476196039491205159718620e-0004L,
 163      -   1.273405072153008775426376193374105840517e-0005L,
 164      -   4.753866999959432971956781228148402971454e-0006L,
 165      -  -1.002287602111660026053981728549540200683e-0006L,
      157 +
      158 +static long double Q1[] = {    /*  12 bottom coeffs with leading 1.0 hidden */
      159 +        9.081506296064882195280178373107623196655e-0001L,
      160 +        6.821049531968204097604392183650687642520e-0001L,
      161 +        4.067869178233539502315055970743271822838e-0001L,
      162 +        1.702332233546316765818144723063881095577e-0001L,
      163 +        7.498098377690553934266423088708614219356e-0002L,
      164 +        2.050154396918178697056927234366372760310e-0002L,
      165 +        7.012988534031999899054782333851905939379e-0003L,
      166 +        1.149904787014400354649843451234570731076e-0003L,
      167 +        3.185620255011299476196039491205159718620e-0004L,
      168 +        1.273405072153008775426376193374105840517e-0005L,
      169 +        4.753866999959432971956781228148402971454e-0006L,
      170 +        -1.002287602111660026053981728549540200683e-0006L,
 166  171  };
      172 +
 167  173  /*
 168  174   * Rational erf(x) = ((float)0.95478588343) + P2(x-1.5)/Q2(x-1.5)
 169  175   * on [1.25,1.75]
 170  176   */
 171      -static long double C2   = (long double)((float)0.95478588343);
 172      -static long double P2[] = {     /*  12 top coeffs */
 173      -   1.131926304864446730135126164594785863512e-0002L,
 174      -   1.273617996967754151544330055186210322832e-0001L,
 175      -  -8.169980734667512519897816907190281143423e-0002L,
 176      -   9.512267486090321197833634271787944271746e-0002L,
 177      -  -2.394251569804872160005274999735914368170e-0002L,
 178      -   1.108768660227528667525252333184520222905e-0002L,
 179      -   3.527435492933902414662043314373277494221e-0004L,
 180      -   4.946116273341953463584319006669474625971e-0004L,
 181      -  -4.289851942513144714600285769022420962418e-0005L,
 182      -   8.304719841341952705874781636002085119978e-0005L,
 183      -  -1.040460226177309338781902252282849903189e-0005L,
 184      -   2.122913331584921470381327583672044434087e-0006L,
      177 +static long double C2 = (long double)((float)0.95478588343);
      178 +static long double P2[] = {             /*  12 top coeffs */
      179 +        1.131926304864446730135126164594785863512e-0002L,
      180 +        1.273617996967754151544330055186210322832e-0001L,
      181 +        -8.169980734667512519897816907190281143423e-0002L,
      182 +        9.512267486090321197833634271787944271746e-0002L,
      183 +        -2.394251569804872160005274999735914368170e-0002L,
      184 +        1.108768660227528667525252333184520222905e-0002L,
      185 +        3.527435492933902414662043314373277494221e-0004L,
      186 +        4.946116273341953463584319006669474625971e-0004L,
      187 +        -4.289851942513144714600285769022420962418e-0005L,
      188 +        8.304719841341952705874781636002085119978e-0005L,
      189 +        -1.040460226177309338781902252282849903189e-0005L,
      190 +        2.122913331584921470381327583672044434087e-0006L,
 185  191  };
 186      -static long double Q2[] = {     /*  13 bottom coeffs with leading 1.0 hidden */
 187      -   7.448815737306992749168727691042003832150e-0001L,
 188      -   7.161813850236008294484744312430122188043e-0001L,
 189      -   3.603134756584225766144922727405641236121e-0001L,
 190      -   1.955811609133766478080550795194535852653e-0001L,
 191      -   7.253059963716225972479693813787810711233e-0002L,
 192      -   2.752391253757421424212770221541238324978e-0002L,
 193      -   7.677654852085240257439050673446546828005e-0003L,
 194      -   2.141102244555509687346497060326630061069e-0003L,
 195      -   4.342123013830957093949563339130674364271e-0004L,
 196      -   8.664587895570043348530991997272212150316e-0005L,
 197      -   1.109201582511752087060167429397033701988e-0005L,
 198      -   1.357834375781831062713347000030984364311e-0006L,
 199      -   4.957746280594384997273090385060680016451e-0008L,
      192 +
      193 +static long double Q2[] = {    /*  13 bottom coeffs with leading 1.0 hidden */
      194 +        7.448815737306992749168727691042003832150e-0001L,
      195 +        7.161813850236008294484744312430122188043e-0001L,
      196 +        3.603134756584225766144922727405641236121e-0001L,
      197 +        1.955811609133766478080550795194535852653e-0001L,
      198 +        7.253059963716225972479693813787810711233e-0002L,
      199 +        2.752391253757421424212770221541238324978e-0002L,
      200 +        7.677654852085240257439050673446546828005e-0003L,
      201 +        2.141102244555509687346497060326630061069e-0003L,
      202 +        4.342123013830957093949563339130674364271e-0004L,
      203 +        8.664587895570043348530991997272212150316e-0005L,
      204 +        1.109201582511752087060167429397033701988e-0005L,
      205 +        1.357834375781831062713347000030984364311e-0006L,
      206 +        4.957746280594384997273090385060680016451e-0008L,
 200  207  };
      208 +
 201  209  /*
 202  210   * erfc(x) = exp(-x*x)/x * R1(1/x)/S1(1/x) on [1.75, 16/3]
 203  211   */
 204      -static long double R1[] = {     /*  14 top coeffs */
 205      -   4.630195122654315016370705767621550602948e+0006L,
 206      -   1.257949521746494830700654204488675713628e+0007L,
 207      -   1.704153822720260272814743497376181625707e+0007L,
 208      -   1.502600568706061872381577539537315739943e+0007L,
 209      -   9.543710793431995284827024445387333922861e+0006L,
 210      -   4.589344808584091011652238164935949522427e+0006L,
 211      -   1.714660662941745791190907071920671844289e+0006L,
 212      -   5.034802147768798894307672256192466283867e+0005L,
 213      -   1.162286400443554670553152110447126850725e+0005L,
 214      -   2.086643834548901681362757308058660399137e+0004L,
 215      -   2.839793161868140305907004392890348777338e+0003L,
 216      -   2.786687241658423601778258694498655680778e+0002L,
 217      -   1.779177837102695602425897452623985786464e+0001L,
 218      -   5.641895835477470769043614623819144434731e-0001L,
      212 +static long double R1[] = {             /*  14 top coeffs */
      213 +        4.630195122654315016370705767621550602948e+0006L,
      214 +        1.257949521746494830700654204488675713628e+0007L,
      215 +        1.704153822720260272814743497376181625707e+0007L,
      216 +        1.502600568706061872381577539537315739943e+0007L,
      217 +        9.543710793431995284827024445387333922861e+0006L,
      218 +        4.589344808584091011652238164935949522427e+0006L,
      219 +        1.714660662941745791190907071920671844289e+0006L,
      220 +        5.034802147768798894307672256192466283867e+0005L,
      221 +        1.162286400443554670553152110447126850725e+0005L,
      222 +        2.086643834548901681362757308058660399137e+0004L,
      223 +        2.839793161868140305907004392890348777338e+0003L,
      224 +        2.786687241658423601778258694498655680778e+0002L,
      225 +        1.779177837102695602425897452623985786464e+0001L,
      226 +        5.641895835477470769043614623819144434731e-0001L,
 219  227  };
 220      -static long double S1[] = {     /* 15 bottom coeffs with leading 1.0 hidden */
 221      -   4.630195122654331529595606896287596843110e+0006L,
 222      -   1.780411093345512024324781084220509055058e+0007L,
 223      -   3.250113097051800703707108623715776848283e+0007L,
 224      -   3.737857099176755050912193712123489115755e+0007L,
 225      -   3.029787497516578821459174055870781168593e+0007L,
 226      -   1.833850619965384765005769632103205777227e+0007L,
 227      -   8.562719999736915722210391222639186586498e+0006L,
 228      -   3.139684562074658971315545539760008136973e+0006L,
 229      -   9.106421313731384880027703627454366930945e+0005L,
 230      -   2.085108342384266508613267136003194920001e+0005L,
 231      -   3.723126272693120340730491416449539290600e+0004L,
 232      -   5.049169878567344046145695360784436929802e+0003L,
 233      -   4.944274532748010767670150730035392093899e+0002L,
 234      -   3.153510608818213929982940249162268971412e+0001L,
 235      -   1.0e00L,
      228 +
      229 +static long double S1[] = {     /* 15 bottom coeffs with leading 1.0 hidden */
      230 +        4.630195122654331529595606896287596843110e+0006L,
      231 +        1.780411093345512024324781084220509055058e+0007L,
      232 +        3.250113097051800703707108623715776848283e+0007L,
      233 +        3.737857099176755050912193712123489115755e+0007L,
      234 +        3.029787497516578821459174055870781168593e+0007L,
      235 +        1.833850619965384765005769632103205777227e+0007L,
      236 +        8.562719999736915722210391222639186586498e+0006L,
      237 +        3.139684562074658971315545539760008136973e+0006L,
      238 +        9.106421313731384880027703627454366930945e+0005L,
      239 +        2.085108342384266508613267136003194920001e+0005L,
      240 +        3.723126272693120340730491416449539290600e+0004L,
      241 +        5.049169878567344046145695360784436929802e+0003L,
      242 +        4.944274532748010767670150730035392093899e+0002L,
      243 +        3.153510608818213929982940249162268971412e+0001L,
      244 +        1.0e00L,
 236  245  };
 237  246  
 238  247  /*
 239  248   * erfc(x) = exp(-x*x)/x * R2(1/x)/S2(1/x) on [16/3, 107]
 240  249   */
 241      -static long double R2[] = {     /*  15 top coeffs in reverse order!!*/
 242      -   2.447288012254302966796326587537136931669e+0005L,
 243      -   8.768592567189861896653369912716538739016e+0005L,
 244      -   1.552293152581780065761497908005779524953e+0006L,
 245      -   1.792075924835942935864231657504259926729e+0006L,
 246      -   1.504001463155897344947500222052694835875e+0006L,
 247      -   9.699485556326891411801230186016013019935e+0005L,
 248      -   4.961449933661807969863435013364796037700e+0005L,
 249      -   2.048726544693474028061176764716228273791e+0005L,
 250      -   6.891532964330949722479061090551896886635e+0004L,
 251      -   1.888014709010307507771964047905823237985e+0004L,
 252      -   4.189692064988957745054734809642495644502e+0003L,
 253      -   7.362346487427048068212968889642741734621e+0002L,
 254      -   9.980359714211411423007641056580813116207e+0001L,
 255      -   9.426910895135379181107191962193485174159e+0000L,
 256      -   5.641895835477562869480794515623601280429e-0001L,
      250 +static long double R2[] = {     /*  15 top coeffs in reverse order!! */
      251 +        2.447288012254302966796326587537136931669e+0005L,
      252 +        8.768592567189861896653369912716538739016e+0005L,
      253 +        1.552293152581780065761497908005779524953e+0006L,
      254 +        1.792075924835942935864231657504259926729e+0006L,
      255 +        1.504001463155897344947500222052694835875e+0006L,
      256 +        9.699485556326891411801230186016013019935e+0005L,
      257 +        4.961449933661807969863435013364796037700e+0005L,
      258 +        2.048726544693474028061176764716228273791e+0005L,
      259 +        6.891532964330949722479061090551896886635e+0004L,
      260 +        1.888014709010307507771964047905823237985e+0004L,
      261 +        4.189692064988957745054734809642495644502e+0003L,
      262 +        7.362346487427048068212968889642741734621e+0002L,
      263 +        9.980359714211411423007641056580813116207e+0001L,
      264 +        9.426910895135379181107191962193485174159e+0000L,
      265 +        5.641895835477562869480794515623601280429e-0001L,
 257  266  };
 258      -static long double S2[] = {     /* 16 coefficients */
 259      -   2.447282203601902971246004716790604686880e+0005L,
 260      -   1.153009852759385309367759460934808489833e+0006L,
 261      -   2.608580649612639131548966265078663384849e+0006L,
 262      -   3.766673917346623308850202792390569025740e+0006L,
 263      -   3.890566255138383910789924920541335370691e+0006L,
 264      -   3.052882073900746207613166259994150527732e+0006L,
 265      -   1.885574519970380988460241047248519418407e+0006L,
 266      -   9.369722034759943185851450846811445012922e+0005L,
 267      -   3.792278350536686111444869752624492443659e+0005L,
 268      -   1.257750606950115799965366001773094058720e+0005L,
 269      -   3.410830600242369370645608634643620355058e+0004L,
 270      -   7.513984469742343134851326863175067271240e+0003L,
 271      -   1.313296320593190002554779998138695507840e+0003L,
 272      -   1.773972700887629157006326333696896516769e+0002L,
 273      -   1.670876451822586800422009013880457094162e+0001L,
 274      -   1.000L,
      267 +
      268 +static long double S2[] = {             /* 16 coefficients */
      269 +        2.447282203601902971246004716790604686880e+0005L,
      270 +        1.153009852759385309367759460934808489833e+0006L,
      271 +        2.608580649612639131548966265078663384849e+0006L,
      272 +        3.766673917346623308850202792390569025740e+0006L,
      273 +        3.890566255138383910789924920541335370691e+0006L,
      274 +        3.052882073900746207613166259994150527732e+0006L,
      275 +        1.885574519970380988460241047248519418407e+0006L,
      276 +        9.369722034759943185851450846811445012922e+0005L,
      277 +        3.792278350536686111444869752624492443659e+0005L,
      278 +        1.257750606950115799965366001773094058720e+0005L,
      279 +        3.410830600242369370645608634643620355058e+0004L,
      280 +        7.513984469742343134851326863175067271240e+0003L,
      281 +        1.313296320593190002554779998138695507840e+0003L,
      282 +        1.773972700887629157006326333696896516769e+0002L,
      283 +        1.670876451822586800422009013880457094162e+0001L,
      284 +        1.000L,
 275  285  };
 276  286  
 277      -long double erfl(x)
 278      -long double x;
      287 +long double
      288 +erfl(long double x)
 279  289  {
 280      -        long double erfcl(long double),s,y,t;
      290 +        long double erfcl(long double), s, y, t;
 281  291  
 282  292          if (!finitel(x)) {
 283      -            if (x != x) return x+x;     /* NaN */
 284      -            return copysignl(one,x);    /* return +-1.0 is x=Inf */
      293 +                if (x != x)
      294 +                        return (x + x);         /* NaN */
      295 +
      296 +                return (copysignl(one, x));     /* return +-1.0 is x=Inf */
 285  297          }
 286  298  
 287  299          y = fabsl(x);
      300 +
 288  301          if (y <= 0.84375L) {
 289      -            if (y<=tiny) return x+P[0]*x;
 290      -            s = y*y;
 291      -            t = __poly_libmq(s,21,P);
 292      -            return  x+x*t;
      302 +                if (y <= tiny)
      303 +                        return (x + P[0] * x);
      304 +
      305 +                s = y * y;
      306 +                t = __poly_libmq(s, 21, P);
      307 +                return (x + x * t);
 293  308          }
 294      -        if (y<=1.25L) {
 295      -            s = y-one;
 296      -            t = C1+__poly_libmq(s,12,P1)/(one+s*__poly_libmq(s,12,Q1));
 297      -            return (signbitl(x))? -t: t;
 298      -        } else if (y<=1.75L) {
 299      -            s = y-onehalf;
 300      -            t = C2+__poly_libmq(s,12,P2)/(one+s*__poly_libmq(s,13,Q2));
 301      -            return (signbitl(x))? -t: t;
      309 +
      310 +        if (y <= 1.25L) {
      311 +                s = y - one;
      312 +                t = C1 + __poly_libmq(s, 12, P1) / (one + s * __poly_libmq(s,
      313 +                    12, Q1));
      314 +                return ((signbitl(x)) ? -t : t);
      315 +        } else if (y <= 1.75L) {
      316 +                s = y - onehalf;
      317 +                t = C2 + __poly_libmq(s, 12, P2) / (one + s * __poly_libmq(s,
      318 +                    13, Q2));
      319 +                return ((signbitl(x)) ? -t : t);
 302  320          }
 303      -        if (y<=9.0L) t = erfcl(y); else t = tiny;
 304      -        return (signbitl(x))? t-one: one-t;
      321 +
      322 +        if (y <= 9.0L)
      323 +                t = erfcl(y);
      324 +        else
      325 +                t = tiny;
      326 +
      327 +        return ((signbitl(x)) ? t - one : one - t);
 305  328  }
 306  329  
 307      -long double erfcl(x)
 308      -long double x;
      330 +long double
      331 +erfcl(long double x)
 309  332  {
 310      -        long double erfl(long double),s,y,t;
      333 +        long double s, y, t;
 311  334  
 312  335          if (!finitel(x)) {
 313      -            if (x != x) return x+x;     /* NaN */
 314      -                                        /* return 2.0 if x= -inf
 315      -                                                  0.0 if x= +inf */
 316      -            if (x<0.0L) return 2.0L; else return 0.0L;
      336 +                if (x != x)
      337 +                        return (x + x);         /* NaN */
      338 +
      339 +                /*
      340 +                 * return 2.0 if x = -inf
      341 +                 *        0.0 if x = +inf
      342 +                 */
      343 +                if (x < 0.0L)
      344 +                        return (2.0L);
      345 +                else
      346 +                        return (0.0L);
 317  347          }
 318  348  
 319  349          if (x <= 0.84375L) {
 320      -            if (x<=0.25) return one-erfl(x);
 321      -            s = x*x;
 322      -            t = half-x;
 323      -            t = t - x*__poly_libmq(s,21,P);
 324      -            return  half+t;
      350 +                if (x <= 0.25)
      351 +                        return (one - erfl(x));
      352 +
      353 +                s = x * x;
      354 +                t = half - x;
      355 +                t = t - x * __poly_libmq(s, 21, P);
      356 +                return (half + t);
 325  357          }
 326      -        if (x<=1.25L) {
 327      -            s = x-one;
 328      -            t = one-C1;
 329      -            return t - __poly_libmq(s,12,P1)/(one+s*__poly_libmq(s,12,Q1));
 330      -        } else if (x<=1.75L) {
 331      -            s = x-onehalf;
 332      -            t = one-C2;
 333      -            return t - __poly_libmq(s,12,P2)/(one+s*__poly_libmq(s,13,Q2));
      358 +
      359 +        if (x <= 1.25L) {
      360 +                s = x - one;
      361 +                t = one - C1;
      362 +                return (t - __poly_libmq(s, 12, P1) / (one + s * __poly_libmq(s,
      363 +                    12, Q1)));
      364 +        } else if (x <= 1.75L) {
      365 +                s = x - onehalf;
      366 +                t = one - C2;
      367 +                return (t - __poly_libmq(s, 12, P2) / (one + s * __poly_libmq(s,
      368 +                    13, Q2)));
 334  369          }
 335      -        if (x>=107.0L) return nearunfl*nearunfl;                /* underflow */
 336      -        else if (x >= L16_3) {
 337      -            y = __poly_libmq(x,15,R2);
 338      -            t = y/__poly_libmq(x,16,S2);
      370 +
      371 +        if (x >= 107.0L) {
      372 +                return (nearunfl * nearunfl);   /* underflow */
      373 +        } else if (x >= L16_3) {
      374 +                y = __poly_libmq(x, 15, R2);
      375 +                t = y / __poly_libmq(x, 16, S2);
 339  376          } else {
 340      -            y = __poly_libmq(x,14,R1);
 341      -            t = y/__poly_libmq(x,15,S1);
      377 +                y = __poly_libmq(x, 14, R1);
      378 +                t = y / __poly_libmq(x, 15, S1);
 342  379          }
      380 +
 343  381          /* see comment in ../Q/erfl.c */
 344  382          y = x;
 345      -        *(int*)&y = 0;
 346      -        t *= expl(-y*y)*expl(-(x-y)*(x+y));
 347      -        return  t;
      383 +        *(int *)&y = 0;
      384 +        t *= expl(-y * y) * expl(-(x - y) * (x + y));
      385 +        return (t);
 348  386  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX