1 1.1 christos /* @(#)s_erf.c 5.1 93/09/24 */ 2 1.1 christos /* 3 1.1 christos * ==================================================== 4 1.1 christos * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 5 1.1 christos * 6 1.1 christos * Developed at SunPro, a Sun Microsystems, Inc. business. 7 1.1 christos * Permission to use, copy, modify, and distribute this 8 1.1 christos * software is freely granted, provided that this notice 9 1.1 christos * is preserved. 10 1.1 christos * ==================================================== 11 1.1 christos */ 12 1.1 christos 13 1.1 christos #include <sys/cdefs.h> 14 1.1 christos /* 15 1.1 christos * See s_erf.c for complete comments. 16 1.1 christos * 17 1.1 christos * Converted to long double by Steven G. Kargl. 18 1.1 christos */ 19 1.1 christos #include <float.h> 20 1.1 christos 21 1.1 christos #include "math.h" 22 1.1 christos #include "math_private.h" 23 1.1 christos 24 1.1 christos /* XXX Prevent compilers from erroneously constant folding: */ 25 1.1 christos static const volatile long double tiny = 0x1p-10000L; 26 1.1 christos 27 1.1 christos static const double 28 1.1 christos half= 0.5, 29 1.1 christos one = 1, 30 1.1 christos two = 2; 31 1.1 christos /* 32 1.1 christos * In the domain [0, 2**-34], only the first term in the power series 33 1.1 christos * expansion of erf(x) is used. The magnitude of the first neglected 34 1.1 christos * terms is less than 2**-102. 35 1.1 christos */ 36 1.1 christos static const union ieee_ext_u 37 1.1 christos efxu = LD80C(0x8375d410a6db446c, -3, 1.28379167095512573902e-1L), 38 1.1 christos efx8u = LD80C(0x8375d410a6db446c, 0, 1.02703333676410059122e+0L), 39 1.1 christos /* 40 1.1 christos * Domain [0, 0.84375], range ~[-1.423e-22, 1.423e-22]: 41 1.1 christos * |(erf(x) - x)/x - pp(x)/qq(x)| < 2**-72.573 42 1.1 christos */ 43 1.1 christos pp0u = LD80C(0x8375d410a6db446c, -3, 1.28379167095512573902e-1L), 44 1.1 christos pp1u = LD80C(0xa46c7d09ec3d0cec, -2, -3.21140201054840180596e-1L), 45 1.1 christos pp2u = LD80C(0x9b31e66325576f86, -5, -3.78893851760347812082e-2L), 46 1.1 christos pp3u = LD80C(0x804ac72c9a0b97dd, -7, -7.83032847030604679616e-3L), 47 1.1 christos pp4u = LD80C(0x9f42bcbc3d5a601d, -12, -3.03765663857082048459e-4L), 48 1.1 christos pp5u = LD80C(0x9ec4ad6193470693, -16, -1.89266527398167917502e-5L), 49 1.1 christos qq1u = LD80C(0xdb4b8eb713188d6b, -2, 4.28310832832310510579e-1L), 50 1.1 christos qq2u = LD80C(0xa5750835b2459bd1, -4, 8.07896272074540216658e-2L), 51 1.1 christos qq3u = LD80C(0x8b85d6bd6a90b51c, -7, 8.51579638189385354266e-3L), 52 1.1 christos qq4u = LD80C(0x87332f82cff4ff96, -11, 5.15746855583604912827e-4L), 53 1.1 christos qq5u = LD80C(0x83466cb6bf9dca00, -16, 1.56492109706256700009e-5L), 54 1.1 christos qq6u = LD80C(0xf5bf98c2f996bf63, -24, 1.14435527803073879724e-7L); 55 1.1 christos #define efx (efxu.extu_ld) 56 1.1 christos #define efx8 (efx8u.extu_ld) 57 1.1 christos #define pp0 (pp0u.extu_ld) 58 1.1 christos #define pp1 (pp1u.extu_ld) 59 1.1 christos #define pp2 (pp2u.extu_ld) 60 1.1 christos #define pp3 (pp3u.extu_ld) 61 1.1 christos #define pp4 (pp4u.extu_ld) 62 1.1 christos #define pp5 (pp5u.extu_ld) 63 1.1 christos #define qq1 (qq1u.extu_ld) 64 1.1 christos #define qq2 (qq2u.extu_ld) 65 1.1 christos #define qq3 (qq3u.extu_ld) 66 1.1 christos #define qq4 (qq4u.extu_ld) 67 1.1 christos #define qq5 (qq5u.extu_ld) 68 1.1 christos #define qq6 (qq6u.extu_ld) 69 1.1 christos static const union ieee_ext_u 70 1.1 christos erxu = LD80C(0xd7bb3d0000000000, -1, 8.42700779438018798828e-1L), 71 1.1 christos /* 72 1.1 christos * Domain [0.84375, 1.25], range ~[-8.132e-22, 8.113e-22]: 73 1.1 christos * |(erf(x) - erx) - pa(x)/qa(x)| < 2**-71.762 74 1.1 christos */ 75 1.1 christos pa0u = LD80C(0xe8211158da02c692, -27, 1.35116960705131296711e-8L), 76 1.1 christos pa1u = LD80C(0xd488f89f36988618, -2, 4.15107507167065612570e-1L), 77 1.1 christos pa2u = LD80C(0xece74f8c63fa3942, -4, -1.15675565215949226989e-1L), 78 1.1 christos pa3u = LD80C(0xc8d31e020727c006, -4, 9.80589241379624665791e-2L), 79 1.1 christos pa4u = LD80C(0x985d5d5fafb0551f, -5, 3.71984145558422368847e-2L), 80 1.1 christos pa5u = LD80C(0xa5b6c4854d2f5452, -8, -5.05718799340957673661e-3L), 81 1.1 christos pa6u = LD80C(0x85c8d58fe3993a47, -8, 4.08277919612202243721e-3L), 82 1.1 christos pa7u = LD80C(0xddbfbc23677b35cf, -13, 2.11476292145347530794e-4L), 83 1.1 christos qa1u = LD80C(0xb8a977896f5eff3f, -1, 7.21335860303380361298e-1L), 84 1.1 christos qa2u = LD80C(0x9fcd662c3d4eac86, -1, 6.24227891731886593333e-1L), 85 1.1 christos qa3u = LD80C(0x9d0b618eac67ba07, -2, 3.06727455774491855801e-1L), 86 1.1 christos qa4u = LD80C(0x881a4293f6d6c92d, -3, 1.32912674218195890535e-1L), 87 1.1 christos qa5u = LD80C(0xbab144f07dea45bf, -5, 4.55792134233613027584e-2L), 88 1.1 christos qa6u = LD80C(0xa6c34ba438bdc900, -7, 1.01783980070527682680e-2L), 89 1.1 christos qa7u = LD80C(0x8fa866dc20717a91, -9, 2.19204436518951438183e-3L); 90 1.1 christos #define erx (erxu.extu_ld) 91 1.1 christos #define pa0 (pa0u.extu_ld) 92 1.1 christos #define pa1 (pa1u.extu_ld) 93 1.1 christos #define pa2 (pa2u.extu_ld) 94 1.1 christos #define pa3 (pa3u.extu_ld) 95 1.1 christos #define pa4 (pa4u.extu_ld) 96 1.1 christos #define pa5 (pa5u.extu_ld) 97 1.1 christos #define pa6 (pa6u.extu_ld) 98 1.1 christos #define pa7 (pa7u.extu_ld) 99 1.1 christos #define qa1 (qa1u.extu_ld) 100 1.1 christos #define qa2 (qa2u.extu_ld) 101 1.1 christos #define qa3 (qa3u.extu_ld) 102 1.1 christos #define qa4 (qa4u.extu_ld) 103 1.1 christos #define qa5 (qa5u.extu_ld) 104 1.1 christos #define qa6 (qa6u.extu_ld) 105 1.1 christos #define qa7 (qa7u.extu_ld) 106 1.1 christos static const union ieee_ext_u 107 1.1 christos /* 108 1.1 christos * Domain [1.25,2.85715], range ~[-2.334e-22,2.334e-22]: 109 1.1 christos * |log(x*erfc(x)) + x**2 + 0.5625 - ra(x)/sa(x)| < 2**-71.860 110 1.1 christos */ 111 1.1 christos ra0u = LD80C(0xa1a091e0fb4f335a, -7, -9.86494298915814308249e-3L), 112 1.1 christos ra1u = LD80C(0xc2b0d045ae37df6b, -1, -7.60510460864878271275e-1L), 113 1.1 christos ra2u = LD80C(0xf2cec3ee7da636c5, 3, -1.51754798236892278250e+1L), 114 1.1 christos ra3u = LD80C(0x813cc205395adc7d, 7, -1.29237335516455333420e+2L), 115 1.1 christos ra4u = LD80C(0x8737c8b7b4062c2f, 9, -5.40871625829510494776e+2L), 116 1.1 christos ra5u = LD80C(0x8ffe5383c08d4943, 10, -1.15194769466026108551e+3L), 117 1.1 christos ra6u = LD80C(0x983573e64d5015a9, 10, -1.21767039790249025544e+3L), 118 1.1 christos ra7u = LD80C(0x92a794e763a6d4db, 9, -5.86618463370624636688e+2L), 119 1.1 christos ra8u = LD80C(0xd5ad1fae77c3d9a3, 6, -1.06838132335777049840e+2L), 120 1.1 christos ra9u = LD80C(0x934c1a247807bb9c, 2, -4.60303980944467334806e+0L), 121 1.1 christos sa1u = LD80C(0xd342f90012bb1189, 4, 2.64077014928547064865e+1L), 122 1.1 christos sa2u = LD80C(0x839be13d9d5da883, 8, 2.63217811300123973067e+2L), 123 1.1 christos sa3u = LD80C(0x9f8cba6d1ae1b24b, 10, 1.27639775710344617587e+3L), 124 1.1 christos sa4u = LD80C(0xcaa83f403713e33e, 11, 3.24251544209971162003e+3L), 125 1.1 christos sa5u = LD80C(0x8796aff2f3c47968, 12, 4.33883591261332837874e+3L), 126 1.1 christos sa6u = LD80C(0xb6ef97f9c753157b, 11, 2.92697460344182158454e+3L), 127 1.1 christos sa7u = LD80C(0xe02aee5f83773d1c, 9, 8.96670799139389559818e+2L), 128 1.1 christos sa8u = LD80C(0xc82b83855b88e07e, 6, 1.00084987800048510018e+2L), 129 1.1 christos sa9u = LD80C(0x92f030aefadf28ad, 1, 2.29591004455459083843e+0L); 130 1.1 christos #define ra0 (ra0u.extu_ld) 131 1.1 christos #define ra1 (ra1u.extu_ld) 132 1.1 christos #define ra2 (ra2u.extu_ld) 133 1.1 christos #define ra3 (ra3u.extu_ld) 134 1.1 christos #define ra4 (ra4u.extu_ld) 135 1.1 christos #define ra5 (ra5u.extu_ld) 136 1.1 christos #define ra6 (ra6u.extu_ld) 137 1.1 christos #define ra7 (ra7u.extu_ld) 138 1.1 christos #define ra8 (ra8u.extu_ld) 139 1.1 christos #define ra9 (ra9u.extu_ld) 140 1.1 christos #define sa1 (sa1u.extu_ld) 141 1.1 christos #define sa2 (sa2u.extu_ld) 142 1.1 christos #define sa3 (sa3u.extu_ld) 143 1.1 christos #define sa4 (sa4u.extu_ld) 144 1.1 christos #define sa5 (sa5u.extu_ld) 145 1.1 christos #define sa6 (sa6u.extu_ld) 146 1.1 christos #define sa7 (sa7u.extu_ld) 147 1.1 christos #define sa8 (sa8u.extu_ld) 148 1.1 christos #define sa9 (sa9u.extu_ld) 149 1.1 christos /* 150 1.1 christos * Domain [2.85715,7], range ~[-8.323e-22,8.390e-22]: 151 1.1 christos * |log(x*erfc(x)) + x**2 + 0.5625 - rb(x)/sb(x)| < 2**-70.326 152 1.1 christos */ 153 1.1 christos static const union ieee_ext_u 154 1.1 christos rb0u = LD80C(0xa1a091cf43abcd26, -7, -9.86494292470284646962e-3L), 155 1.1 christos rb1u = LD80C(0xd19d2df1cbb8da0a, -1, -8.18804618389296662837e-1L), 156 1.1 christos rb2u = LD80C(0x9a4dd1383e5daf5b, 4, -1.92879967111618594779e+1L), 157 1.1 christos rb3u = LD80C(0xbff0ae9fc0751de6, 7, -1.91940164551245394969e+2L), 158 1.1 christos rb4u = LD80C(0xdde08465310b472b, 9, -8.87508080766577324539e+2L), 159 1.1 christos rb5u = LD80C(0xe796e1d38c8c70a9, 10, -1.85271506669474503781e+3L), 160 1.1 christos rb6u = LD80C(0xbaf655a76e0ab3b5, 10, -1.49569795581333675349e+3L), 161 1.1 christos rb7u = LD80C(0x95d21e3e75503c21, 8, -2.99641547972948019157e+2L), 162 1.1 christos sb1u = LD80C(0x814487ed823c8cbd, 5, 3.23169247732868256569e+1L), 163 1.1 christos sb2u = LD80C(0xbe4bfbb1301304be, 8, 3.80593618534539961773e+2L), 164 1.1 christos sb3u = LD80C(0x809c4ade46b927c7, 11, 2.05776827838541292848e+3L), 165 1.1 christos sb4u = LD80C(0xa55284359f3395a8, 12, 5.29031455540062116327e+3L), 166 1.1 christos sb5u = LD80C(0xbcfa72da9b820874, 12, 6.04730608102312640462e+3L), 167 1.1 christos sb6u = LD80C(0x9d09a35988934631, 11, 2.51260238030767176221e+3L), 168 1.1 christos sb7u = LD80C(0xd675bbe542c159fa, 7, 2.14459898308561015684e+2L); 169 1.1 christos #define rb0 (rb0u.extu_ld) 170 1.1 christos #define rb1 (rb1u.extu_ld) 171 1.1 christos #define rb2 (rb2u.extu_ld) 172 1.1 christos #define rb3 (rb3u.extu_ld) 173 1.1 christos #define rb4 (rb4u.extu_ld) 174 1.1 christos #define rb5 (rb5u.extu_ld) 175 1.1 christos #define rb6 (rb6u.extu_ld) 176 1.1 christos #define rb7 (rb7u.extu_ld) 177 1.1 christos #define sb1 (sb1u.extu_ld) 178 1.1 christos #define sb2 (sb2u.extu_ld) 179 1.1 christos #define sb3 (sb3u.extu_ld) 180 1.1 christos #define sb4 (sb4u.extu_ld) 181 1.1 christos #define sb5 (sb5u.extu_ld) 182 1.1 christos #define sb6 (sb6u.extu_ld) 183 1.1 christos #define sb7 (sb7u.extu_ld) 184 1.1 christos /* 185 1.1 christos * Domain [7,108], range ~[-4.422e-22,4.422e-22]: 186 1.1 christos * |log(x*erfc(x)) + x**2 + 0.5625 - rc(x)/sc(x)| < 2**-70.938 187 1.1 christos */ 188 1.1 christos static const union ieee_ext_u 189 1.1 christos /* err = -4.422092275318925082e-22 -70.937689 */ 190 1.1 christos rc0u = LD80C(0xa1a091cf437a17ad, -7, -9.86494292470008707260e-3L), 191 1.1 christos rc1u = LD80C(0xbe79c5a978122b00, -1, -7.44045595049165939261e-1L), 192 1.1 christos rc2u = LD80C(0xdb26f9bbe31a2794, 3, -1.36970155085888424425e+1L), 193 1.1 christos rc3u = LD80C(0xb5f69a38f5747ac8, 6, -9.09816453742625888546e+1L), 194 1.1 christos rc4u = LD80C(0xd79676d970d0a21a, 7, -2.15587750997584074147e+2L), 195 1.1 christos rc5u = LD80C(0xfe528153c45ec97c, 6, -1.27161142938347796666e+2L), 196 1.1 christos sc1u = LD80C(0xc5e8cd46d5604a96, 4, 2.47386727842204312937e+1L), 197 1.1 christos sc2u = LD80C(0xc5f0f5a5484520eb, 7, 1.97941248254913378865e+2L), 198 1.1 christos sc3u = LD80C(0x964e3c7b34db9170, 9, 6.01222441484087787522e+2L), 199 1.1 christos sc4u = LD80C(0x99be1b89faa0596a, 9, 6.14970430845978077827e+2L), 200 1.1 christos sc5u = LD80C(0xf80dfcbf37ffc5ea, 6, 1.24027318931184605891e+2L); 201 1.1 christos #define rc0 (rc0u.extu_ld) 202 1.1 christos #define rc1 (rc1u.extu_ld) 203 1.1 christos #define rc2 (rc2u.extu_ld) 204 1.1 christos #define rc3 (rc3u.extu_ld) 205 1.1 christos #define rc4 (rc4u.extu_ld) 206 1.1 christos #define rc5 (rc5u.extu_ld) 207 1.1 christos #define sc1 (sc1u.extu_ld) 208 1.1 christos #define sc2 (sc2u.extu_ld) 209 1.1 christos #define sc3 (sc3u.extu_ld) 210 1.1 christos #define sc4 (sc4u.extu_ld) 211 1.1 christos #define sc5 (sc5u.extu_ld) 212 1.1 christos 213 1.1 christos long double 214 1.1 christos erfl(long double x) 215 1.1 christos { 216 1.1 christos long double ax,R,S,P,Q,s,y,z,r; 217 1.1 christos uint64_t lx __unused; 218 1.1 christos int32_t i; 219 1.1 christos uint16_t hx; 220 1.1 christos 221 1.1 christos EXTRACT_LDBL80_WORDS(hx, lx, x); 222 1.1 christos 223 1.1 christos if((hx & 0x7fff) == 0x7fff) { /* erfl(nan)=nan */ 224 1.1 christos i = (hx>>15)<<1; 225 1.1 christos return (1-i)+one/x; /* erfl(+-inf)=+-1 */ 226 1.1 christos } 227 1.1 christos 228 1.1 christos ENTERI(); 229 1.1 christos 230 1.1 christos ax = fabsl(x); 231 1.1 christos if(ax < 0.84375) { 232 1.1 christos if(ax < 0x1p-34L) { 233 1.1 christos if(ax < 0x1p-16373L) 234 1.1 christos RETURNI((8*x+efx8*x)/8); /* avoid spurious underflow */ 235 1.1 christos RETURNI(x + efx*x); 236 1.1 christos } 237 1.1 christos z = x*x; 238 1.1 christos r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*pp5)))); 239 1.1 christos s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*qq6))))); 240 1.1 christos y = r/s; 241 1.1 christos RETURNI(x + x*y); 242 1.1 christos } 243 1.1 christos if(ax < 1.25) { 244 1.1 christos s = ax-one; 245 1.1 christos P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*pa7)))))); 246 1.1 christos Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*qa7)))))); 247 1.1 christos if(x>=0) RETURNI(erx + P/Q); else RETURNI(-erx - P/Q); 248 1.1 christos } 249 1.1 christos if(ax >= 7) { /* inf>|x|>= 7 */ 250 1.1 christos if(x>=0) RETURNI(one-tiny); else RETURNI(tiny-one); 251 1.1 christos } 252 1.1 christos s = one/(ax*ax); 253 1.1 christos if(ax < 2.85715) { /* |x| < 2.85715 */ 254 1.1 christos R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ 255 1.1 christos s*(ra8+s*ra9)))))))); 256 1.1 christos S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ 257 1.1 christos s*(sa8+s*sa9)))))))); 258 1.1 christos } else { /* |x| >= 2.85715 */ 259 1.1 christos R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*rb7)))))); 260 1.1 christos S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*sb7)))))); 261 1.1 christos } 262 1.1 christos z=(float)ax; 263 1.1 christos r=expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); 264 1.1 christos if(x>=0) RETURNI(one-r/ax); else RETURNI(r/ax-one); 265 1.1 christos } 266 1.1 christos 267 1.1 christos long double 268 1.1 christos erfcl(long double x) 269 1.1 christos { 270 1.1 christos long double ax,R,S,P,Q,s,y,z,r; 271 1.1 christos uint64_t lx __unused; 272 1.1 christos uint16_t hx; 273 1.1 christos 274 1.1 christos EXTRACT_LDBL80_WORDS(hx, lx, x); 275 1.1 christos 276 1.1 christos if((hx & 0x7fff) == 0x7fff) { /* erfcl(nan)=nan */ 277 1.1 christos /* erfcl(+-inf)=0,2 */ 278 1.1 christos return ((hx>>15)<<1)+one/x; 279 1.1 christos } 280 1.1 christos 281 1.1 christos ENTERI(); 282 1.1 christos 283 1.1 christos ax = fabsl(x); 284 1.1 christos if(ax < 0.84375L) { 285 1.1 christos if(ax < 0x1p-34L) 286 1.1 christos RETURNI(one-x); 287 1.1 christos z = x*x; 288 1.1 christos r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*pp5)))); 289 1.1 christos s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*qq6))))); 290 1.1 christos y = r/s; 291 1.1 christos if(ax < 0.25L) { /* x<1/4 */ 292 1.1 christos RETURNI(one-(x+x*y)); 293 1.1 christos } else { 294 1.1 christos r = x*y; 295 1.1 christos r += (x-half); 296 1.1 christos RETURNI(half - r); 297 1.1 christos } 298 1.1 christos } 299 1.1 christos if(ax < 1.25L) { 300 1.1 christos s = ax-one; 301 1.1 christos P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*pa7)))))); 302 1.1 christos Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*qa7)))))); 303 1.1 christos if(x>=0) { 304 1.1 christos z = one-erx; RETURNI(z - P/Q); 305 1.1 christos } else { 306 1.1 christos z = (erx+P/Q); RETURNI(one+z); 307 1.1 christos } 308 1.1 christos } 309 1.1 christos 310 1.1 christos if(ax < 108) { /* |x| < 108 */ 311 1.1 christos s = one/(ax*ax); 312 1.1 christos if(ax < 2.85715) { /* |x| < 2.85715 */ 313 1.1 christos R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ 314 1.1 christos s*(ra8+s*ra9)))))))); 315 1.1 christos S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ 316 1.1 christos s*(sa8+s*sa9)))))))); 317 1.1 christos } else if(ax < 7) { /* | |x| < 7 */ 318 1.1 christos R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*rb7)))))); 319 1.1 christos S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*sb7)))))); 320 1.1 christos } else { 321 1.1 christos if(x < -7) RETURNI(two-tiny);/* x < -7 */ 322 1.1 christos R=rc0+s*(rc1+s*(rc2+s*(rc3+s*(rc4+s*rc5)))); 323 1.1 christos S=one+s*(sc1+s*(sc2+s*(sc3+s*(sc4+s*sc5)))); 324 1.1 christos } 325 1.1 christos z = (float)ax; 326 1.1 christos r = expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); 327 1.1 christos if(x>0) RETURNI(r/ax); else RETURNI(two-r/ax); 328 1.1 christos } else { 329 1.1 christos if(x>0) RETURNI(tiny*tiny); else RETURNI(two-tiny); 330 1.1 christos } 331 1.1 christos } 332