ComPWA
Common Partial-Wave-Analysis Framework
Faddeeva.cc
Go to the documentation of this file.
1 // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; -*-
7 
8 /* Copyright (c) 2012 Massachusetts Institute of Technology
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining
11  * a copy of this software and associated documentation files (the
12  * "Software"), to deal in the Software without restriction, including
13  * without limitation the rights to use, copy, modify, merge, publish,
14  * distribute, sublicense, and/or sell copies of the Software, and to
15  * permit persons to whom the Software is furnished to do so, subject to
16  * the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be
19  * included in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28  */
29 
30 /* (Note that this file can be compiled with either C++, in which
31  case it uses C++ std::complex<double>, or C, in which case it
32  uses C99 double complex.) */
33 
34 /* Available at: http://ab-initio.mit.edu/Faddeeva
35 
36  Computes various error functions (erf, erfc, erfi, erfcx),
37  including the Dawson integral, in the complex plane, based
38  on algorithms for the computation of the Faddeeva function
39  w(z) = exp(-z^2) * erfc(-i*z).
40  Given w(z), the error functions are mostly straightforward
41  to compute, except for certain regions where we have to
42  switch to Taylor expansions to avoid cancellation errors
43  [e.g. near the origin for erf(z)].
44 
45  To compute the Faddeeva function, we use a combination of two
46  algorithms:
47 
48  For sufficiently large |z|, we use a continued-fraction expansion
49  for w(z) similar to those described in:
50 
51  Walter Gautschi, "Efficient computation of the complex error
52  function," SIAM J. Numer. Anal. 7(1), pp. 187-198 (1970)
53 
54  G. P. M. Poppe and C. M. J. Wijers, "More efficient computation
55  of the complex error function," ACM Trans. Math. Soft. 16(1),
56  pp. 38-46 (1990).
57 
58  Unlike those papers, however, we switch to a completely different
59  algorithm for smaller |z|:
60 
61  Mofreh R. Zaghloul and Ahmed N. Ali, "Algorithm 916: Computing the
62  Faddeyeva and Voigt Functions," ACM Trans. Math. Soft. 38(2), 15
63  (2011).
64 
65  (I initially used this algorithm for all z, but it turned out to be
66  significantly slower than the continued-fraction expansion for
67  larger |z|. On the other hand, it is competitive for smaller |z|,
68  and is significantly more accurate than the Poppe & Wijers code
69  in some regions, e.g. in the vicinity of z=1+1i.)
70 
71  Note that this is an INDEPENDENT RE-IMPLEMENTATION of these algorithms,
72  based on the description in the papers ONLY. In particular, I did
73  not refer to the authors' Fortran or Matlab implementations, respectively,
74  (which are under restrictive ACM copyright terms and therefore unusable
75  in free/open-source software).
76 
77  Steven G. Johnson, Massachusetts Institute of Technology
78  http://math.mit.edu/~stevenj
79  October 2012.
80 
81  -- Note that Algorithm 916 assumes that the erfc(x) function,
82  or rather the scaled function erfcx(x) = exp(x*x)*erfc(x),
83  is supplied for REAL arguments x. I originally used an
84  erfcx routine derived from DERFC in SLATEC, but I have
85  since replaced it with a much faster routine written by
86  me which uses a combination of continued-fraction expansions
87  and a lookup table of Chebyshev polynomials. For speed,
88  I implemented a similar algorithm for Im[w(x)] of real x,
89  since this comes up frequently in the other error functions.
90 
91  A small test program is included the end, which checks
92  the w(z) etc. results against several known values. To compile
93  the test function, compile with -DTEST_FADDEEVA (that is,
94  #define TEST_FADDEEVA).
95 
96  If HAVE_CONFIG_H is #defined (e.g. by compiling with -DHAVE_CONFIG_H),
97  then we #include "config.h", which is assumed to be a GNU autoconf-style
98  header defining HAVE_* macros to indicate the presence of features. In
99  particular, if HAVE_ISNAN and HAVE_ISINF are #defined, we use those
100  functions in math.h instead of defining our own, and if HAVE_ERF and/or
101  HAVE_ERFC are defined we use those functions from <cmath> for erf and
102  erfc of real arguments, respectively, instead of defining our own.
103 
104  REVISION HISTORY:
105  4 October 2012: Initial public release (SGJ)
106  5 October 2012: Revised (SGJ) to fix spelling error,
107  start summation for large x at round(x/a) (> 1)
108  rather than ceil(x/a) as in the original
109  paper, which should slightly improve performance
110  (and, apparently, slightly improves accuracy)
111  19 October 2012: Revised (SGJ) to fix bugs for large x, large -y,
112  and 15<x<26. Performance improvements. Prototype
113  now supplies default value for relerr.
114  24 October 2012: Switch to continued-fraction expansion for
115  sufficiently large z, for performance reasons.
116  Also, avoid spurious overflow for |z| > 1e154.
117  Set relerr argument to min(relerr,0.1).
118  27 October 2012: Enhance accuracy in Re[w(z)] taken by itself,
119  by switching to Alg. 916 in a region near
120  the real-z axis where continued fractions
121  have poor relative accuracy in Re[w(z)]. Thanks
122  to M. Zaghloul for the tip.
123  29 October 2012: Replace SLATEC-derived erfcx routine with
124  completely rewritten code by me, using a very
125  different algorithm which is much faster.
126  30 October 2012: Implemented special-case code for real z
127  (where real part is exp(-x^2) and imag part is
128  Dawson integral), using algorithm similar to erfx.
129  Export ImFaddeeva_w function to make Dawson's
130  integral directly accessible.
131  3 November 2012: Provide implementations of erf, erfc, erfcx,
132  and Dawson functions in Faddeeva:: namespace,
133  in addition to Faddeeva::w. Provide header
134  file Faddeeva.hh.
135  4 November 2012: Slightly faster erf for real arguments.
136  Updated MATLAB and Octave plugins.
137  27 November 2012: Support compilation with either C++ or
138  plain C (using C99 complex numbers).
139  For real x, use standard-library erf(x)
140  and erfc(x) if available (for C99 or C++11).
141  #include "config.h" if HAVE_CONFIG_H is #defined.
142  15 December 2012: Portability fixes (copysign, Inf/NaN creation),
143  use CMPLX/__builtin_complex if available in C,
144  slight accuracy improvements to erf and dawson
145  functions near the origin. Use gnulib functions
146  if GNULIB_NAMESPACE is defined.
147  18 December 2012: Slight tweaks (remove recomputation of x*x in Dawson)
148  12 May 2015: Bugfix for systems lacking copysign function.
149 */
150 
152 /* If this file is compiled as a part of a larger project,
153  support using an autoconf-style config.h header file
154  (with various "HAVE_*" #defines to indicate features)
155  if HAVE_CONFIG_H is #defined (in GNU autotools style). */
156 
157 #ifdef HAVE_CONFIG_H
158 #include "config.h"
159 #endif
160 
162 // macros to allow us to use either C++ or C (with C99 features)
163 
164 #ifdef __cplusplus
165 
166 #include "../../Dynamics/Utils/Faddeeva.hh"
167 
168 #include <cfloat>
169 #include <cmath>
170 #include <limits>
171 using namespace std;
172 
173 // use std::numeric_limits, since 1./0. and 0./0. fail with some compilers (MS)
174 #define Inf numeric_limits<double>::infinity()
175 #define NaN numeric_limits<double>::quiet_NaN()
176 
177 typedef complex<double> cmplx;
178 
179 // Use C-like complex syntax, since the C syntax is more restrictive
180 #define cexp(z) exp(z)
181 #define creal(z) real(z)
182 #define cimag(z) imag(z)
183 #define cpolar(r, t) polar(r, t)
184 
185 #define C(a, b) cmplx(a, b)
186 
187 #define FADDEEVA(name) Faddeeva::name
188 #define FADDEEVA_RE(name) Faddeeva::name
189 
190 // isnan/isinf were introduced in C++11
191 #if (__cplusplus < 201103L) && (!defined(HAVE_ISNAN) || !defined(HAVE_ISINF))
192 static inline bool my_isnan(double x) { return x != x; }
193 #define isnan my_isnan
194 static inline bool my_isinf(double x) { return 1 / x == 0.; }
195 #define isinf my_isinf
196 #elif (__cplusplus >= 201103L)
197 // g++ gets confused between the C and C++ isnan/isinf functions
198 #define isnan std::isnan
199 #define isinf std::isinf
200 #endif
201 
202 // copysign was introduced in C++11 (and is also in POSIX and C99)
203 #if defined(_WIN32) || defined(__WIN32__)
204 #define copysign _copysign // of course MS had to be different
205 #elif defined(GNULIB_NAMESPACE) // we are using using gnulib <cmath>
206 #define copysign GNULIB_NAMESPACE::copysign
207 #elif (__cplusplus < 201103L) && !defined(HAVE_COPYSIGN) && \
208  !defined(__linux__) && !(defined(__APPLE__) && defined(__MACH__)) && \
209  !defined(_AIX)
210 static inline double my_copysign(double x, double y) {
211  return x < 0 != y < 0 ? -x : x;
212 }
213 #define copysign my_copysign
214 #endif
215 
216 // If we are using the gnulib <cmath> (e.g. in the GNU Octave sources),
217 // gnulib generates a link warning if we use ::floor instead of gnulib::floor.
218 // This warning is completely innocuous because the only difference between
219 // gnulib::floor and the system ::floor (and only on ancient OSF systems)
220 // has to do with floor(-0), which doesn't occur in the usage below, but
221 // the Octave developers prefer that we silence the warning.
222 #ifdef GNULIB_NAMESPACE
223 #define floor GNULIB_NAMESPACE::floor
224 #endif
225 
226 #else // !__cplusplus, i.e. pure C (requires C99 features)
227 
228 #include "Faddeeva.h"
229 
230 #define _GNU_SOURCE // enable GNU libc NAN extension if possible
231 
232 #include <float.h>
233 #include <math.h>
234 
235 typedef double complex cmplx;
236 
237 #define FADDEEVA(name) Faddeeva_##name
238 #define FADDEEVA_RE(name) Faddeeva_##name##_re
239 
240 /* Constructing complex numbers like 0+i*NaN is problematic in C99
241  without the C11 CMPLX macro, because 0.+I*NAN may give NaN+i*NAN if
242  I is a complex (rather than imaginary) constant. For some reason,
243  however, it works fine in (pre-4.7) gcc if I define Inf and NaN as
244  1/0 and 0/0 (and only if I compile with optimization -O1 or more),
245  but not if I use the INFINITY or NAN macros. */
246 
247 /* __builtin_complex was introduced in gcc 4.7, but the C11 CMPLX macro
248  may not be defined unless we are using a recent (2012) version of
249  glibc and compile with -std=c11... note that icc lies about being
250  gcc and probably doesn't have this builtin(?), so exclude icc explicitly */
251 #if !defined(CMPLX) && \
252  (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && \
253  !(defined(__ICC) || defined(__INTEL_COMPILER))
254 #define CMPLX(a, b) __builtin_complex((double)(a), (double)(b))
255 #endif
256 
257 #ifdef CMPLX // C11
258 #define C(a, b) CMPLX(a, b)
259 #define Inf INFINITY // C99 infinity
260 #ifdef NAN // GNU libc extension
261 #define NaN NAN
262 #else
263 #define NaN (0. / 0.) // NaN
264 #endif
265 #else
266 #define C(a, b) ((a) + I * (b))
267 #define Inf (1. / 0.)
268 #define NaN (0. / 0.)
269 #endif
270 
271 static inline cmplx cpolar(double r, double t) {
272  if (r == 0.0 && !isnan(t))
273  return 0.0;
274  else
275  return C(r * cos(t), r * sin(t));
276 }
277 
278 #endif // !__cplusplus, i.e. pure C (requires C99 features)
279 
281 // Auxiliary routines to compute other special functions based on w(z)
282 
283 // compute erfcx(z) = exp(z^2) erfz(z)
284 cmplx FADDEEVA(erfcx)(cmplx z, double relerr) {
285  return FADDEEVA(w)(C(-cimag(z), creal(z)), relerr);
286 }
287 
288 // compute the error function erf(x)
289 double FADDEEVA_RE(erf)(double x) {
290 #if !defined(__cplusplus)
291  return erf(x); // C99 supplies erf in math.h
292 #elif (__cplusplus >= 201103L) || defined(HAVE_ERF)
293  return ::erf(x); // C++11 supplies std::erf in cmath
294 #else
295  double mx2 = -x * x;
296  if (mx2 < -750) // underflow
297  return (x >= 0 ? 1.0 : -1.0);
298 
299  if (x >= 0) {
300  if (x < 8e-2)
301  goto taylor;
302  return 1.0 - exp(mx2) * FADDEEVA_RE(erfcx)(x);
303  } else { // x < 0
304  if (x > -8e-2)
305  goto taylor;
306  return exp(mx2) * FADDEEVA_RE(erfcx)(-x) - 1.0;
307  }
308 
309  // Use Taylor series for small |x|, to avoid cancellation inaccuracy
310  // erf(x) = 2/sqrt(pi) * x * (1 - x^2/3 + x^4/10 - x^6/42 + x^8/216 + ...)
311 taylor:
312  return x * (1.1283791670955125739 +
313  mx2 * (0.37612638903183752464 +
314  mx2 * (0.11283791670955125739 +
315  mx2 * (0.026866170645131251760 +
316  mx2 * 0.0052239776254421878422))));
317 #endif
318 }
319 
320 // compute the error function erf(z)
321 cmplx FADDEEVA(erf)(cmplx z, double relerr) {
322  double x = creal(z), y = cimag(z);
323 
324  if (y == 0)
325  return C(FADDEEVA_RE(erf)(x),
326  y); // preserve sign of 0
327  if (x == 0) // handle separately for speed & handling of y = Inf or NaN
328  return C(x, // preserve sign of 0
329  /* handle y -> Inf limit manually, since
330  exp(y^2) -> Inf but Im[w(y)] -> 0, so
331  IEEE will give us a NaN when it should be Inf */
332  y * y > 720 ? (y > 0 ? Inf : -Inf)
333  : exp(y * y) * FADDEEVA(w_im)(y));
334 
335  double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow
336  double mIm_z2 = -2 * x * y; // Im(-z^2)
337  if (mRe_z2 < -750) // underflow
338  return (x >= 0 ? 1.0 : -1.0);
339 
340  /* Handle positive and negative x via different formulas,
341  using the mirror symmetries of w, to avoid overflow/underflow
342  problems from multiplying exponentially large and small quantities. */
343  if (x >= 0) {
344  if (x < 8e-2) {
345  if (fabs(y) < 1e-2)
346  goto taylor;
347  else if (fabs(mIm_z2) < 5e-3 && x < 5e-3)
348  goto taylor_erfi;
349  }
350  /* don't use complex exp function, since that will produce spurious NaN
351  values when multiplying w in an overflow situation. */
352  return 1.0 - exp(mRe_z2) * (C(cos(mIm_z2), sin(mIm_z2)) *
353  FADDEEVA(w)(C(-y, x), relerr));
354  } else { // x < 0
355  if (x > -8e-2) { // duplicate from above to avoid fabs(x) call
356  if (fabs(y) < 1e-2)
357  goto taylor;
358  else if (fabs(mIm_z2) < 5e-3 && x > -5e-3)
359  goto taylor_erfi;
360  } else if (isnan(x))
361  return C(NaN, y == 0 ? 0 : NaN);
362  /* don't use complex exp function, since that will produce spurious NaN
363  values when multiplying w in an overflow situation. */
364  return exp(mRe_z2) *
365  (C(cos(mIm_z2), sin(mIm_z2)) * FADDEEVA(w)(C(y, -x), relerr)) -
366  1.0;
367  }
368 
369  // Use Taylor series for small |z|, to avoid cancellation inaccuracy
370  // erf(z) = 2/sqrt(pi) * z * (1 - z^2/3 + z^4/10 - z^6/42 + z^8/216 + ...)
371 taylor : {
372  cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2
373  return z * (1.1283791670955125739 +
374  mz2 * (0.37612638903183752464 +
375  mz2 * (0.11283791670955125739 +
376  mz2 * (0.026866170645131251760 +
377  mz2 * 0.0052239776254421878422))));
378 }
379 
380  /* for small |x| and small |xy|,
381  use Taylor series to avoid cancellation inaccuracy:
382  erf(x+iy) = erf(iy)
383  + 2*exp(y^2)/sqrt(pi) *
384  [ x * (1 - x^2 * (1+2y^2)/3 + x^4 * (3+12y^2+4y^4)/30 + ...
385  - i * x^2 * y * (1 - x^2 * (3+2y^2)/6 + ...) ]
386  where:
387  erf(iy) = exp(y^2) * Im[w(y)]
388  */
389 taylor_erfi : {
390  double x2 = x * x, y2 = y * y;
391  double expy2 = exp(y2);
392  return C(
393  expy2 * x *
394  (1.1283791670955125739 -
395  x2 * (0.37612638903183752464 + 0.75225277806367504925 * y2) +
396  x2 * x2 *
397  (0.11283791670955125739 +
398  y2 * (0.45135166683820502956 + 0.15045055561273500986 * y2))),
399  expy2 * (FADDEEVA(w_im)(y) - x2 * y *
400  (1.1283791670955125739 -
401  x2 * (0.56418958354775628695 +
402  0.37612638903183752464 * y2))));
403 }
404 }
405 
406 // erfi(z) = -i erf(iz)
407 cmplx FADDEEVA(erfi)(cmplx z, double relerr) {
408  cmplx e = FADDEEVA(erf)(C(-cimag(z), creal(z)), relerr);
409  return C(cimag(e), -creal(e));
410 }
411 
412 // erfi(x) = -i erf(ix)
413 double FADDEEVA_RE(erfi)(double x) {
414  return x * x > 720 ? (x > 0 ? Inf : -Inf) : exp(x * x) * FADDEEVA(w_im)(x);
415 }
416 
417 // erfc(x) = 1 - erf(x)
418 double FADDEEVA_RE(erfc)(double x) {
419 #if !defined(__cplusplus)
420  return erfc(x); // C99 supplies erfc in math.h
421 #elif (__cplusplus >= 201103L) || defined(HAVE_ERFC)
422  return ::erfc(x); // C++11 supplies std::erfc in cmath
423 #else
424  if (x * x > 750) // underflow
425  return (x >= 0 ? 0.0 : 2.0);
426  return x >= 0 ? exp(-x * x) * FADDEEVA_RE(erfcx)(x)
427  : 2. - exp(-x * x) * FADDEEVA_RE(erfcx)(-x);
428 #endif
429 }
430 
431 // erfc(z) = 1 - erf(z)
432 cmplx FADDEEVA(erfc)(cmplx z, double relerr) {
433  double x = creal(z), y = cimag(z);
434 
435  if (x == 0.)
436  return C(1,
437  /* handle y -> Inf limit manually, since
438  exp(y^2) -> Inf but Im[w(y)] -> 0, so
439  IEEE will give us a NaN when it should be Inf */
440  y * y > 720 ? (y > 0 ? -Inf : Inf)
441  : -exp(y * y) * FADDEEVA(w_im)(y));
442  if (y == 0.) {
443  if (x * x > 750) // underflow
444  return C(x >= 0 ? 0.0 : 2.0,
445  -y); // preserve sign of 0
446  return C(x >= 0 ? exp(-x * x) * FADDEEVA_RE(erfcx)(x)
447  : 2. - exp(-x * x) * FADDEEVA_RE(erfcx)(-x),
448  -y); // preserve sign of zero
449  }
450 
451  double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow
452  double mIm_z2 = -2 * x * y; // Im(-z^2)
453  if (mRe_z2 < -750) // underflow
454  return (x >= 0 ? 0.0 : 2.0);
455 
456  if (x >= 0)
457  return cexp(C(mRe_z2, mIm_z2)) * FADDEEVA(w)(C(-y, x), relerr);
458  else
459  return 2.0 - cexp(C(mRe_z2, mIm_z2)) * FADDEEVA(w)(C(y, -x), relerr);
460 }
461 
462 // compute Dawson(x) = sqrt(pi)/2 * exp(-x^2) * erfi(x)
463 double FADDEEVA_RE(Dawson)(double x) {
464  const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2
465  return spi2 * FADDEEVA(w_im)(x);
466 }
467 
468 // compute Dawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z)
469 cmplx FADDEEVA(Dawson)(cmplx z, double relerr) {
470  const double spi2 = 0.8862269254527580136490837416705725913990; // sqrt(pi)/2
471  double x = creal(z), y = cimag(z);
472 
473  // handle axes separately for speed & proper handling of x or y = Inf or NaN
474  if (y == 0)
475  return C(spi2 * FADDEEVA(w_im)(x),
476  -y); // preserve sign of 0
477  if (x == 0) {
478  double y2 = y * y;
479  if (y2 < 2.5e-5) { // Taylor expansion
480  return C(x, // preserve sign of 0
481  y * (1. + y2 * (0.6666666666666666666666666666666666666667 +
482  y2 * 0.26666666666666666666666666666666666667)));
483  }
484  return C(x, // preserve sign of 0
485  spi2 * (y >= 0 ? exp(y2) - FADDEEVA_RE(erfcx)(y)
486  : FADDEEVA_RE(erfcx)(-y) - exp(y2)));
487  }
488 
489  double mRe_z2 = (y - x) * (x + y); // Re(-z^2), being careful of overflow
490  double mIm_z2 = -2 * x * y; // Im(-z^2)
491  cmplx mz2 = C(mRe_z2, mIm_z2); // -z^2
492 
493  /* Handle positive and negative x via different formulas,
494  using the mirror symmetries of w, to avoid overflow/underflow
495  problems from multiplying exponentially large and small quantities. */
496  if (y >= 0) {
497  if (y < 5e-3) {
498  if (fabs(x) < 5e-3)
499  goto taylor;
500  else if (fabs(mIm_z2) < 5e-3)
501  goto taylor_realaxis;
502  }
503  cmplx res = cexp(mz2) - FADDEEVA(w)(z, relerr);
504  return spi2 * C(-cimag(res), creal(res));
505  } else { // y < 0
506  if (y > -5e-3) { // duplicate from above to avoid fabs(x) call
507  if (fabs(x) < 5e-3)
508  goto taylor;
509  else if (fabs(mIm_z2) < 5e-3)
510  goto taylor_realaxis;
511  } else if (isnan(y))
512  return C(x == 0 ? 0 : NaN, NaN);
513  cmplx res = FADDEEVA(w)(-z, relerr) - cexp(mz2);
514  return spi2 * C(-cimag(res), creal(res));
515  }
516 
517  // Use Taylor series for small |z|, to avoid cancellation inaccuracy
518  // dawson(z) = z - 2/3 z^3 + 4/15 z^5 + ...
519 taylor:
520  return z * (1. + mz2 * (0.6666666666666666666666666666666666666667 +
521  mz2 * 0.2666666666666666666666666666666666666667));
522 
523  /* for small |y| and small |xy|,
524  use Taylor series to avoid cancellation inaccuracy:
525  dawson(x + iy)
526  = D + y^2 (D + x - 2Dx^2)
527  + y^4 (D/2 + 5x/6 - 2Dx^2 - x^3/3 + 2Dx^4/3)
528  + iy [ (1-2Dx) + 2/3 y^2 (1 - 3Dx - x^2 + 2Dx^3)
529  + y^4/15 (4 - 15Dx - 9x^2 + 20Dx^3 + 2x^4 - 4Dx^5) ] + ...
530  where D = dawson(x)
531 
532  However, for large |x|, 2Dx -> 1 which gives cancellation problems in
533  this series (many of the leading terms cancel). So, for large |x|,
534  we need to substitute a continued-fraction expansion for D.
535 
536  dawson(x) = 0.5 / (x-0.5/(x-1/(x-1.5/(x-2/(x-2.5/(x...))))))
537 
538  The 6 terms shown here seems to be the minimum needed to be
539  accurate as soon as the simpler Taylor expansion above starts
540  breaking down. Using this 6-term expansion, factoring out the
541  denominator, and simplifying with Maple, we obtain:
542 
543  Re dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / x
544  = 33 - 28x^2 + 4x^4 + y^2 (18 - 4x^2) + 4 y^4
545  Im dawson(x + iy) * (-15 + 90x^2 - 60x^4 + 8x^6) / y
546  = -15 + 24x^2 - 4x^4 + 2/3 y^2 (6x^2 - 15) - 4 y^4
547 
548  Finally, for |x| > 5e7, we can use a simpler 1-term continued-fraction
549  expansion for the real part, and a 2-term expansion for the imaginary
550  part. (This avoids overflow problems for huge |x|.) This yields:
551 
552  Re dawson(x + iy) = [1 + y^2 (1 + y^2/2 - (xy)^2/3)] / (2x)
553  Im dawson(x + iy) = y [ -1 - 2/3 y^2 + y^4/15 (2x^2 - 4) ] / (2x^2 - 1)
554 
555  */
556 taylor_realaxis : {
557  double x2 = x * x;
558  if (x2 > 1600) { // |x| > 40
559  double y2 = y * y;
560  if (x2 > 25e14) { // |x| > 5e7
561  double xy2 = (x * y) * (x * y);
562  return C(
563  (0.5 + y2 * (0.5 + 0.25 * y2 - 0.16666666666666666667 * xy2)) / x,
564  y *
565  (-1 +
566  y2 * (-0.66666666666666666667 + 0.13333333333333333333 * xy2 -
567  0.26666666666666666667 * y2)) /
568  (2 * x2 - 1));
569  }
570  return (1. / (-15 + x2 * (90 + x2 * (-60 + 8 * x2)))) *
571  C(x * (33 + x2 * (-28 + 4 * x2) + y2 * (18 - 4 * x2 + 4 * y2)),
572  y * (-15 + x2 * (24 - 4 * x2) + y2 * (4 * x2 - 10 - 4 * y2)));
573  } else {
574  double D = spi2 * FADDEEVA(w_im)(x);
575  double y2 = y * y;
576  return C(
577  D + y2 * (D + x - 2 * D * x2) +
578  y2 * y2 *
579  (D * (0.5 - x2 * (2 - 0.66666666666666666667 * x2)) +
580  x * (0.83333333333333333333 - 0.33333333333333333333 * x2)),
581  y * (1 - 2 * D * x +
582  y2 * 0.66666666666666666667 * (1 - x2 - D * x * (3 - 2 * x2)) +
583  y2 * y2 *
584  (0.26666666666666666667 -
585  x2 * (0.6 - 0.13333333333333333333 * x2) -
586  D * x *
587  (1 - x2 * (1.3333333333333333333 -
588  0.26666666666666666667 * x2)))));
589  }
590 }
591 }
592 
594 
595 // return sinc(x) = sin(x)/x, given both x and sin(x)
596 // [since we only use this in cases where sin(x) has already been computed]
597 static inline double sinc(double x, double sinx) {
598  return fabs(x) < 1e-4 ? 1 - (0.1666666666666666666667) * x * x : sinx / x;
599 }
600 
601 // sinh(x) via Taylor series, accurate to machine precision for |x| < 1e-2
602 static inline double sinh_taylor(double x) {
603  return x * (1 + (x * x) * (0.1666666666666666666667 +
604  0.00833333333333333333333 * (x * x)));
605 }
606 
607 static inline double sqr(double x) { return x * x; }
608 
609 // precomputed table of expa2n2[n-1] = exp(-a2*n*n)
610 // for double-precision a2 = 0.26865... in FADDEEVA(w), below.
611 static const double expa2n2[] = {
612  7.64405281671221563e-01,
613  3.41424527166548425e-01,
614  8.91072646929412548e-02,
615  1.35887299055460086e-02,
616  1.21085455253437481e-03,
617  6.30452613933449404e-05,
618  1.91805156577114683e-06,
619  3.40969447714832381e-08,
620  3.54175089099469393e-10,
621  2.14965079583260682e-12,
622  7.62368911833724354e-15,
623  1.57982797110681093e-17,
624  1.91294189103582677e-20,
625  1.35344656764205340e-23,
626  5.59535712428588720e-27,
627  1.35164257972401769e-30,
628  1.90784582843501167e-34,
629  1.57351920291442930e-38,
630  7.58312432328032845e-43,
631  2.13536275438697082e-47,
632  3.51352063787195769e-52,
633  3.37800830266396920e-57,
634  1.89769439468301000e-62,
635  6.22929926072668851e-68,
636  1.19481172006938722e-73,
637  1.33908181133005953e-79,
638  8.76924303483223939e-86,
639  3.35555576166254986e-92,
640  7.50264110688173024e-99,
641  9.80192200745410268e-106,
642  7.48265412822268959e-113,
643  3.33770122566809425e-120,
644  8.69934598159861140e-128,
645  1.32486951484088852e-135,
646  1.17898144201315253e-143,
647  6.13039120236180012e-152,
648  1.86258785950822098e-160,
649  3.30668408201432783e-169,
650  3.43017280887946235e-178,
651  2.07915397775808219e-187,
652  7.36384545323984966e-197,
653  1.52394760394085741e-206,
654  1.84281935046532100e-216,
655  1.30209553802992923e-226,
656  5.37588903521080531e-237,
657  1.29689584599763145e-247,
658  1.82813078022866562e-258,
659  1.50576355348684241e-269,
660  7.24692320799294194e-281,
661  2.03797051314726829e-292,
662  3.34880215927873807e-304,
663  0.0 // underflow (also prevents reads past array end, below)
664 };
665 
667 
668 cmplx FADDEEVA(w)(cmplx z, double relerr) {
669  if (creal(z) == 0.0)
670  return C(FADDEEVA_RE(erfcx)(cimag(z)),
671  creal(z)); // give correct sign of 0 in cimag(w)
672  else if (cimag(z) == 0)
673  return C(exp(-sqr(creal(z))), FADDEEVA(w_im)(creal(z)));
674 
675  double a, a2, c;
676  if (relerr <= DBL_EPSILON) {
677  relerr = DBL_EPSILON;
678  a = 0.518321480430085929872; // pi / sqrt(-log(eps*0.5))
679  c = 0.329973702884629072537; // (2/pi) * a;
680  a2 = 0.268657157075235951582; // a^2
681  } else {
682  const double pi = 3.14159265358979323846264338327950288419716939937510582;
683  if (relerr > 0.1)
684  relerr = 0.1; // not sensible to compute < 1 digit
685  a = pi / sqrt(-log(relerr * 0.5));
686  c = (2 / pi) * a;
687  a2 = a * a;
688  }
689  const double x = fabs(creal(z));
690  const double y = cimag(z), ya = fabs(y);
691 
692  cmplx ret = 0.; // return value
693 
694  double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0;
695 
696 #define USE_CONTINUED_FRACTION 1 // 1 to use continued fraction for large |z|
697 
698 #if USE_CONTINUED_FRACTION
699  if (ya > 7 || (x > 6 // continued fraction is faster
700  /* As pointed out by M. Zaghloul, the continued
701  fraction seems to give a large relative error in
702  Re w(z) for |x| ~ 6 and small |y|, so use
703  algorithm 816 in this region: */
704  && (ya > 0.1 || (x > 8 && ya > 1e-10) || x > 28))) {
705 
706  /* Poppe & Wijers suggest using a number of terms
707  nu = 3 + 1442 / (26*rho + 77)
708  where rho = sqrt((x/x0)^2 + (y/y0)^2) where x0=6.3, y0=4.4.
709  (They only use this expansion for rho >= 1, but rho a little less
710  than 1 seems okay too.)
711  Instead, I did my own fit to a slightly different function
712  that avoids the hypotenuse calculation, using NLopt to minimize
713  the sum of the squares of the errors in nu with the constraint
714  that the estimated nu be >= minimum nu to attain machine precision.
715  I also separate the regions where nu == 2 and nu == 1. */
716  const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi)
717  double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0
718  if (x + ya > 4000) { // nu <= 2
719  if (x + ya > 1e7) { // nu == 1, w(z) = i/sqrt(pi) / z
720  // scale to avoid overflow
721  if (x > ya) {
722  double yax = ya / xs;
723  double denom = ispi / (xs + yax * ya);
724  ret = C(denom * yax, denom);
725  } else if (isinf(ya))
726  return ((isnan(x) || y < 0) ? C(NaN, NaN) : C(0, 0));
727  else {
728  double xya = xs / ya;
729  double denom = ispi / (xya * xs + ya);
730  ret = C(denom, denom * xya);
731  }
732  } else { // nu == 2, w(z) = i/sqrt(pi) * z / (z*z - 0.5)
733  double dr = xs * xs - ya * ya - 0.5, di = 2 * xs * ya;
734  double denom = ispi / (dr * dr + di * di);
735  ret = C(denom * (xs * di - ya * dr), denom * (xs * dr + ya * di));
736  }
737  } else { // compute nu(z) estimate and do general continued fraction
738  const double c0 = 3.9, c1 = 11.398, c2 = 0.08254, c3 = 0.1421,
739  c4 = 0.2023; // fit
740  double nu = floor(c0 + c1 / (c2 * x + c3 * ya + c4));
741  double wr = xs, wi = ya;
742  for (nu = 0.5 * (nu - 1); nu > 0.4; nu -= 0.5) {
743  // w <- z - nu/w:
744  double denom = nu / (wr * wr + wi * wi);
745  wr = xs - wr * denom;
746  wi = ya + wi * denom;
747  }
748  { // w(z) = i/sqrt(pi) / w:
749  double denom = ispi / (wr * wr + wi * wi);
750  ret = C(denom * wi, denom * wr);
751  }
752  }
753  if (y < 0) {
754  // use w(z) = 2.0*exp(-z*z) - w(-z),
755  // but be careful of overflow in exp(-z*z)
756  // = exp(-(xs*xs-ya*ya) -2*i*xs*ya)
757  return 2.0 * cexp(C((ya - xs) * (xs + ya), 2 * xs * y)) - ret;
758  } else
759  return ret;
760  }
761 #else // !USE_CONTINUED_FRACTION
762  if (x + ya > 1e7) { // w(z) = i/sqrt(pi) / z, to machine precision
763  const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi)
764  double xs = y < 0 ? -creal(z) : creal(z); // compute for -z if y < 0
765  // scale to avoid overflow
766  if (x > ya) {
767  double yax = ya / xs;
768  double denom = ispi / (xs + yax * ya);
769  ret = C(denom * yax, denom);
770  } else {
771  double xya = xs / ya;
772  double denom = ispi / (xya * xs + ya);
773  ret = C(denom, denom * xya);
774  }
775  if (y < 0) {
776  // use w(z) = 2.0*exp(-z*z) - w(-z),
777  // but be careful of overflow in exp(-z*z)
778  // = exp(-(xs*xs-ya*ya) -2*i*xs*ya)
779  return 2.0 * cexp(C((ya - xs) * (xs + ya), 2 * xs * y)) - ret;
780  } else
781  return ret;
782  }
783 #endif // !USE_CONTINUED_FRACTION
784 
785  /* Note: The test that seems to be suggested in the paper is x <
786  sqrt(-log(DBL_MIN)), about 26.6, since otherwise exp(-x^2)
787  underflows to zero and sum1,sum2,sum4 are zero. However, long
788  before this occurs, the sum1,sum2,sum4 contributions are
789  negligible in double precision; I find that this happens for x >
790  about 6, for all y. On the other hand, I find that the case
791  where we compute all of the sums is faster (at least with the
792  precomputed expa2n2 table) until about x=10. Furthermore, if we
793  try to compute all of the sums for x > 20, I find that we
794  sometimes run into numerical problems because underflow/overflow
795  problems start to appear in the various coefficients of the sums,
796  below. Therefore, we use x < 10 here. */
797  else if (x < 10) {
798  double prod2ax = 1, prodm2ax = 1;
799  double expx2;
800 
801  if (isnan(y))
802  return C(y, y);
803 
804  /* Somewhat ugly copy-and-paste duplication here, but I see significant
805  speedups from using the special-case code with the precomputed
806  exponential, and the x < 5e-4 special case is needed for accuracy. */
807 
808  if (relerr == DBL_EPSILON) { // use precomputed exp(-a2*(n*n)) table
809  if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4
810  const double x2 = x * x;
811  expx2 = 1 - x2 * (1 - 0.5 * x2); // exp(-x*x) via Taylor
812  // compute exp(2*a*x) and exp(-2*a*x) via Taylor, to double precision
813  const double ax2 = 1.036642960860171859744 * x; // 2*a*x
814  const double exp2ax =
815  1 + ax2 * (1 + ax2 * (0.5 + 0.166666666666666666667 * ax2));
816  const double expm2ax =
817  1 - ax2 * (1 - ax2 * (0.5 - 0.166666666666666666667 * ax2));
818  for (int n = 1; 1; ++n) {
819  const double coef = expa2n2[n - 1] * expx2 / (a2 * (n * n) + y * y);
820  prod2ax *= exp2ax;
821  prodm2ax *= expm2ax;
822  sum1 += coef;
823  sum2 += coef * prodm2ax;
824  sum3 += coef * prod2ax;
825 
826  // really = sum5 - sum4
827  sum5 += coef * (2 * a) * n * sinh_taylor((2 * a) * n * x);
828 
829  // test convergence via sum3
830  if (coef * prod2ax < relerr * sum3)
831  break;
832  }
833  } else { // x > 5e-4, compute sum4 and sum5 separately
834  expx2 = exp(-x * x);
835  const double exp2ax = exp((2 * a) * x), expm2ax = 1 / exp2ax;
836  for (int n = 1; 1; ++n) {
837  const double coef = expa2n2[n - 1] * expx2 / (a2 * (n * n) + y * y);
838  prod2ax *= exp2ax;
839  prodm2ax *= expm2ax;
840  sum1 += coef;
841  sum2 += coef * prodm2ax;
842  sum4 += (coef * prodm2ax) * (a * n);
843  sum3 += coef * prod2ax;
844  sum5 += (coef * prod2ax) * (a * n);
845  // test convergence via sum5, since this sum has the slowest decay
846  if ((coef * prod2ax) * (a * n) < relerr * sum5)
847  break;
848  }
849  }
850  } else { // relerr != DBL_EPSILON, compute exp(-a2*(n*n)) on the fly
851  const double exp2ax = exp((2 * a) * x), expm2ax = 1 / exp2ax;
852  if (x < 5e-4) { // compute sum4 and sum5 together as sum5-sum4
853  const double x2 = x * x;
854  expx2 = 1 - x2 * (1 - 0.5 * x2); // exp(-x*x) via Taylor
855  for (int n = 1; 1; ++n) {
856  const double coef =
857  exp(-a2 * (n * n)) * expx2 / (a2 * (n * n) + y * y);
858  prod2ax *= exp2ax;
859  prodm2ax *= expm2ax;
860  sum1 += coef;
861  sum2 += coef * prodm2ax;
862  sum3 += coef * prod2ax;
863 
864  // really = sum5 - sum4
865  sum5 += coef * (2 * a) * n * sinh_taylor((2 * a) * n * x);
866 
867  // test convergence via sum3
868  if (coef * prod2ax < relerr * sum3)
869  break;
870  }
871  } else { // x > 5e-4, compute sum4 and sum5 separately
872  expx2 = exp(-x * x);
873  for (int n = 1; 1; ++n) {
874  const double coef =
875  exp(-a2 * (n * n)) * expx2 / (a2 * (n * n) + y * y);
876  prod2ax *= exp2ax;
877  prodm2ax *= expm2ax;
878  sum1 += coef;
879  sum2 += coef * prodm2ax;
880  sum4 += (coef * prodm2ax) * (a * n);
881  sum3 += coef * prod2ax;
882  sum5 += (coef * prod2ax) * (a * n);
883  // test convergence via sum5, since this sum has the slowest decay
884  if ((coef * prod2ax) * (a * n) < relerr * sum5)
885  break;
886  }
887  }
888  }
889  const double expx2erfcxy = // avoid spurious overflow for large negative y
890  y > -6 // for y < -6, erfcx(y) = 2*exp(y*y) to double precision
891  ? expx2 * FADDEEVA_RE(erfcx)(y)
892  : 2 * exp(y * y - x * x);
893  if (y > 5) { // imaginary terms cancel
894  const double sinxy = sin(x * y);
895  ret = (expx2erfcxy - c * y * sum1) * cos(2 * x * y) +
896  (c * x * expx2) * sinxy * sinc(x * y, sinxy);
897  } else {
898  double xs = creal(z);
899  const double sinxy = sin(xs * y);
900  const double sin2xy = sin(2 * xs * y), cos2xy = cos(2 * xs * y);
901  const double coef1 = expx2erfcxy - c * y * sum1;
902  const double coef2 = c * xs * expx2;
903  ret = C(coef1 * cos2xy + coef2 * sinxy * sinc(xs * y, sinxy),
904  coef2 * sinc(2 * xs * y, sin2xy) - coef1 * sin2xy);
905  }
906  } else { // x large: only sum3 & sum5 contribute (see above note)
907  if (isnan(x))
908  return C(x, x);
909  if (isnan(y))
910  return C(y, y);
911 
912 #if USE_CONTINUED_FRACTION
913  ret = exp(-x * x); // |y| < 1e-10, so we only need exp(-x*x) term
914 #else
915  if (y < 0) {
916  /* erfcx(y) ~ 2*exp(y*y) + (< 1) if y < 0, so
917  erfcx(y)*exp(-x*x) ~ 2*exp(y*y-x*x) term may not be negligible
918  if y*y - x*x > -36 or so. So, compute this term just in case.
919  We also need the -exp(-x*x) term to compute Re[w] accurately
920  in the case where y is very small. */
921  ret = cpolar(2 * exp(y * y - x * x) - exp(-x * x), -2 * creal(z) * y);
922  } else
923  ret = exp(-x * x); // not negligible in real part if y very small
924 #endif
925  // (round instead of ceil as in original paper; note that x/a > 1 here)
926  double n0 = floor(x / a + 0.5); // sum in both directions, starting at n0
927  double dx = a * n0 - x;
928  sum3 = exp(-dx * dx) / (a2 * (n0 * n0) + y * y);
929  sum5 = a * n0 * sum3;
930  double exp1 = exp(4 * a * dx), exp1dn = 1;
931  int dn;
932  for (dn = 1; n0 - dn > 0; ++dn) { // loop over n0-dn and n0+dn terms
933  double np = n0 + dn, nm = n0 - dn;
934  double tp = exp(-sqr(a * dn + dx));
935  double tm = tp * (exp1dn *= exp1); // trick to get tm from tp
936  tp /= (a2 * (np * np) + y * y);
937  tm /= (a2 * (nm * nm) + y * y);
938  sum3 += tp + tm;
939  sum5 += a * (np * tp + nm * tm);
940  if (a * (np * tp + nm * tm) < relerr * sum5)
941  goto finish;
942  }
943  while (1) { // loop over n0+dn terms only (since n0-dn <= 0)
944  double np = n0 + dn++;
945  double tp = exp(-sqr(a * dn + dx)) / (a2 * (np * np) + y * y);
946  sum3 += tp;
947  sum5 += a * np * tp;
948  if (a * np * tp < relerr * sum5)
949  goto finish;
950  }
951  }
952 finish:
953  return ret + C((0.5 * c) * y * (sum2 + sum3),
954  (0.5 * c) * copysign(sum5 - sum4, creal(z)));
955 }
956 
958 
959 /* erfcx(x) = exp(x^2) erfc(x) function, for real x, written by
960  Steven G. Johnson, October 2012.
961 
962  This function combines a few different ideas.
963 
964  First, for x > 50, it uses a continued-fraction expansion (same as
965  for the Faddeeva function, but with algebraic simplifications for z=i*x).
966 
967  Second, for 0 <= x <= 50, it uses Chebyshev polynomial approximations,
968  but with two twists:
969 
970  a) It maps x to y = 4 / (4+x) in [0,1]. This simple transformation,
971  inspired by a similar transformation in the octave-forge/specfun
972  erfcx by Soren Hauberg, results in much faster Chebyshev convergence
973  than other simple transformations I have examined.
974 
975  b) Instead of using a single Chebyshev polynomial for the entire
976  [0,1] y interval, we break the interval up into 100 equal
977  subintervals, with a switch/lookup table, and use much lower
978  degree Chebyshev polynomials in each subinterval. This greatly
979  improves performance in my tests.
980 
981  For x < 0, we use the relationship erfcx(-x) = 2 exp(x^2) - erfc(x),
982  with the usual checks for overflow etcetera.
983 
984  Performance-wise, it seems to be substantially faster than either
985  the SLATEC DERFC function [or an erfcx function derived therefrom]
986  or Cody's CALERF function (from netlib.org/specfun), while
987  retaining near machine precision in accuracy. */
988 
989 /* Given y100=100*y, where y = 4/(4+x) for x >= 0, compute erfc(x).
990 
991  Uses a look-up table of 100 different Chebyshev polynomials
992  for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated
993  with the help of Maple and a little shell script. This allows
994  the Chebyshev polynomials to be of significantly lower degree (about 1/4)
995  compared to fitting the whole [0,1] interval with a single polynomial. */
996 static double erfcx_y100(double y100) {
997  switch ((int)y100) {
998  case 0: {
999  double t = 2 * y100 - 1;
1000  return 0.70878032454106438663e-3 +
1001  (0.71234091047026302958e-3 +
1002  (0.35779077297597742384e-5 +
1003  (0.17403143962587937815e-7 +
1004  (0.81710660047307788845e-10 +
1005  (0.36885022360434957634e-12 + 0.15917038551111111111e-14 * t) *
1006  t) *
1007  t) *
1008  t) *
1009  t) *
1010  t;
1011  }
1012  case 1: {
1013  double t = 2 * y100 - 3;
1014  return 0.21479143208285144230e-2 +
1015  (0.72686402367379996033e-3 +
1016  (0.36843175430938995552e-5 +
1017  (0.18071841272149201685e-7 +
1018  (0.85496449296040325555e-10 +
1019  (0.38852037518534291510e-12 + 0.16868473576888888889e-14 * t) *
1020  t) *
1021  t) *
1022  t) *
1023  t) *
1024  t;
1025  }
1026  case 2: {
1027  double t = 2 * y100 - 5;
1028  return 0.36165255935630175090e-2 +
1029  (0.74182092323555510862e-3 +
1030  (0.37948319957528242260e-5 +
1031  (0.18771627021793087350e-7 +
1032  (0.89484715122415089123e-10 +
1033  (0.40935858517772440862e-12 + 0.17872061464888888889e-14 * t) *
1034  t) *
1035  t) *
1036  t) *
1037  t) *
1038  t;
1039  }
1040  case 3: {
1041  double t = 2 * y100 - 7;
1042  return 0.51154983860031979264e-2 +
1043  (0.75722840734791660540e-3 +
1044  (0.39096425726735703941e-5 +
1045  (0.19504168704300468210e-7 +
1046  (0.93687503063178993915e-10 +
1047  (0.43143925959079664747e-12 + 0.18939926435555555556e-14 * t) *
1048  t) *
1049  t) *
1050  t) *
1051  t) *
1052  t;
1053  }
1054  case 4: {
1055  double t = 2 * y100 - 9;
1056  return 0.66457513172673049824e-2 +
1057  (0.77310406054447454920e-3 +
1058  (0.40289510589399439385e-5 +
1059  (0.20271233238288381092e-7 +
1060  (0.98117631321709100264e-10 +
1061  (0.45484207406017752971e-12 + 0.20076352213333333333e-14 * t) *
1062  t) *
1063  t) *
1064  t) *
1065  t) *
1066  t;
1067  }
1068  case 5: {
1069  double t = 2 * y100 - 11;
1070  return 0.82082389970241207883e-2 +
1071  (0.78946629611881710721e-3 +
1072  (0.41529701552622656574e-5 +
1073  (0.21074693344544655714e-7 +
1074  (0.10278874108587317989e-9 +
1075  (0.47965201390613339638e-12 + 0.21285907413333333333e-14 * t) *
1076  t) *
1077  t) *
1078  t) *
1079  t) *
1080  t;
1081  }
1082  case 6: {
1083  double t = 2 * y100 - 13;
1084  return 0.98039537275352193165e-2 +
1085  (0.80633440108342840956e-3 +
1086  (0.42819241329736982942e-5 +
1087  (0.21916534346907168612e-7 +
1088  (0.10771535136565470914e-9 +
1089  (0.50595972623692822410e-12 + 0.22573462684444444444e-14 * t) *
1090  t) *
1091  t) *
1092  t) *
1093  t) *
1094  t;
1095  }
1096  case 7: {
1097  double t = 2 * y100 - 15;
1098  return 0.11433927298290302370e-1 +
1099  (0.82372858383196561209e-3 +
1100  (0.44160495311765438816e-5 +
1101  (0.22798861426211986056e-7 +
1102  (0.11291291745879239736e-9 +
1103  (0.53386189365816880454e-12 + 0.23944209546666666667e-14 * t) *
1104  t) *
1105  t) *
1106  t) *
1107  t) *
1108  t;
1109  }
1110  case 8: {
1111  double t = 2 * y100 - 17;
1112  return 0.13099232878814653979e-1 +
1113  (0.84167002467906968214e-3 +
1114  (0.45555958988457506002e-5 +
1115  (0.23723907357214175198e-7 +
1116  (0.11839789326602695603e-9 +
1117  (0.56346163067550237877e-12 + 0.25403679644444444444e-14 * t) *
1118  t) *
1119  t) *
1120  t) *
1121  t) *
1122  t;
1123  }
1124  case 9: {
1125  double t = 2 * y100 - 19;
1126  return 0.14800987015587535621e-1 +
1127  (0.86018092946345943214e-3 +
1128  (0.47008265848816866105e-5 +
1129  (0.24694040760197315333e-7 +
1130  (0.12418779768752299093e-9 +
1131  (0.59486890370320261949e-12 + 0.26957764568888888889e-14 * t) *
1132  t) *
1133  t) *
1134  t) *
1135  t) *
1136  t;
1137  }
1138  case 10: {
1139  double t = 2 * y100 - 21;
1140  return 0.16540351739394069380e-1 +
1141  (0.87928458641241463952e-3 +
1142  (0.48520195793001753903e-5 +
1143  (0.25711774900881709176e-7 +
1144  (0.13030128534230822419e-9 +
1145  (0.62820097586874779402e-12 + 0.28612737351111111111e-14 * t) *
1146  t) *
1147  t) *
1148  t) *
1149  t) *
1150  t;
1151  }
1152  case 11: {
1153  double t = 2 * y100 - 23;
1154  return 0.18318536789842392647e-1 +
1155  (0.89900542647891721692e-3 +
1156  (0.50094684089553365810e-5 +
1157  (0.26779777074218070482e-7 +
1158  (0.13675822186304615566e-9 +
1159  (0.66358287745352705725e-12 + 0.30375273884444444444e-14 * t) *
1160  t) *
1161  t) *
1162  t) *
1163  t) *
1164  t;
1165  }
1166  case 12: {
1167  double t = 2 * y100 - 25;
1168  return 0.20136801964214276775e-1 +
1169  (0.91936908737673676012e-3 +
1170  (0.51734830914104276820e-5 +
1171  (0.27900878609710432673e-7 +
1172  (0.14357976402809042257e-9 +
1173  (0.70114790311043728387e-12 + 0.32252476000000000000e-14 * t) *
1174  t) *
1175  t) *
1176  t) *
1177  t) *
1178  t;
1179  }
1180  case 13: {
1181  double t = 2 * y100 - 27;
1182  return 0.21996459598282740954e-1 +
1183  (0.94040248155366777784e-3 +
1184  (0.53443911508041164739e-5 +
1185  (0.29078085538049374673e-7 +
1186  (0.15078844500329731137e-9 +
1187  (0.74103813647499204269e-12 + 0.34251892320000000000e-14 * t) *
1188  t) *
1189  t) *
1190  t) *
1191  t) *
1192  t;
1193  }
1194  case 14: {
1195  double t = 2 * y100 - 29;
1196  return 0.23898877187226319502e-1 +
1197  (0.96213386835900177540e-3 +
1198  (0.55225386998049012752e-5 +
1199  (0.30314589961047687059e-7 +
1200  (0.15840826497296335264e-9 +
1201  (0.78340500472414454395e-12 + 0.36381553564444444445e-14 * t) *
1202  t) *
1203  t) *
1204  t) *
1205  t) *
1206  t;
1207  }
1208  case 15: {
1209  double t = 2 * y100 - 31;
1210  return 0.25845480155298518485e-1 +
1211  (0.98459293067820123389e-3 +
1212  (0.57082915920051843672e-5 +
1213  (0.31613782169164830118e-7 +
1214  (0.16646478745529630813e-9 +
1215  (0.82840985928785407942e-12 + 0.38649975768888888890e-14 * t) *
1216  t) *
1217  t) *
1218  t) *
1219  t) *
1220  t;
1221  }
1222  case 16: {
1223  double t = 2 * y100 - 33;
1224  return 0.27837754783474696598e-1 +
1225  (0.10078108563256892757e-2 +
1226  (0.59020366493792212221e-5 +
1227  (0.32979263553246520417e-7 +
1228  (0.17498524159268458073e-9 +
1229  (0.87622459124842525110e-12 + 0.41066206488888888890e-14 * t) *
1230  t) *
1231  t) *
1232  t) *
1233  t) *
1234  t;
1235  }
1236  case 17: {
1237  double t = 2 * y100 - 35;
1238  return 0.29877251304899307550e-1 +
1239  (0.10318204245057349310e-2 +
1240  (0.61041829697162055093e-5 +
1241  (0.34414860359542720579e-7 +
1242  (0.18399863072934089607e-9 +
1243  (0.92703227366365046533e-12 + 0.43639844053333333334e-14 * t) *
1244  t) *
1245  t) *
1246  t) *
1247  t) *
1248  t;
1249  }
1250  case 18: {
1251  double t = 2 * y100 - 37;
1252  return 0.31965587178596443475e-1 +
1253  (0.10566560976716574401e-2 +
1254  (0.63151633192414586770e-5 +
1255  (0.35924638339521924242e-7 +
1256  (0.19353584758781174038e-9 +
1257  (0.98102783859889264382e-12 + 0.46381060817777777779e-14 * t) *
1258  t) *
1259  t) *
1260  t) *
1261  t) *
1262  t;
1263  }
1264  case 19: {
1265  double t = 2 * y100 - 39;
1266  return 0.34104450552588334840e-1 +
1267  (0.10823541191350532574e-2 +
1268  (0.65354356159553934436e-5 +
1269  (0.37512918348533521149e-7 +
1270  (0.20362979635817883229e-9 +
1271  (0.10384187833037282363e-11 + 0.49300625262222222221e-14 * t) *
1272  t) *
1273  t) *
1274  t) *
1275  t) *
1276  t;
1277  }
1278  case 20: {
1279  double t = 2 * y100 - 41;
1280  return 0.36295603928292425716e-1 +
1281  (0.11089526167995268200e-2 +
1282  (0.67654845095518363577e-5 +
1283  (0.39184292949913591646e-7 +
1284  (0.21431552202133775150e-9 +
1285  (0.10994259106646731797e-11 + 0.52409949102222222221e-14 * t) *
1286  t) *
1287  t) *
1288  t) *
1289  t) *
1290  t;
1291  }
1292  case 21: {
1293  double t = 2 * y100 - 43;
1294  return 0.38540888038840509795e-1 +
1295  (0.11364917134175420009e-2 +
1296  (0.70058230641246312003e-5 +
1297  (0.40943644083718586939e-7 +
1298  (0.22563034723692881631e-9 +
1299  (0.11642841011361992885e-11 + 0.55721092871111111110e-14 * t) *
1300  t) *
1301  t) *
1302  t) *
1303  t) *
1304  t;
1305  }
1306  case 22: {
1307  double t = 2 * y100 - 45;
1308  return 0.40842225954785960651e-1 +
1309  (0.11650136437945673891e-2 +
1310  (0.72569945502343006619e-5 +
1311  (0.42796161861855042273e-7 +
1312  (0.23761401711005024162e-9 +
1313  (0.12332431172381557035e-11 + 0.59246802364444444445e-14 * t) *
1314  t) *
1315  t) *
1316  t) *
1317  t) *
1318  t;
1319  }
1320  case 23: {
1321  double t = 2 * y100 - 47;
1322  return 0.43201627431540222422e-1 +
1323  (0.11945628793917272199e-2 +
1324  (0.75195743532849206263e-5 +
1325  (0.44747364553960993492e-7 +
1326  (0.25030885216472953674e-9 +
1327  (0.13065684400300476484e-11 + 0.63000532853333333334e-14 * t) *
1328  t) *
1329  t) *
1330  t) *
1331  t) *
1332  t;
1333  }
1334  case 24: {
1335  double t = 2 * y100 - 49;
1336  return 0.45621193513810471438e-1 +
1337  (0.12251862608067529503e-2 +
1338  (0.77941720055551920319e-5 +
1339  (0.46803119830954460212e-7 +
1340  (0.26375990983978426273e-9 +
1341  (0.13845421370977119765e-11 + 0.66996477404444444445e-14 * t) *
1342  t) *
1343  t) *
1344  t) *
1345  t) *
1346  t;
1347  }
1348  case 25: {
1349  double t = 2 * y100 - 51;
1350  return 0.48103121413299865517e-1 +
1351  (0.12569331386432195113e-2 +
1352  (0.80814333496367673980e-5 +
1353  (0.48969667335682018324e-7 +
1354  (0.27801515481905748484e-9 +
1355  (0.14674637611609884208e-11 + 0.71249589351111111110e-14 * t) *
1356  t) *
1357  t) *
1358  t) *
1359  t) *
1360  t;
1361  }
1362  case 26: {
1363  double t = 2 * y100 - 53;
1364  return 0.50649709676983338501e-1 +
1365  (0.12898555233099055810e-2 +
1366  (0.83820428414568799654e-5 +
1367  (0.51253642652551838659e-7 +
1368  (0.29312563849675507232e-9 +
1369  (0.15556512782814827846e-11 + 0.75775607822222222221e-14 * t) *
1370  t) *
1371  t) *
1372  t) *
1373  t) *
1374  t;
1375  }
1376  case 27: {
1377  double t = 2 * y100 - 55;
1378  return 0.53263363664388864181e-1 +
1379  (0.13240082443256975769e-2 +
1380  (0.86967260015007658418e-5 +
1381  (0.53662102750396795566e-7 +
1382  (0.30914568786634796807e-9 +
1383  (0.16494420240828493176e-11 + 0.80591079644444444445e-14 * t) *
1384  t) *
1385  t) *
1386  t) *
1387  t) *
1388  t;
1389  }
1390  case 28: {
1391  double t = 2 * y100 - 57;
1392  return 0.55946601353500013794e-1 +
1393  (0.13594491197408190706e-2 +
1394  (0.90262520233016380987e-5 +
1395  (0.56202552975056695376e-7 +
1396  (0.32613310410503135996e-9 +
1397  (0.17491936862246367398e-11 + 0.85713381688888888890e-14 * t) *
1398  t) *
1399  t) *
1400  t) *
1401  t) *
1402  t;
1403  }
1404  case 29: {
1405  double t = 2 * y100 - 59;
1406  return 0.58702059496154081813e-1 +
1407  (0.13962391363223647892e-2 +
1408  (0.93714365487312784270e-5 +
1409  (0.58882975670265286526e-7 +
1410  (0.34414937110591753387e-9 +
1411  (0.18552853109751857859e-11 + 0.91160736711111111110e-14 * t) *
1412  t) *
1413  t) *
1414  t) *
1415  t) *
1416  t;
1417  }
1418  case 30: {
1419  double t = 2 * y100 - 61;
1420  return 0.61532500145144778048e-1 +
1421  (0.14344426411912015247e-2 +
1422  (0.97331446201016809696e-5 +
1423  (0.61711860507347175097e-7 +
1424  (0.36325987418295300221e-9 +
1425  (0.19681183310134518232e-11 + 0.96952238400000000000e-14 * t) *
1426  t) *
1427  t) *
1428  t) *
1429  t) *
1430  t;
1431  }
1432  case 31: {
1433  double t = 2 * y100 - 63;
1434  return 0.64440817576653297993e-1 +
1435  (0.14741275456383131151e-2 +
1436  (0.10112293819576437838e-4 +
1437  (0.64698236605933246196e-7 +
1438  (0.38353412915303665586e-9 +
1439  (0.20881176114385120186e-11 + 0.10310784480000000000e-13 * t) *
1440  t) *
1441  t) *
1442  t) *
1443  t) *
1444  t;
1445  }
1446  case 32: {
1447  double t = 2 * y100 - 65;
1448  return 0.67430045633130393282e-1 +
1449  (0.15153655418916540370e-2 +
1450  (0.10509857606888328667e-4 +
1451  (0.67851706529363332855e-7 +
1452  (0.40504602194811140006e-9 +
1453  (0.22157325110542534469e-11 + 0.10964842115555555556e-13 * t) *
1454  t) *
1455  t) *
1456  t) *
1457  t) *
1458  t;
1459  }
1460  case 33: {
1461  double t = 2 * y100 - 67;
1462  return 0.70503365513338850709e-1 +
1463  (0.15582323336495709827e-2 +
1464  (0.10926868866865231089e-4 +
1465  (0.71182482239613507542e-7 +
1466  (0.42787405890153386710e-9 +
1467  (0.23514379522274416437e-11 + 0.11659571751111111111e-13 * t) *
1468  t) *
1469  t) *
1470  t) *
1471  t) *
1472  t;
1473  }
1474  case 34: {
1475  double t = 2 * y100 - 69;
1476  return 0.73664114037944596353e-1 +
1477  (0.16028078812438820413e-2 +
1478  (0.11364423678778207991e-4 +
1479  (0.74701423097423182009e-7 +
1480  (0.45210162777476488324e-9 +
1481  (0.24957355004088569134e-11 + 0.12397238257777777778e-13 * t) *
1482  t) *
1483  t) *
1484  t) *
1485  t) *
1486  t;
1487  }
1488  case 35: {
1489  double t = 2 * y100 - 71;
1490  return 0.76915792420819562379e-1 +
1491  (0.16491766623447889354e-2 +
1492  (0.11823685320041302169e-4 +
1493  (0.78420075993781544386e-7 +
1494  (0.47781726956916478925e-9 +
1495  (0.26491544403815724749e-11 + 0.13180196462222222222e-13 * t) *
1496  t) *
1497  t) *
1498  t) *
1499  t) *
1500  t;
1501  }
1502  case 36: {
1503  double t = 2 * y100 - 73;
1504  return 0.80262075578094612819e-1 +
1505  (0.16974279491709504117e-2 +
1506  (0.12305888517309891674e-4 +
1507  (0.82350717698979042290e-7 +
1508  (0.50511496109857113929e-9 +
1509  (0.28122528497626897696e-11 + 0.14010889635555555556e-13 * t) *
1510  t) *
1511  t) *
1512  t) *
1513  t) *
1514  t;
1515  }
1516  case 37: {
1517  double t = 2 * y100 - 75;
1518  return 0.83706822008980357446e-1 +
1519  (0.17476561032212656962e-2 +
1520  (0.12812343958540763368e-4 +
1521  (0.86506399515036435592e-7 +
1522  (0.53409440823869467453e-9 +
1523  (0.29856186620887555043e-11 + 0.14891851591111111111e-13 * t) *
1524  t) *
1525  t) *
1526  t) *
1527  t) *
1528  t;
1529  }
1530  case 38: {
1531  double t = 2 * y100 - 77;
1532  return 0.87254084284461718231e-1 +
1533  (0.17999608886001962327e-2 +
1534  (0.13344443080089492218e-4 +
1535  (0.90900994316429008631e-7 +
1536  (0.56486134972616465316e-9 +
1537  (0.31698707080033956934e-11 + 0.15825697795555555556e-13 * t) *
1538  t) *
1539  t) *
1540  t) *
1541  t) *
1542  t;
1543  }
1544  case 39: {
1545  double t = 2 * y100 - 79;
1546  return 0.90908120182172748487e-1 +
1547  (0.18544478050657699758e-2 +
1548  (0.13903663143426120077e-4 +
1549  (0.95549246062549906177e-7 +
1550  (0.59752787125242054315e-9 +
1551  (0.33656597366099099413e-11 + 0.16815130613333333333e-13 * t) *
1552  t) *
1553  t) *
1554  t) *
1555  t) *
1556  t;
1557  }
1558  case 40: {
1559  double t = 2 * y100 - 81;
1560  return 0.94673404508075481121e-1 +
1561  (0.19112284419887303347e-2 +
1562  (0.14491572616545004930e-4 +
1563  (0.10046682186333613697e-6 +
1564  (0.63221272959791000515e-9 +
1565  (0.35736693975589130818e-11 + 0.17862931591111111111e-13 * t) *
1566  t) *
1567  t) *
1568  t) *
1569  t) *
1570  t;
1571  }
1572  case 41: {
1573  double t = 2 * y100 - 83;
1574  return 0.98554641648004456555e-1 +
1575  (0.19704208544725622126e-2 +
1576  (0.15109836875625443935e-4 +
1577  (0.10567036667675984067e-6 +
1578  (0.66904168640019354565e-9 +
1579  (0.37946171850824333014e-11 + 0.18971959040000000000e-13 * t) *
1580  t) *
1581  t) *
1582  t) *
1583  t) *
1584  t;
1585  }
1586  case 42: {
1587  double t = 2 * y100 - 85;
1588  return 0.10255677889470089531e0 +
1589  (0.20321499629472857418e-2 +
1590  (0.15760224242962179564e-4 +
1591  (0.11117756071353507391e-6 +
1592  (0.70814785110097658502e-9 +
1593  (0.40292553276632563925e-11 + 0.20145143075555555556e-13 * t) *
1594  t) *
1595  t) *
1596  t) *
1597  t) *
1598  t;
1599  }
1600  case 43: {
1601  double t = 2 * y100 - 87;
1602  return 0.10668502059865093318e0 +
1603  (0.20965479776148731610e-2 +
1604  (0.16444612377624983565e-4 +
1605  (0.11700717962026152749e-6 +
1606  (0.74967203250938418991e-9 +
1607  (0.42783716186085922176e-11 + 0.21385479360000000000e-13 * t) *
1608  t) *
1609  t) *
1610  t) *
1611  t) *
1612  t;
1613  }
1614  case 44: {
1615  double t = 2 * y100 - 89;
1616  return 0.11094484319386444474e0 +
1617  (0.21637548491908170841e-2 +
1618  (0.17164995035719657111e-4 +
1619  (0.12317915750735938089e-6 +
1620  (0.79376309831499633734e-9 +
1621  (0.45427901763106353914e-11 + 0.22696025653333333333e-13 * t) *
1622  t) *
1623  t) *
1624  t) *
1625  t) *
1626  t;
1627  }
1628  case 45: {
1629  double t = 2 * y100 - 91;
1630  return 0.11534201115268804714e0 +
1631  (0.22339187474546420375e-2 +
1632  (0.17923489217504226813e-4 +
1633  (0.12971465288245997681e-6 +
1634  (0.84057834180389073587e-9 +
1635  (0.48233721206418027227e-11 + 0.24079890062222222222e-13 * t) *
1636  t) *
1637  t) *
1638  t) *
1639  t) *
1640  t;
1641  }
1642  case 46: {
1643  double t = 2 * y100 - 93;
1644  return 0.11988259392684094740e0 +
1645  (0.23071965691918689601e-2 +
1646  (0.18722342718958935446e-4 +
1647  (0.13663611754337957520e-6 +
1648  (0.89028385488493287005e-9 +
1649  (0.51210161569225846701e-11 + 0.25540227111111111111e-13 * t) *
1650  t) *
1651  t) *
1652  t) *
1653  t) *
1654  t;
1655  }
1656  case 47: {
1657  double t = 2 * y100 - 95;
1658  return 0.12457298393509812907e0 +
1659  (0.23837544771809575380e-2 +
1660  (0.19563942105711612475e-4 +
1661  (0.14396736847739470782e-6 +
1662  (0.94305490646459247016e-9 +
1663  (0.54366590583134218096e-11 + 0.27080225920000000000e-13 * t) *
1664  t) *
1665  t) *
1666  t) *
1667  t) *
1668  t;
1669  }
1670  case 48: {
1671  double t = 2 * y100 - 97;
1672  return 0.12941991566142438816e0 +
1673  (0.24637684719508859484e-2 +
1674  (0.20450821127475879816e-4 +
1675  (0.15173366280523906622e-6 +
1676  (0.99907632506389027739e-9 +
1677  (0.57712760311351625221e-11 + 0.28703099555555555556e-13 * t) *
1678  t) *
1679  t) *
1680  t) *
1681  t) *
1682  t;
1683  }
1684  case 49: {
1685  double t = 2 * y100 - 99;
1686  return 0.13443048593088696613e0 +
1687  (0.25474249981080823877e-2 +
1688  (0.21385669591362915223e-4 +
1689  (0.15996177579900443030e-6 +
1690  (0.10585428844575134013e-8 +
1691  (0.61258809536787882989e-11 + 0.30412080142222222222e-13 * t) *
1692  t) *
1693  t) *
1694  t) *
1695  t) *
1696  t;
1697  }
1698  case 50: {
1699  double t = 2 * y100 - 101;
1700  return 0.13961217543434561353e0 +
1701  (0.26349215871051761416e-2 +
1702  (0.22371342712572567744e-4 +
1703  (0.16868008199296822247e-6 +
1704  (0.11216596910444996246e-8 +
1705  (0.65015264753090890662e-11 + 0.32210394506666666666e-13 * t) *
1706  t) *
1707  t) *
1708  t) *
1709  t) *
1710  t;
1711  }
1712  case 51: {
1713  double t = 2 * y100 - 103;
1714  return 0.14497287157673800690e0 +
1715  (0.27264675383982439814e-2 +
1716  (0.23410870961050950197e-4 +
1717  (0.17791863939526376477e-6 +
1718  (0.11886425714330958106e-8 +
1719  (0.68993039665054288034e-11 + 0.34101266222222222221e-13 * t) *
1720  t) *
1721  t) *
1722  t) *
1723  t) *
1724  t;
1725  }
1726  case 52: {
1727  double t = 2 * y100 - 105;
1728  return 0.15052089272774618151e0 +
1729  (0.28222846410136238008e-2 +
1730  (0.24507470422713397006e-4 +
1731  (0.18770927679626136909e-6 +
1732  (0.12597184587583370712e-8 +
1733  (0.73203433049229821618e-11 + 0.36087889048888888890e-13 * t) *
1734  t) *
1735  t) *
1736  t) *
1737  t) *
1738  t;
1739  }
1740  case 53: {
1741  double t = 2 * y100 - 107;
1742  return 0.15626501395774612325e0 +
1743  (0.29226079376196624949e-2 +
1744  (0.25664553693768450545e-4 +
1745  (0.19808568415654461964e-6 +
1746  (0.13351257759815557897e-8 +
1747  (0.77658124891046760667e-11 + 0.38173420035555555555e-13 * t) *
1748  t) *
1749  t) *
1750  t) *
1751  t) *
1752  t;
1753  }
1754  case 54: {
1755  double t = 2 * y100 - 109;
1756  return 0.16221449434620737567e0 +
1757  (0.30276865332726475672e-2 +
1758  (0.26885741326534564336e-4 +
1759  (0.20908350604346384143e-6 +
1760  (0.14151148144240728728e-8 +
1761  (0.82369170665974313027e-11 + 0.40360957457777777779e-13 * t) *
1762  t) *
1763  t) *
1764  t) *
1765  t) *
1766  t;
1767  }
1768  case 55: {
1769  double t = 2 * y100 - 111;
1770  return 0.16837910595412130659e0 +
1771  (0.31377844510793082301e-2 +
1772  (0.28174873844911175026e-4 +
1773  (0.22074043807045782387e-6 +
1774  (0.14999481055996090039e-8 +
1775  (0.87348993661930809254e-11 + 0.42653528977777777779e-13 * t) *
1776  t) *
1777  t) *
1778  t) *
1779  t) *
1780  t;
1781  }
1782  case 56: {
1783  double t = 2 * y100 - 113;
1784  return 0.17476916455659369953e0 +
1785  (0.32531815370903068316e-2 +
1786  (0.29536024347344364074e-4 +
1787  (0.23309632627767074202e-6 +
1788  (0.15899007843582444846e-8 +
1789  (0.92610375235427359475e-11 + 0.45054073102222222221e-13 * t) *
1790  t) *
1791  t) *
1792  t) *
1793  t) *
1794  t;
1795  }
1796  case 57: {
1797  double t = 2 * y100 - 115;
1798  return 0.18139556223643701364e0 +
1799  (0.33741744168096996041e-2 +
1800  (0.30973511714709500836e-4 +
1801  (0.24619326937592290996e-6 +
1802  (0.16852609412267750744e-8 +
1803  (0.98166442942854895573e-11 + 0.47565418097777777779e-13 * t) *
1804  t) *
1805  t) *
1806  t) *
1807  t) *
1808  t;
1809  }
1810  case 58: {
1811  double t = 2 * y100 - 117;
1812  return 0.18826980194443664549e0 +
1813  (0.35010775057740317997e-2 +
1814  (0.32491914440014267480e-4 +
1815  (0.26007572375886319028e-6 +
1816  (0.17863299617388376116e-8 +
1817  (0.10403065638343878679e-10 + 0.50190265831111111110e-13 * t) *
1818  t) *
1819  t) *
1820  t) *
1821  t) *
1822  t;
1823  }
1824  case 59: {
1825  double t = 2 * y100 - 119;
1826  return 0.19540403413693967350e0 +
1827  (0.36342240767211326315e-2 +
1828  (0.34096085096200907289e-4 +
1829  (0.27479061117017637474e-6 +
1830  (0.18934228504790032826e-8 +
1831  (0.11021679075323598664e-10 + 0.52931171733333333334e-13 * t) *
1832  t) *
1833  t) *
1834  t) *
1835  t) *
1836  t;
1837  }
1838  case 60: {
1839  double t = 2 * y100 - 121;
1840  return 0.20281109560651886959e0 +
1841  (0.37739673859323597060e-2 +
1842  (0.35791165457592409054e-4 +
1843  (0.29038742889416172404e-6 +
1844  (0.20068685374849001770e-8 +
1845  (0.11673891799578381999e-10 + 0.55790523093333333334e-13 * t) *
1846  t) *
1847  t) *
1848  t) *
1849  t) *
1850  t;
1851  }
1852  case 61: {
1853  double t = 2 * y100 - 123;
1854  return 0.21050455062669334978e0 +
1855  (0.39206818613925652425e-2 +
1856  (0.37582602289680101704e-4 +
1857  (0.30691836231886877385e-6 +
1858  (0.21270101645763677824e-8 +
1859  (0.12361138551062899455e-10 + 0.58770520160000000000e-13 * t) *
1860  t) *
1861  t) *
1862  t) *
1863  t) *
1864  t;
1865  }
1866  case 62: {
1867  double t = 2 * y100 - 125;
1868  return 0.21849873453703332479e0 +
1869  (0.40747643554689586041e-2 +
1870  (0.39476163820986711501e-4 +
1871  (0.32443839970139918836e-6 +
1872  (0.22542053491518680200e-8 +
1873  (0.13084879235290858490e-10 + 0.61873153262222222221e-13 * t) *
1874  t) *
1875  t) *
1876  t) *
1877  t) *
1878  t;
1879  }
1880  case 63: {
1881  double t = 2 * y100 - 127;
1882  return 0.22680879990043229327e0 +
1883  (0.42366354648628516935e-2 +
1884  (0.41477956909656896779e-4 +
1885  (0.34300544894502810002e-6 +
1886  (0.23888264229264067658e-8 +
1887  (0.13846596292818514601e-10 + 0.65100183751111111110e-13 * t) *
1888  t) *
1889  t) *
1890  t) *
1891  t) *
1892  t;
1893  }
1894  case 64: {
1895  double t = 2 * y100 - 129;
1896  return 0.23545076536988703937e0 +
1897  (0.44067409206365170888e-2 +
1898  (0.43594444916224700881e-4 +
1899  (0.36268045617760415178e-6 +
1900  (0.25312606430853202748e-8 +
1901  (0.14647791812837903061e-10 + 0.68453122631111111110e-13 * t) *
1902  t) *
1903  t) *
1904  t) *
1905  t) *
1906  t;
1907  }
1908  case 65: {
1909  double t = 2 * y100 - 131;
1910  return 0.24444156740777432838e0 +
1911  (0.45855530511605787178e-2 +
1912  (0.45832466292683085475e-4 +
1913  (0.38352752590033030472e-6 +
1914  (0.26819103733055603460e-8 +
1915  (0.15489984390884756993e-10 + 0.71933206364444444445e-13 * t) *
1916  t) *
1917  t) *
1918  t) *
1919  t) *
1920  t;
1921  }
1922  case 66: {
1923  double t = 2 * y100 - 133;
1924  return 0.25379911500634264643e0 +
1925  (0.47735723208650032167e-2 +
1926  (0.48199253896534185372e-4 +
1927  (0.40561404245564732314e-6 +
1928  (0.28411932320871165585e-8 +
1929  (0.16374705736458320149e-10 + 0.75541379822222222221e-13 * t) *
1930  t) *
1931  t) *
1932  t) *
1933  t) *
1934  t;
1935  }
1936  case 67: {
1937  double t = 2 * y100 - 135;
1938  return 0.26354234756393613032e0 +
1939  (0.49713289477083781266e-2 +
1940  (0.50702455036930367504e-4 +
1941  (0.42901079254268185722e-6 +
1942  (0.30095422058900481753e-8 +
1943  (0.17303497025347342498e-10 + 0.79278273368888888890e-13 * t) *
1944  t) *
1945  t) *
1946  t) *
1947  t) *
1948  t;
1949  }
1950  case 68: {
1951  double t = 2 * y100 - 137;
1952  return 0.27369129607732343398e0 +
1953  (0.51793846023052643767e-2 +
1954  (0.53350152258326602629e-4 +
1955  (0.45379208848865015485e-6 +
1956  (0.31874057245814381257e-8 +
1957  (0.18277905010245111046e-10 + 0.83144182364444444445e-13 * t) *
1958  t) *
1959  t) *
1960  t) *
1961  t) *
1962  t;
1963  }
1964  case 69: {
1965  double t = 2 * y100 - 139;
1966  return 0.28426714781640316172e0 +
1967  (0.53983341916695141966e-2 +
1968  (0.56150884865255810638e-4 +
1969  (0.48003589196494734238e-6 +
1970  (0.33752476967570796349e-8 +
1971  (0.19299477888083469086e-10 + 0.87139049137777777779e-13 * t) *
1972  t) *
1973  t) *
1974  t) *
1975  t) *
1976  t;
1977  }
1978  case 70: {
1979  double t = 2 * y100 - 141;
1980  return 0.29529231465348519920e0 +
1981  (0.56288077305420795663e-2 +
1982  (0.59113671189913307427e-4 +
1983  (0.50782393781744840482e-6 +
1984  (0.35735475025851713168e-8 +
1985  (0.20369760937017070382e-10 + 0.91262442613333333334e-13 * t) *
1986  t) *
1987  t) *
1988  t) *
1989  t) *
1990  t;
1991  }
1992  case 71: {
1993  double t = 2 * y100 - 143;
1994  return 0.30679050522528838613e0 +
1995  (0.58714723032745403331e-2 +
1996  (0.62248031602197686791e-4 +
1997  (0.53724185766200945789e-6 +
1998  (0.37827999418960232678e-8 +
1999  (0.21490291930444538307e-10 + 0.95513539182222222221e-13 * t) *
2000  t) *
2001  t) *
2002  t) *
2003  t) *
2004  t;
2005  }
2006  case 72: {
2007  double t = 2 * y100 - 145;
2008  return 0.31878680111173319425e0 +
2009  (0.61270341192339103514e-2 +
2010  (0.65564012259707640976e-4 +
2011  (0.56837930287837738996e-6 +
2012  (0.40035151353392378882e-8 +
2013  (0.22662596341239294792e-10 + 0.99891109760000000000e-13 * t) *
2014  t) *
2015  t) *
2016  t) *
2017  t) *
2018  t;
2019  }
2020  case 73: {
2021  double t = 2 * y100 - 147;
2022  return 0.33130773722152622027e0 +
2023  (0.63962406646798080903e-2 +
2024  (0.69072209592942396666e-4 +
2025  (0.60133006661885941812e-6 +
2026  (0.42362183765883466691e-8 +
2027  (0.23888182347073698382e-10 + 0.10439349811555555556e-12 * t) *
2028  t) *
2029  t) *
2030  t) *
2031  t) *
2032  t;
2033  }
2034  case 74: {
2035  double t = 2 * y100 - 149;
2036  return 0.34438138658041336523e0 +
2037  (0.66798829540414007258e-2 +
2038  (0.72783795518603561144e-4 +
2039  (0.63619220443228800680e-6 +
2040  (0.44814499336514453364e-8 +
2041  (0.25168535651285475274e-10 + 0.10901861383111111111e-12 * t) *
2042  t) *
2043  t) *
2044  t) *
2045  t) *
2046  t;
2047  }
2048  case 75: {
2049  double t = 2 * y100 - 151;
2050  return 0.35803744972380175583e0 +
2051  (0.69787978834882685031e-2 +
2052  (0.76710543371454822497e-4 +
2053  (0.67306815308917386747e-6 +
2054  (0.47397647975845228205e-8 +
2055  (0.26505114141143050509e-10 + 0.11376390933333333333e-12 * t) *
2056  t) *
2057  t) *
2058  t) *
2059  t) *
2060  t;
2061  }
2062  case 76: {
2063  double t = 2 * y100 - 153;
2064  return 0.37230734890119724188e0 +
2065  (0.72938706896461381003e-2 +
2066  (0.80864854542670714092e-4 +
2067  (0.71206484718062688779e-6 +
2068  (0.50117323769745883805e-8 +
2069  (0.27899342394100074165e-10 + 0.11862637614222222222e-12 * t) *
2070  t) *
2071  t) *
2072  t) *
2073  t) *
2074  t;
2075  }
2076  case 77: {
2077  double t = 2 * y100 - 155;
2078  return 0.38722432730555448223e0 +
2079  (0.76260375162549802745e-2 +
2080  (0.85259785810004603848e-4 +
2081  (0.75329383305171327677e-6 +
2082  (0.52979361368388119355e-8 +
2083  (0.29352606054164086709e-10 + 0.12360253370666666667e-12 * t) *
2084  t) *
2085  t) *
2086  t) *
2087  t) *
2088  t;
2089  }
2090  case 78: {
2091  double t = 2 * y100 - 157;
2092  return 0.40282355354616940667e0 +
2093  (0.79762880915029728079e-2 +
2094  (0.89909077342438246452e-4 +
2095  (0.79687137961956194579e-6 +
2096  (0.55989731807360403195e-8 +
2097  (0.30866246101464869050e-10 + 0.12868841946666666667e-12 * t) *
2098  t) *
2099  t) *
2100  t) *
2101  t) *
2102  t;
2103  }
2104  case 79: {
2105  double t = 2 * y100 - 159;
2106  return 0.41914223158913787649e0 +
2107  (0.83456685186950463538e-2 +
2108  (0.94827181359250161335e-4 +
2109  (0.84291858561783141014e-6 +
2110  (0.59154537751083485684e-8 +
2111  (0.32441553034347469291e-10 + 0.13387957943111111111e-12 * t) *
2112  t) *
2113  t) *
2114  t) *
2115  t) *
2116  t;
2117  }
2118  case 80: {
2119  double t = 2 * y100 - 161;
2120  return 0.43621971639463786896e0 +
2121  (0.87352841828289495773e-2 +
2122  (0.10002929142066799966e-3 +
2123  (0.89156148280219880024e-6 +
2124  (0.62480008150788597147e-8 +
2125  (0.34079760983458878910e-10 + 0.13917107176888888889e-12 * t) *
2126  t) *
2127  t) *
2128  t) *
2129  t) *
2130  t;
2131  }
2132  case 81: {
2133  double t = 2 * y100 - 163;
2134  return 0.45409763548534330981e0 +
2135  (0.91463027755548240654e-2 +
2136  (0.10553137232446167258e-3 +
2137  (0.94293113464638623798e-6 +
2138  (0.65972492312219959885e-8 +
2139  (0.35782041795476563662e-10 + 0.14455745872000000000e-12 * t) *
2140  t) *
2141  t) *
2142  t) *
2143  t) *
2144  t;
2145  }
2146  case 82: {
2147  double t = 2 * y100 - 165;
2148  return 0.47282001668512331468e0 +
2149  (0.95799574408860463394e-2 +
2150  (0.11135019058000067469e-3 +
2151  (0.99716373005509038080e-6 +
2152  (0.69638453369956970347e-8 +
2153  (0.37549499088161345850e-10 + 0.15003280712888888889e-12 * t) *
2154  t) *
2155  t) *
2156  t) *
2157  t) *
2158  t;
2159  }
2160  case 83: {
2161  double t = 2 * y100 - 167;
2162  return 0.49243342227179841649e0 +
2163  (0.10037550043909497071e-1 +
2164  (0.11750334542845234952e-3 +
2165  (0.10544006716188967172e-5 +
2166  (0.73484461168242224872e-8 +
2167  (0.39383162326435752965e-10 + 0.15559069118222222222e-12 * t) *
2168  t) *
2169  t) *
2170  t) *
2171  t) *
2172  t;
2173  }
2174  case 84: {
2175  double t = 2 * y100 - 169;
2176  return 0.51298708979209258326e0 +
2177  (0.10520454564612427224e-1 +
2178  (0.12400930037494996655e-3 +
2179  (0.11147886579371265246e-5 +
2180  (0.77517184550568711454e-8 +
2181  (0.41283980931872622611e-10 + 0.16122419680000000000e-12 * t) *
2182  t) *
2183  t) *
2184  t) *
2185  t) *
2186  t;
2187  }
2188  case 85: {
2189  double t = 2 * y100 - 171;
2190  return 0.53453307979101369843e0 +
2191  (0.11030120618800726938e-1 +
2192  (0.13088741519572269581e-3 +
2193  (0.11784797595374515432e-5 +
2194  (0.81743383063044825400e-8 +
2195  (0.43252818449517081051e-10 + 0.16692592640000000000e-12 * t) *
2196  t) *
2197  t) *
2198  t) *
2199  t) *
2200  t;
2201  }
2202  case 86: {
2203  double t = 2 * y100 - 173;
2204  return 0.55712643071169299478e0 +
2205  (0.11568077107929735233e-1 +
2206  (0.13815797838036651289e-3 +
2207  (0.12456314879260904558e-5 +
2208  (0.86169898078969313597e-8 +
2209  (0.45290446811539652525e-10 + 0.17268801084444444444e-12 * t) *
2210  t) *
2211  t) *
2212  t) *
2213  t) *
2214  t;
2215  }
2216  case 87: {
2217  double t = 2 * y100 - 175;
2218  return 0.58082532122519320968e0 +
2219  (0.12135935999503877077e-1 +
2220  (0.14584223996665838559e-3 +
2221  (0.13164068573095710742e-5 +
2222  (0.90803643355106020163e-8 +
2223  (0.47397540713124619155e-10 + 0.17850211608888888889e-12 * t) *
2224  t) *
2225  t) *
2226  t) *
2227  t) *
2228  t;
2229  }
2230  case 88: {
2231  double t = 2 * y100 - 177;
2232  return 0.60569124025293375554e0 +
2233  (0.12735396239525550361e-1 +
2234  (0.15396244472258863344e-3 +
2235  (0.13909744385382818253e-5 +
2236  (0.95651595032306228245e-8 +
2237  (0.49574672127669041550e-10 + 0.18435945564444444444e-12 * t) *
2238  t) *
2239  t) *
2240  t) *
2241  t) *
2242  t;
2243  }
2244  case 89: {
2245  double t = 2 * y100 - 179;
2246  return 0.63178916494715716894e0 +
2247  (0.13368247798287030927e-1 +
2248  (0.16254186562762076141e-3 +
2249  (0.14695084048334056083e-5 +
2250  (0.10072078109604152350e-7 +
2251  (0.51822304995680707483e-10 + 0.19025081422222222222e-12 * t) *
2252  t) *
2253  t) *
2254  t) *
2255  t) *
2256  t;
2257  }
2258  case 90: {
2259  double t = 2 * y100 - 181;
2260  return 0.65918774689725319200e0 +
2261  (0.14036375850601992063e-1 +
2262  (0.17160483760259706354e-3 +
2263  (0.15521885688723188371e-5 +
2264  (0.10601827031535280590e-7 +
2265  (0.54140790105837520499e-10 + 0.19616655146666666667e-12 * t) *
2266  t) *
2267  t) *
2268  t) *
2269  t) *
2270  t;
2271  }
2272  case 91: {
2273  double t = 2 * y100 - 183;
2274  return 0.68795950683174433822e0 +
2275  (0.14741765091365869084e-1 +
2276  (0.18117679143520433835e-3 +
2277  (0.16392004108230585213e-5 +
2278  (0.11155116068018043001e-7 +
2279  (0.56530360194925690374e-10 + 0.20209663662222222222e-12 * t) *
2280  t) *
2281  t) *
2282  t) *
2283  t) *
2284  t;
2285  }
2286  case 92: {
2287  double t = 2 * y100 - 185;
2288  return 0.71818103808729967036e0 +
2289  (0.15486504187117112279e-1 +
2290  (0.19128428784550923217e-3 +
2291  (0.17307350969359975848e-5 +
2292  (0.11732656736113607751e-7 +
2293  (0.58991125287563833603e-10 + 0.20803065333333333333e-12 * t) *
2294  t) *
2295  t) *
2296  t) *
2297  t) *
2298  t;
2299  }
2300  case 93: {
2301  double t = 2 * y100 - 187;
2302  return 0.74993321911726254661e0 +
2303  (0.16272790364044783382e-1 +
2304  (0.20195505163377912645e-3 +
2305  (0.18269894883203346953e-5 +
2306  (0.12335161021630225535e-7 +
2307  (0.61523068312169087227e-10 + 0.21395783431111111111e-12 * t) *
2308  t) *
2309  t) *
2310  t) *
2311  t) *
2312  t;
2313  }
2314  case 94: {
2315  double t = 2 * y100 - 189;
2316  return 0.78330143531283492729e0 +
2317  (0.17102934132652429240e-1 +
2318  (0.21321800585063327041e-3 +
2319  (0.19281661395543913713e-5 +
2320  (0.12963340087354341574e-7 +
2321  (0.64126040998066348872e-10 + 0.21986708942222222222e-12 * t) *
2322  t) *
2323  t) *
2324  t) *
2325  t) *
2326  t;
2327  }
2328  case 95: {
2329  double t = 2 * y100 - 191;
2330  return 0.81837581041023811832e0 +
2331  (0.17979364149044223802e-1 +
2332  (0.22510330592753129006e-3 +
2333  (0.20344732868018175389e-5 +
2334  (0.13617902941839949718e-7 +
2335  (0.66799760083972474642e-10 + 0.22574701262222222222e-12 * t) *
2336  t) *
2337  t) *
2338  t) *
2339  t) *
2340  t;
2341  }
2342  case 96: {
2343  double t = 2 * y100 - 193;
2344  return 0.85525144775685126237e0 +
2345  (0.18904632212547561026e-1 +
2346  (0.23764237370371255638e-3 +
2347  (0.21461248251306387979e-5 +
2348  (0.14299555071870523786e-7 +
2349  (0.69543803864694171934e-10 + 0.23158593688888888889e-12 * t) *
2350  t) *
2351  t) *
2352  t) *
2353  t) *
2354  t;
2355  }
2356  case 97: {
2357  double t = 2 * y100 - 195;
2358  return 0.89402868170849933734e0 +
2359  (0.19881418399127202569e-1 +
2360  (0.25086793128395995798e-3 +
2361  (0.22633402747585233180e-5 +
2362  (0.15008997042116532283e-7 +
2363  (0.72357609075043941261e-10 + 0.23737194737777777778e-12 * t) *
2364  t) *
2365  t) *
2366  t) *
2367  t) *
2368  t;
2369  }
2370  case 98: {
2371  double t = 2 * y100 - 197;
2372  return 0.93481333942870796363e0 +
2373  (0.20912536329780368893e-1 +
2374  (0.26481403465998477969e-3 +
2375  (0.23863447359754921676e-5 +
2376  (0.15746923065472184451e-7 +
2377  (0.75240468141720143653e-10 + 0.24309291271111111111e-12 * t) *
2378  t) *
2379  t) *
2380  t) *
2381  t) *
2382  t;
2383  }
2384  case 99: {
2385  double t = 2 * y100 - 199;
2386  return 0.97771701335885035464e0 +
2387  (0.22000938572830479551e-1 +
2388  (0.27951610702682383001e-3 +
2389  (0.25153688325245314530e-5 +
2390  (0.16514019547822821453e-7 +
2391  (0.78191526829368231251e-10 + 0.24873652355555555556e-12 * t) *
2392  t) *
2393  t) *
2394  t) *
2395  t) *
2396  t;
2397  }
2398  }
2399  // we only get here if y = 1, i.e. |x| < 4*eps, in which case
2400  // erfcx is within 1e-15 of 1..
2401  return 1.0;
2402 }
2403 
2404 double FADDEEVA_RE(erfcx)(double x) {
2405  if (x >= 0) {
2406  if (x > 50) { // continued-fraction expansion is faster
2407  const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi)
2408  if (x > 5e7) // 1-term expansion, important to avoid overflow
2409  return ispi / x;
2410  /* 5-term expansion (rely on compiler for CSE), simplified from:
2411  ispi / (x+0.5/(x+1/(x+1.5/(x+2/x)))) */
2412  return ispi * ((x * x) * (x * x + 4.5) + 2) /
2413  (x * ((x * x) * (x * x + 5) + 3.75));
2414  }
2415  return erfcx_y100(400 / (4 + x));
2416  } else
2417  return x < -26.7 ? HUGE_VAL
2418  : (x < -6.1 ? 2 * exp(x * x)
2419  : 2 * exp(x * x) - erfcx_y100(400 / (4 - x)));
2420 }
2421 
2423 /* Compute a scaled Dawson integral
2424  FADDEEVA(w_im)(x) = 2*Dawson(x)/sqrt(pi)
2425  equivalent to the imaginary part w(x) for real x.
2426 
2427  Uses methods similar to the erfcx calculation above: continued fractions
2428  for large |x|, a lookup table of Chebyshev polynomials for smaller |x|,
2429  and finally a Taylor expansion for |x|<0.01.
2430 
2431  Steven G. Johnson, October 2012. */
2432 
2433 /* Given y100=100*y, where y = 1/(1+x) for x >= 0, compute w_im(x).
2434 
2435  Uses a look-up table of 100 different Chebyshev polynomials
2436  for y intervals [0,0.01], [0.01,0.02], ...., [0.99,1], generated
2437  with the help of Maple and a little shell script. This allows
2438  the Chebyshev polynomials to be of significantly lower degree (about 1/30)
2439  compared to fitting the whole [0,1] interval with a single polynomial. */
2440 static double w_im_y100(double y100, double x) {
2441  switch ((int)y100) {
2442  case 0: {
2443  double t = 2 * y100 - 1;
2444  return 0.28351593328822191546e-2 +
2445  (0.28494783221378400759e-2 +
2446  (0.14427470563276734183e-4 +
2447  (0.10939723080231588129e-6 +
2448  (0.92474307943275042045e-9 +
2449  (0.89128907666450075245e-11 + 0.92974121935111111110e-13 * t) *
2450  t) *
2451  t) *
2452  t) *
2453  t) *
2454  t;
2455  }
2456  case 1: {
2457  double t = 2 * y100 - 3;
2458  return 0.85927161243940350562e-2 +
2459  (0.29085312941641339862e-2 +
2460  (0.15106783707725582090e-4 +
2461  (0.11716709978531327367e-6 +
2462  (0.10197387816021040024e-8 +
2463  (0.10122678863073360769e-10 + 0.10917479678400000000e-12 * t) *
2464  t) *
2465  t) *
2466  t) *
2467  t) *
2468  t;
2469  }
2470  case 2: {
2471  double t = 2 * y100 - 5;
2472  return 0.14471159831187703054e-1 +
2473  (0.29703978970263836210e-2 +
2474  (0.15835096760173030976e-4 +
2475  (0.12574803383199211596e-6 +
2476  (0.11278672159518415848e-8 +
2477  (0.11547462300333495797e-10 + 0.12894535335111111111e-12 * t) *
2478  t) *
2479  t) *
2480  t) *
2481  t) *
2482  t;
2483  }
2484  case 3: {
2485  double t = 2 * y100 - 7;
2486  return 0.20476320420324610618e-1 +
2487  (0.30352843012898665856e-2 +
2488  (0.16617609387003727409e-4 +
2489  (0.13525429711163116103e-6 +
2490  (0.12515095552507169013e-8 +
2491  (0.13235687543603382345e-10 + 0.15326595042666666667e-12 * t) *
2492  t) *
2493  t) *
2494  t) *
2495  t) *
2496  t;
2497  }
2498  case 4: {
2499  double t = 2 * y100 - 9;
2500  return 0.26614461952489004566e-1 +
2501  (0.31034189276234947088e-2 +
2502  (0.17460268109986214274e-4 +
2503  (0.14582130824485709573e-6 +
2504  (0.13935959083809746345e-8 +
2505  (0.15249438072998932900e-10 + 0.18344741882133333333e-12 * t) *
2506  t) *
2507  t) *
2508  t) *
2509  t) *
2510  t;
2511  }
2512  case 5: {
2513  double t = 2 * y100 - 11;
2514  return 0.32892330248093586215e-1 +
2515  (0.31750557067975068584e-2 +
2516  (0.18369907582308672632e-4 +
2517  (0.15761063702089457882e-6 +
2518  (0.15577638230480894382e-8 +
2519  (0.17663868462699097951e-10 +
2520  (0.22126732680711111111e-12 + 0.30273474177737853668e-14 * t) *
2521  t) *
2522  t) *
2523  t) *
2524  t) *
2525  t) *
2526  t;
2527  }
2528  case 6: {
2529  double t = 2 * y100 - 13;
2530  return 0.39317207681134336024e-1 +
2531  (0.32504779701937539333e-2 +
2532  (0.19354426046513400534e-4 +
2533  (0.17081646971321290539e-6 +
2534  (0.17485733959327106250e-8 +
2535  (0.20593687304921961410e-10 +
2536  (0.26917401949155555556e-12 + 0.38562123837725712270e-14 * t) *
2537  t) *
2538  t) *
2539  t) *
2540  t) *
2541  t) *
2542  t;
2543  }
2544  case 7: {
2545  double t = 2 * y100 - 15;
2546  return 0.45896976511367738235e-1 +
2547  (0.33300031273110976165e-2 +
2548  (0.20423005398039037313e-4 +
2549  (0.18567412470376467303e-6 +
2550  (0.19718038363586588213e-8 +
2551  (0.24175006536781219807e-10 +
2552  (0.33059982791466666666e-12 + 0.49756574284439426165e-14 * t) *
2553  t) *
2554  t) *
2555  t) *
2556  t) *
2557  t) *
2558  t;
2559  }
2560  case 8: {
2561  double t = 2 * y100 - 17;
2562  return 0.52640192524848962855e-1 +
2563  (0.34139883358846720806e-2 +
2564  (0.21586390240603337337e-4 +
2565  (0.20247136501568904646e-6 +
2566  (0.22348696948197102935e-8 +
2567  (0.28597516301950162548e-10 +
2568  (0.41045502119111111110e-12 + 0.65151614515238361946e-14 * t) *
2569  t) *
2570  t) *
2571  t) *
2572  t) *
2573  t) *
2574  t;
2575  }
2576  case 9: {
2577  double t = 2 * y100 - 19;
2578  return 0.59556171228656770456e-1 +
2579  (0.35028374386648914444e-2 +
2580  (0.22857246150998562824e-4 +
2581  (0.22156372146525190679e-6 +
2582  (0.25474171590893813583e-8 +
2583  (0.34122390890697400584e-10 +
2584  (0.51593189879111111110e-12 + 0.86775076853908006938e-14 * t) *
2585  t) *
2586  t) *
2587  t) *
2588  t) *
2589  t) *
2590  t;
2591  }
2592  case 10: {
2593  double t = 2 * y100 - 21;
2594  return 0.66655089485108212551e-1 +
2595  (0.35970095381271285568e-2 +
2596  (0.24250626164318672928e-4 +
2597  (0.24339561521785040536e-6 +
2598  (0.29221990406518411415e-8 +
2599  (0.41117013527967776467e-10 +
2600  (0.65786450716444444445e-12 + 0.11791885745450623331e-13 * t) *
2601  t) *
2602  t) *
2603  t) *
2604  t) *
2605  t) *
2606  t;
2607  }
2608  case 11: {
2609  double t = 2 * y100 - 23;
2610  return 0.73948106345519174661e-1 +
2611  (0.36970297216569341748e-2 +
2612  (0.25784588137312868792e-4 +
2613  (0.26853012002366752770e-6 +
2614  (0.33763958861206729592e-8 +
2615  (0.50111549981376976397e-10 +
2616  (0.85313857496888888890e-12 + 0.16417079927706899860e-13 * t) *
2617  t) *
2618  t) *
2619  t) *
2620  t) *
2621  t) *
2622  t;
2623  }
2624  case 12: {
2625  double t = 2 * y100 - 25;
2626  return 0.81447508065002963203e-1 +
2627  (0.38035026606492705117e-2 +
2628  (0.27481027572231851896e-4 +
2629  (0.29769200731832331364e-6 +
2630  (0.39336816287457655076e-8 +
2631  (0.61895471132038157624e-10 +
2632  (0.11292303213511111111e-11 + 0.23558532213703884304e-13 * t) *
2633  t) *
2634  t) *
2635  t) *
2636  t) *
2637  t) *
2638  t;
2639  }
2640  case 13: {
2641  double t = 2 * y100 - 27;
2642  return 0.89166884027582716628e-1 +
2643  (0.39171301322438946014e-2 +
2644  (0.29366827260422311668e-4 +
2645  (0.33183204390350724895e-6 +
2646  (0.46276006281647330524e-8 +
2647  (0.77692631378169813324e-10 +
2648  (0.15335153258844444444e-11 + 0.35183103415916026911e-13 * t) *
2649  t) *
2650  t) *
2651  t) *
2652  t) *
2653  t) *
2654  t;
2655  }
2656  case 14: {
2657  double t = 2 * y100 - 29;
2658  return 0.97121342888032322019e-1 +
2659  (0.40387340353207909514e-2 +
2660  (0.31475490395950776930e-4 +
2661  (0.37222714227125135042e-6 +
2662  (0.55074373178613809996e-8 +
2663  (0.99509175283990337944e-10 +
2664  (0.21552645758222222222e-11 + 0.55728651431872687605e-13 * t) *
2665  t) *
2666  t) *
2667  t) *
2668  t) *
2669  t) *
2670  t;
2671  }
2672  case 15: {
2673  double t = 2 * y100 - 31;
2674  return 0.10532778218603311137e0 +
2675  (0.41692873614065380607e-2 +
2676  (0.33849549774889456984e-4 +
2677  (0.42064596193692630143e-6 +
2678  (0.66494579697622432987e-8 +
2679  (0.13094103581931802337e-9 +
2680  (0.31896187409777777778e-11 + 0.97271974184476560742e-13 * t) *
2681  t) *
2682  t) *
2683  t) *
2684  t) *
2685  t) *
2686  t;
2687  }
2688  case 16: {
2689  double t = 2 * y100 - 33;
2690  return 0.11380523107427108222e0 +
2691  (0.43099572287871821013e-2 +
2692  (0.36544324341565929930e-4 +
2693  (0.47965044028581857764e-6 +
2694  (0.81819034238463698796e-8 +
2695  (0.17934133239549647357e-9 +
2696  (0.50956666166186293627e-11 +
2697  (0.18850487318190638010e-12 + 0.79697813173519853340e-14 * t) *
2698  t) *
2699  t) *
2700  t) *
2701  t) *
2702  t) *
2703  t) *
2704  t;
2705  }
2706  case 17: {
2707  double t = 2 * y100 - 35;
2708  return 0.12257529703447467345e0 +
2709  (0.44621675710026986366e-2 +
2710  (0.39634304721292440285e-4 +
2711  (0.55321553769873381819e-6 +
2712  (0.10343619428848520870e-7 +
2713  (0.26033830170470368088e-9 +
2714  (0.87743837749108025357e-11 +
2715  (0.34427092430230063401e-12 + 0.10205506615709843189e-13 * t) *
2716  t) *
2717  t) *
2718  t) *
2719  t) *
2720  t) *
2721  t) *
2722  t;
2723  }
2724  case 18: {
2725  double t = 2 * y100 - 37;
2726  return 0.13166276955656699478e0 +
2727  (0.46276970481783001803e-2 +
2728  (0.43225026380496399310e-4 +
2729  (0.64799164020016902656e-6 +
2730  (0.13580082794704641782e-7 +
2731  (0.39839800853954313927e-9 +
2732  (0.14431142411840000000e-10 + 0.42193457308830027541e-12 * t) *
2733  t) *
2734  t) *
2735  t) *
2736  t) *
2737  t) *
2738  t;
2739  }
2740  case 19: {
2741  double t = 2 * y100 - 39;
2742  return 0.14109647869803356475e0 +
2743  (0.48088424418545347758e-2 +
2744  (0.47474504753352150205e-4 +
2745  (0.77509866468724360352e-6 +
2746  (0.18536851570794291724e-7 +
2747  (0.60146623257887570439e-9 +
2748  (0.18533978397305276318e-10 +
2749  (0.41033845938901048380e-13 - 0.46160680279304825485e-13 * t) *
2750  t) *
2751  t) *
2752  t) *
2753  t) *
2754  t) *
2755  t) *
2756  t;
2757  }
2758  case 20: {
2759  double t = 2 * y100 - 41;
2760  return 0.15091057940548936603e0 +
2761  (0.50086864672004685703e-2 +
2762  (0.52622482832192230762e-4 +
2763  (0.95034664722040355212e-6 +
2764  (0.25614261331144718769e-7 +
2765  (0.80183196716888606252e-9 +
2766  (0.12282524750534352272e-10 + (-0.10531774117332273617e-11 -
2767  0.86157181395039646412e-13 * t) *
2768  t) *
2769  t) *
2770  t) *
2771  t) *
2772  t) *
2773  t) *
2774  t;
2775  }
2776  case 21: {
2777  double t = 2 * y100 - 43;
2778  return 0.16114648116017010770e0 +
2779  (0.52314661581655369795e-2 +
2780  (0.59005534545908331315e-4 +
2781  (0.11885518333915387760e-5 +
2782  (0.33975801443239949256e-7 +
2783  (0.82111547144080388610e-9 + (-0.12357674017312854138e-10 +
2784  (-0.24355112256914479176e-11 -
2785  0.75155506863572930844e-13 * t) *
2786  t) *
2787  t) *
2788  t) *
2789  t) *
2790  t) *
2791  t) *
2792  t;
2793  }
2794  case 22: {
2795  double t = 2 * y100 - 45;
2796  return 0.17185551279680451144e0 +
2797  (0.54829002967599420860e-2 +
2798  (0.67013226658738082118e-4 +
2799  (0.14897400671425088807e-5 +
2800  (0.40690283917126153701e-7 +
2801  (0.44060872913473778318e-9 +
2802  (-0.52641873433280000000e-10 - 0.30940587864543343124e-11 * t) *
2803  t) *
2804  t) *
2805  t) *
2806  t) *
2807  t) *
2808  t;
2809  }
2810  case 23: {
2811  double t = 2 * y100 - 47;
2812  return 0.18310194559815257381e0 +
2813  (0.57701559375966953174e-2 +
2814  (0.76948789401735193483e-4 +
2815  (0.18227569842290822512e-5 +
2816  (0.41092208344387212276e-7 +
2817  (-0.44009499965694442143e-9 + (-0.92195414685628803451e-10 +
2818  (-0.22657389705721753299e-11 +
2819  0.10004784908106839254e-12 * t) *
2820  t) *
2821  t) *
2822  t) *
2823  t) *
2824  t) *
2825  t) *
2826  t;
2827  }
2828  case 24: {
2829  double t = 2 * y100 - 49;
2830  return 0.19496527191546630345e0 +
2831  (0.61010853144364724856e-2 +
2832  (0.88812881056342004864e-4 +
2833  (0.21180686746360261031e-5 +
2834  (0.30652145555130049203e-7 +
2835  (-0.16841328574105890409e-8 +
2836  (-0.11008129460612823934e-9 + (-0.12180794204544515779e-12 +
2837  0.15703325634590334097e-12 * t) *
2838  t) *
2839  t) *
2840  t) *
2841  t) *
2842  t) *
2843  t) *
2844  t;
2845  }
2846  case 25: {
2847  double t = 2 * y100 - 51;
2848  return 0.20754006813966575720e0 +
2849  (0.64825787724922073908e-2 +
2850  (0.10209599627522311893e-3 +
2851  (0.22785233392557600468e-5 +
2852  (0.73495224449907568402e-8 +
2853  (-0.29442705974150112783e-8 +
2854  (-0.94082603434315016546e-10 +
2855  (0.23609990400179321267e-11 + 0.14141908654269023788e-12 * t) *
2856  t) *
2857  t) *
2858  t) *
2859  t) *
2860  t) *
2861  t) *
2862  t;
2863  }
2864  case 26: {
2865  double t = 2 * y100 - 53;
2866  return 0.22093185554845172146e0 +
2867  (0.69182878150187964499e-2 +
2868  (0.11568723331156335712e-3 +
2869  (0.22060577946323627739e-5 +
2870  (-0.26929730679360840096e-7 +
2871  (-0.38176506152362058013e-8 +
2872  (-0.47399503861054459243e-10 +
2873  (0.40953700187172127264e-11 + 0.69157730376118511127e-13 * t) *
2874  t) *
2875  t) *
2876  t) *
2877  t) *
2878  t) *
2879  t) *
2880  t;
2881  }
2882  case 27: {
2883  double t = 2 * y100 - 55;
2884  return 0.23524827304057813918e0 +
2885  (0.74063350762008734520e-2 +
2886  (0.12796333874615790348e-3 +
2887  (0.18327267316171054273e-5 +
2888  (-0.66742910737957100098e-7 +
2889  (-0.40204740975496797870e-8 +
2890  (0.14515984139495745330e-10 +
2891  (0.44921608954536047975e-11 - 0.18583341338983776219e-13 * t) *
2892  t) *
2893  t) *
2894  t) *
2895  t) *
2896  t) *
2897  t) *
2898  t;
2899  }
2900  case 28: {
2901  double t = 2 * y100 - 57;
2902  return 0.25058626331812744775e0 +
2903  (0.79377285151602061328e-2 +
2904  (0.13704268650417478346e-3 +
2905  (0.11427511739544695861e-5 +
2906  (-0.10485442447768377485e-6 +
2907  (-0.34850364756499369763e-8 +
2908  (0.72656453829502179208e-10 +
2909  (0.36195460197779299406e-11 - 0.84882136022200714710e-13 * t) *
2910  t) *
2911  t) *
2912  t) *
2913  t) *
2914  t) *
2915  t) *
2916  t;
2917  }
2918  case 29: {
2919  double t = 2 * y100 - 59;
2920  return 0.26701724900280689785e0 +
2921  (0.84959936119625864274e-2 +
2922  (0.14112359443938883232e-3 +
2923  (0.17800427288596909634e-6 +
2924  (-0.13443492107643109071e-6 +
2925  (-0.23512456315677680293e-8 +
2926  (0.11245846264695936769e-9 +
2927  (0.19850501334649565404e-11 - 0.11284666134635050832e-12 * t) *
2928  t) *
2929  t) *
2930  t) *
2931  t) *
2932  t) *
2933  t) *
2934  t;
2935  }
2936  case 30: {
2937  double t = 2 * y100 - 61;
2938  return 0.28457293586253654144e0 +
2939  (0.90581563892650431899e-2 +
2940  (0.13880520331140646738e-3 +
2941  (-0.97262302362522896157e-6 +
2942  (-0.15077100040254187366e-6 +
2943  (-0.88574317464577116689e-9 +
2944  (0.12760311125637474581e-9 +
2945  (0.20155151018282695055e-12 - 0.10514169375181734921e-12 * t) *
2946  t) *
2947  t) *
2948  t) *
2949  t) *
2950  t) *
2951  t) *
2952  t;
2953  }
2954  case 31: {
2955  double t = 2 * y100 - 63;
2956  return 0.30323425595617385705e0 +
2957  (0.95968346790597422934e-2 +
2958  (0.12931067776725883939e-3 +
2959  (-0.21938741702795543986e-5 +
2960  (-0.15202888584907373963e-6 +
2961  (0.61788350541116331411e-9 +
2962  (0.11957835742791248256e-9 + (-0.12598179834007710908e-11 -
2963  0.75151817129574614194e-13 * t) *
2964  t) *
2965  t) *
2966  t) *
2967  t) *
2968  t) *
2969  t) *
2970  t;
2971  }
2972  case 32: {
2973  double t = 2 * y100 - 65;
2974  return 0.32292521181517384379e0 +
2975  (0.10082957727001199408e-1 +
2976  (0.11257589426154962226e-3 +
2977  (-0.33670890319327881129e-5 +
2978  (-0.13910529040004008158e-6 +
2979  (0.19170714373047512945e-8 +
2980  (0.94840222377720494290e-10 + (-0.21650018351795353201e-11 -
2981  0.37875211678024922689e-13 * t) *
2982  t) *
2983  t) *
2984  t) *
2985  t) *
2986  t) *
2987  t) *
2988  t;
2989  }
2990  case 33: {
2991  double t = 2 * y100 - 67;
2992  return 0.34351233557911753862e0 +
2993  (0.10488575435572745309e-1 +
2994  (0.89209444197248726614e-4 +
2995  (-0.43893459576483345364e-5 +
2996  (-0.11488595830450424419e-6 +
2997  (0.28599494117122464806e-8 +
2998  (0.61537542799857777779e-10 - 0.24935749227658002212e-11 * t) *
2999  t) *
3000  t) *
3001  t) *
3002  t) *
3003  t) *
3004  t;
3005  }
3006  case 34: {
3007  double t = 2 * y100 - 69;
3008  return 0.36480946642143669093e0 +
3009  (0.10789304203431861366e-1 +
3010  (0.60357993745283076834e-4 +
3011  (-0.51855862174130669389e-5 +
3012  (-0.83291664087289801313e-7 +
3013  (0.33898011178582671546e-8 +
3014  (0.27082948188277716482e-10 + (-0.23603379397408694974e-11 +
3015  0.19328087692252869842e-13 * t) *
3016  t) *
3017  t) *
3018  t) *
3019  t) *
3020  t) *
3021  t) *
3022  t;
3023  }
3024  case 35: {
3025  double t = 2 * y100 - 71;
3026  return 0.38658679935694939199e0 +
3027  (0.10966119158288804999e-1 +
3028  (0.27521612041849561426e-4 +
3029  (-0.57132774537670953638e-5 +
3030  (-0.48404772799207914899e-7 +
3031  (0.35268354132474570493e-8 + (-0.32383477652514618094e-11 +
3032  (-0.19334202915190442501e-11 +
3033  0.32333189861286460270e-13 * t) *
3034  t) *
3035  t) *
3036  t) *
3037  t) *
3038  t) *
3039  t) *
3040  t;
3041  }
3042  case 36: {
3043  double t = 2 * y100 - 73;
3044  return 0.40858275583808707870e0 +
3045  (0.11006378016848466550e-1 +
3046  (-0.76396376685213286033e-5 +
3047  (-0.59609835484245791439e-5 +
3048  (-0.13834610033859313213e-7 +
3049  (0.33406952974861448790e-8 + (-0.26474915974296612559e-10 +
3050  (-0.13750229270354351983e-11 +
3051  0.36169366979417390637e-13 * t) *
3052  t) *
3053  t) *
3054  t) *
3055  t) *
3056  t) *
3057  t) *
3058  t;
3059  }
3060  case 37: {
3061  double t = 2 * y100 - 75;
3062  return 0.43051714914006682977e0 +
3063  (0.10904106549500816155e-1 +
3064  (-0.43477527256787216909e-4 +
3065  (-0.59429739547798343948e-5 +
3066  (0.17639200194091885949e-7 +
3067  (0.29235991689639918688e-8 + (-0.41718791216277812879e-10 +
3068  (-0.81023337739508049606e-12 +
3069  0.33618915934461994428e-13 * t) *
3070  t) *
3071  t) *
3072  t) *
3073  t) *
3074  t) *
3075  t) *
3076  t;
3077  }
3078  case 38: {
3079  double t = 2 * y100 - 77;
3080  return 0.45210428135559607406e0 +
3081  (0.10659670756384400554e-1 +
3082  (-0.78488639913256978087e-4 +
3083  (-0.56919860886214735936e-5 +
3084  (0.44181850467477733407e-7 +
3085  (0.23694306174312688151e-8 + (-0.49492621596685443247e-10 +
3086  (-0.31827275712126287222e-12 +
3087  0.27494438742721623654e-13 * t) *
3088  t) *
3089  t) *
3090  t) *
3091  t) *
3092  t) *
3093  t) *
3094  t;
3095  }
3096  case 39: {
3097  double t = 2 * y100 - 79;
3098  return 0.47306491195005224077e0 +
3099  (0.10279006119745977570e-1 +
3100  (-0.11140268171830478306e-3 +
3101  (-0.52518035247451432069e-5 +
3102  (0.64846898158889479518e-7 +
3103  (0.17603624837787337662e-8 +
3104  (-0.51129481592926104316e-10 +
3105  (0.62674584974141049511e-13 + 0.20055478560829935356e-13 * t) *
3106  t) *
3107  t) *
3108  t) *
3109  t) *
3110  t) *
3111  t) *
3112  t;
3113  }
3114  case 40: {
3115  double t = 2 * y100 - 81;
3116  return 0.49313638965719857647e0 +
3117  (0.97725799114772017662e-2 +
3118  (-0.14122854267291533334e-3 +
3119  (-0.46707252568834951907e-5 +
3120  (0.79421347979319449524e-7 +
3121  (0.11603027184324708643e-8 +
3122  (-0.48269605844397175946e-10 +
3123  (0.32477251431748571219e-12 + 0.12831052634143527985e-13 * t) *
3124  t) *
3125  t) *
3126  t) *
3127  t) *
3128  t) *
3129  t) *
3130  t;
3131  }
3132  case 41: {
3133  double t = 2 * y100 - 83;
3134  return 0.51208057433416004042e0 +
3135  (0.91542422354009224951e-2 +
3136  (-0.16726530230228647275e-3 +
3137  (-0.39964621752527649409e-5 +
3138  (0.88232252903213171454e-7 +
3139  (0.61343113364949928501e-9 +
3140  (-0.42516755603130443051e-10 +
3141  (0.47910437172240209262e-12 + 0.66784341874437478953e-14 * t) *
3142  t) *
3143  t) *
3144  t) *
3145  t) *
3146  t) *
3147  t) *
3148  t;
3149  }
3150  case 42: {
3151  double t = 2 * y100 - 85;
3152  return 0.52968945458607484524e0 +
3153  (0.84400880445116786088e-2 +
3154  (-0.18908729783854258774e-3 +
3155  (-0.32725905467782951931e-5 +
3156  (0.91956190588652090659e-7 +
3157  (0.14593989152420122909e-9 +
3158  (-0.35239490687644444445e-10 + 0.54613829888448694898e-12 * t) *
3159  t) *
3160  t) *
3161  t) *
3162  t) *
3163  t) *
3164  t;
3165  }
3166  case 43: {
3167  double t = 2 * y100 - 87;
3168  return 0.54578857454330070965e0 +
3169  (0.76474155195880295311e-2 +
3170  (-0.20651230590808213884e-3 +
3171  (-0.25364339140543131706e-5 +
3172  (0.91455367999510681979e-7 +
3173  (-0.23061359005297528898e-9 +
3174  (-0.27512928625244444444e-10 + 0.54895806008493285579e-12 * t) *
3175  t) *
3176  t) *
3177  t) *
3178  t) *
3179  t) *
3180  t;
3181  }
3182  case 44: {
3183  double t = 2 * y100 - 89;
3184  return 0.56023851910298493910e0 +
3185  (0.67938321739997196804e-2 +
3186  (-0.21956066613331411760e-3 +
3187  (-0.18181127670443266395e-5 +
3188  (0.87650335075416845987e-7 +
3189  (-0.51548062050366615977e-9 +
3190  (-0.20068462174044444444e-10 + 0.50912654909758187264e-12 * t) *
3191  t) *
3192  t) *
3193  t) *
3194  t) *
3195  t) *
3196  t;
3197  }
3198  case 45: {
3199  double t = 2 * y100 - 91;
3200  return 0.57293478057455721150e0 +
3201  (0.58965321010394044087e-2 +
3202  (-0.22841145229276575597e-3 +
3203  (-0.11404605562013443659e-5 +
3204  (0.81430290992322326296e-7 +
3205  (-0.71512447242755357629e-9 +
3206  (-0.13372664928000000000e-10 + 0.44461498336689298148e-12 * t) *
3207  t) *
3208  t) *
3209  t) *
3210  t) *
3211  t) *
3212  t;
3213  }
3214  case 46: {
3215  double t = 2 * y100 - 93;
3216  return 0.58380635448407827360e0 +
3217  (0.49717469530842831182e-2 +
3218  (-0.23336001540009645365e-3 +
3219  (-0.51952064448608850822e-6 +
3220  (0.73596577815411080511e-7 +
3221  (-0.84020916763091566035e-9 +
3222  (-0.76700972702222222221e-11 + 0.36914462807972467044e-12 * t) *
3223  t) *
3224  t) *
3225  t) *
3226  t) *
3227  t) *
3228  t;
3229  }
3230  case 47: {
3231  double t = 2 * y100 - 95;
3232  return 0.59281340237769489597e0 +
3233  (0.40343592069379730568e-2 +
3234  (-0.23477963738658326185e-3 +
3235  (0.34615944987790224234e-7 +
3236  (0.64832803248395814574e-7 +
3237  (-0.90329163587627007971e-9 +
3238  (-0.30421940400000000000e-11 + 0.29237386653743536669e-12 * t) *
3239  t) *
3240  t) *
3241  t) *
3242  t) *
3243  t) *
3244  t;
3245  }
3246  case 48: {
3247  double t = 2 * y100 - 97;
3248  return 0.59994428743114271918e0 +
3249  (0.30976579788271744329e-2 +
3250  (-0.23308875765700082835e-3 +
3251  (0.51681681023846925160e-6 +
3252  (0.55694594264948268169e-7 +
3253  (-0.91719117313243464652e-9 +
3254  (0.53982743680000000000e-12 + 0.22050829296187771142e-12 * t) *
3255  t) *
3256  t) *
3257  t) *
3258  t) *
3259  t) *
3260  t;
3261  }
3262  case 49: {
3263  double t = 2 * y100 - 99;
3264  return 0.60521224471819875444e0 +
3265  (0.21732138012345456060e-2 +
3266  (-0.22872428969625997456e-3 +
3267  (0.92588959922653404233e-6 +
3268  (0.46612665806531930684e-7 +
3269  (-0.89393722514414153351e-9 +
3270  (0.31718550353777777778e-11 + 0.15705458816080549117e-12 * t) *
3271  t) *
3272  t) *
3273  t) *
3274  t) *
3275  t) *
3276  t;
3277  }
3278  case 50: {
3279  double t = 2 * y100 - 101;
3280  return 0.60865189969791123620e0 +
3281  (0.12708480848877451719e-2 +
3282  (-0.22212090111534847166e-3 +
3283  (0.12636236031532793467e-5 +
3284  (0.37904037100232937574e-7 +
3285  (-0.84417089968101223519e-9 +
3286  (0.49843180828444444445e-11 + 0.10355439441049048273e-12 * t) *
3287  t) *
3288  t) *
3289  t) *
3290  t) *
3291  t) *
3292  t;
3293  }
3294  case 51: {
3295  double t = 2 * y100 - 103;
3296  return 0.61031580103499200191e0 +
3297  (0.39867436055861038223e-3 +
3298  (-0.21369573439579869291e-3 +
3299  (0.15339402129026183670e-5 +
3300  (0.29787479206646594442e-7 +
3301  (-0.77687792914228632974e-9 +
3302  (0.61192452741333333334e-11 + 0.60216691829459295780e-13 * t) *
3303  t) *
3304  t) *
3305  t) *
3306  t) *
3307  t) *
3308  t;
3309  }
3310  case 52: {
3311  double t = 2 * y100 - 105;
3312  return 0.61027109047879835868e0 +
3313  (-0.43680904508059878254e-3 +
3314  (-0.20383783788303894442e-3 +
3315  (0.17421743090883439959e-5 +
3316  (0.22400425572175715576e-7 +
3317  (-0.69934719320045128997e-9 +
3318  (0.67152759655111111110e-11 + 0.26419960042578359995e-13 * t) *
3319  t) *
3320  t) *
3321  t) *
3322  t) *
3323  t) *
3324  t;
3325  }
3326  case 53: {
3327  double t = 2 * y100 - 107;
3328  return 0.60859639489217430521e0 +
3329  (-0.12305921390962936873e-2 +
3330  (-0.19290150253894682629e-3 +
3331  (0.18944904654478310128e-5 +
3332  (0.15815530398618149110e-7 +
3333  (-0.61726850580964876070e-9 + 0.68987888999111111110e-11 * t) *
3334  t) *
3335  t) *
3336  t) *
3337  t) *
3338  t;
3339  }
3340  case 54: {
3341  double t = 2 * y100 - 109;
3342  return 0.60537899426486075181e0 +
3343  (-0.19790062241395705751e-2 +
3344  (-0.18120271393047062253e-3 +
3345  (0.19974264162313241405e-5 +
3346  (0.10055795094298172492e-7 +
3347  (-0.53491997919318263593e-9 +
3348  (0.67794550295111111110e-11 - 0.17059208095741511603e-13 * t) *
3349  t) *
3350  t) *
3351  t) *
3352  t) *
3353  t) *
3354  t;
3355  }
3356  case 55: {
3357  double t = 2 * y100 - 111;
3358  return 0.60071229457904110537e0 +
3359  (-0.26795676776166354354e-2 +
3360  (-0.16901799553627508781e-3 +
3361  (0.20575498324332621581e-5 +
3362  (0.51077165074461745053e-8 +
3363  (-0.45536079828057221858e-9 +
3364  (0.64488005516444444445e-11 - 0.29311677573152766338e-13 * t) *
3365  t) *
3366  t) *
3367  t) *
3368  t) *
3369  t) *
3370  t;
3371  }
3372  case 56: {
3373  double t = 2 * y100 - 113;
3374  return 0.59469361520112714738e0 +
3375  (-0.33308208190600993470e-2 +
3376  (-0.15658501295912405679e-3 +
3377  (0.20812116912895417272e-5 +
3378  (0.93227468760614182021e-9 +
3379  (-0.38066673740116080415e-9 +
3380  (0.59806790359111111110e-11 - 0.36887077278950440597e-13 * t) *
3381  t) *
3382  t) *
3383  t) *
3384  t) *
3385  t) *
3386  t;
3387  }
3388  case 57: {
3389  double t = 2 * y100 - 115;
3390  return 0.58742228631775388268e0 +
3391  (-0.39321858196059227251e-2 +
3392  (-0.14410441141450122535e-3 +
3393  (0.20743790018404020716e-5 +
3394  (-0.25261903811221913762e-8 +
3395  (-0.31212416519526924318e-9 +
3396  (0.54328422462222222221e-11 - 0.40864152484979815972e-13 * t) *
3397  t) *
3398  t) *
3399  t) *
3400  t) *
3401  t) *
3402  t;
3403  }
3404  case 58: {
3405  double t = 2 * y100 - 117;
3406  return 0.57899804200033018447e0 +
3407  (-0.44838157005618913447e-2 +
3408  (-0.13174245966501437965e-3 +
3409  (0.20425306888294362674e-5 +
3410  (-0.53330296023875447782e-8 +
3411  (-0.25041289435539821014e-9 +
3412  (0.48490437205333333334e-11 - 0.42162206939169045177e-13 * t) *
3413  t) *
3414  t) *
3415  t) *
3416  t) *
3417  t) *
3418  t;
3419  }
3420  case 59: {
3421  double t = 2 * y100 - 119;
3422  return 0.56951968796931245974e0 +
3423  (-0.49864649488074868952e-2 +
3424  (-0.11963416583477567125e-3 +
3425  (0.19906021780991036425e-5 +
3426  (-0.75580140299436494248e-8 +
3427  (-0.19576060961919820491e-9 +
3428  (0.42613011928888888890e-11 - 0.41539443304115604377e-13 * t) *
3429  t) *
3430  t) *
3431  t) *
3432  t) *
3433  t) *
3434  t;
3435  }
3436  case 60: {
3437  double t = 2 * y100 - 121;
3438  return 0.55908401930063918964e0 +
3439  (-0.54413711036826877753e-2 +
3440  (-0.10788661102511914628e-3 +
3441  (0.19229663322982839331e-5 +
3442  (-0.92714731195118129616e-8 +
3443  (-0.14807038677197394186e-9 +
3444  (0.36920870298666666666e-11 - 0.39603726688419162617e-13 * t) *
3445  t) *
3446  t) *
3447  t) *
3448  t) *
3449  t) *
3450  t;
3451  }
3452  case 61: {
3453  double t = 2 * y100 - 123;
3454  return 0.54778496152925675315e0 +
3455  (-0.58501497933213396670e-2 +
3456  (-0.96582314317855227421e-4 +
3457  (0.18434405235069270228e-5 +
3458  (-0.10541580254317078711e-7 +
3459  (-0.10702303407788943498e-9 +
3460  (0.31563175582222222222e-11 - 0.36829748079110481422e-13 * t) *
3461  t) *
3462  t) *
3463  t) *
3464  t) *
3465  t) *
3466  t;
3467  }
3468  case 62: {
3469  double t = 2 * y100 - 125;
3470  return 0.53571290831682823999e0 +
3471  (-0.62147030670760791791e-2 +
3472  (-0.85782497917111760790e-4 +
3473  (0.17553116363443470478e-5 +
3474  (-0.11432547349815541084e-7 +
3475  (-0.72157091369041330520e-10 +
3476  (0.26630811607111111111e-11 - 0.33578660425893164084e-13 * t) *
3477  t) *
3478  t) *
3479  t) *
3480  t) *
3481  t) *
3482  t;
3483  }
3484  case 63: {
3485  double t = 2 * y100 - 127;
3486  return 0.52295422962048434978e0 +
3487  (-0.65371404367776320720e-2 +
3488  (-0.75530164941473343780e-4 +
3489  (0.16613725797181276790e-5 +
3490  (-0.12003521296598910761e-7 +
3491  (-0.42929753689181106171e-10 +
3492  (0.22170894940444444444e-11 - 0.30117697501065110505e-13 * t) *
3493  t) *
3494  t) *
3495  t) *
3496  t) *
3497  t) *
3498  t;
3499  }
3500  case 64: {
3501  double t = 2 * y100 - 129;
3502  return 0.50959092577577886140e0 +
3503  (-0.68197117603118591766e-2 +
3504  (-0.65852936198953623307e-4 +
3505  (0.15639654113906716939e-5 +
3506  (-0.12308007991056524902e-7 +
3507  (-0.18761997536910939570e-10 +
3508  (0.18198628922666666667e-11 - 0.26638355362285200932e-13 * t) *
3509  t) *
3510  t) *
3511  t) *
3512  t) *
3513  t) *
3514  t;
3515  }
3516  case 65: {
3517  double t = 2 * y100 - 131;
3518  return 0.49570040481823167970e0 +
3519  (-0.70647509397614398066e-2 +
3520  (-0.56765617728962588218e-4 +
3521  (0.14650274449141448497e-5 +
3522  (-0.12393681471984051132e-7 +
3523  (0.92904351801168955424e-12 +
3524  (0.14706755960177777778e-11 - 0.23272455351266325318e-13 * t) *
3525  t) *
3526  t) *
3527  t) *
3528  t) *
3529  t) *
3530  t;
3531  }
3532  case 66: {
3533  double t = 2 * y100 - 133;
3534  return 0.48135536250935238066e0 +
3535  (-0.72746293327402359783e-2 +
3536  (-0.48272489495730030780e-4 +
3537  (0.13661377309113939689e-5 +
3538  (-0.12302464447599382189e-7 +
3539  (0.16707760028737074907e-10 +
3540  (0.11672928324444444444e-11 - 0.20105801424709924499e-13 * t) *
3541  t) *
3542  t) *
3543  t) *
3544  t) *
3545  t) *
3546  t;
3547  }
3548  case 67: {
3549  double t = 2 * y100 - 135;
3550  return 0.46662374675511439448e0 +
3551  (-0.74517177649528487002e-2 +
3552  (-0.40369318744279128718e-4 +
3553  (0.12685621118898535407e-5 +
3554  (-0.12070791463315156250e-7 +
3555  (0.29105507892605823871e-10 +
3556  (0.90653314645333333334e-12 - 0.17189503312102982646e-13 * t) *
3557  t) *
3558  t) *
3559  t) *
3560  t) *
3561  t) *
3562  t;
3563  }
3564  case 68: {
3565  double t = 2 * y100 - 137;
3566  return 0.45156879030168268778e0 +
3567  (-0.75983560650033817497e-2 +
3568  (-0.33045110380705139759e-4 +
3569  (0.11732956732035040896e-5 +
3570  (-0.11729986947158201869e-7 +
3571  (0.38611905704166441308e-10 +
3572  (0.68468768305777777779e-12 - 0.14549134330396754575e-13 * t) *
3573  t) *
3574  t) *
3575  t) *
3576  t) *
3577  t) *
3578  t;
3579  }
3580  case 69: {
3581  double t = 2 * y100 - 139;
3582  return 0.43624909769330896904e0 +
3583  (-0.77168291040309554679e-2 +
3584  (-0.26283612321339907756e-4 +
3585  (0.10811018836893550820e-5 +
3586  (-0.11306707563739851552e-7 +
3587  (0.45670446788529607380e-10 +
3588  (0.49782492549333333334e-12 - 0.12191983967561779442e-13 * t) *
3589  t) *
3590  t) *
3591  t) *
3592  t) *
3593  t) *
3594  t;
3595  }
3596  case 70: {
3597  double t = 2 * y100 - 141;
3598  return 0.42071877443548481181e0 +
3599  (-0.78093484015052730097e-2 +
3600  (-0.20064596897224934705e-4 +
3601  (0.99254806680671890766e-6 +
3602  (-0.10823412088884741451e-7 +
3603  (0.50677203326904716247e-10 +
3604  (0.34200547594666666666e-12 - 0.10112698698356194618e-13 * t) *
3605  t) *
3606  t) *
3607  t) *
3608  t) *
3609  t) *
3610  t;
3611  }
3612  case 71: {
3613  double t = 2 * y100 - 143;
3614  return 0.40502758809710844280e0 +
3615  (-0.78780384460872937555e-2 +
3616  (-0.14364940764532853112e-4 +
3617  (0.90803709228265217384e-6 +
3618  (-0.10298832847014466907e-7 +
3619  (0.53981671221969478551e-10 +
3620  (0.21342751381333333333e-12 - 0.82975901848387729274e-14 * t) *
3621  t) *
3622  t) *
3623  t) *
3624  t) *
3625  t) *
3626  t;
3627  }
3628  case 72: {
3629  double t = 2 * y100 - 145;
3630  return 0.38922115269731446690e0 +
3631  (-0.79249269708242064120e-2 +
3632  (-0.91595258799106970453e-5 +
3633  (0.82783535102217576495e-6 +
3634  (-0.97484311059617744437e-8 +
3635  (0.55889029041660225629e-10 +
3636  (0.10851981336888888889e-12 - 0.67278553237853459757e-14 * t) *
3637  t) *
3638  t) *
3639  t) *
3640  t) *
3641  t) *
3642  t;
3643  }
3644  case 73: {
3645  double t = 2 * y100 - 147;
3646  return 0.37334112915460307335e0 +
3647  (-0.79519385109223148791e-2 +
3648  (-0.44219833548840469752e-5 +
3649  (0.75209719038240314732e-6 +
3650  (-0.91848251458553190451e-8 +
3651  (0.56663266668051433844e-10 +
3652  (0.23995894257777777778e-13 - 0.53819475285389344313e-14 * t) *
3653  t) *
3654  t) *
3655  t) *
3656  t) *
3657  t) *
3658  t;
3659  }
3660  case 74: {
3661  double t = 2 * y100 - 149;
3662  return 0.35742543583374223085e0 +
3663  (-0.79608906571527956177e-2 +
3664  (-0.12530071050975781198e-6 +
3665  (0.68088605744900552505e-6 +
3666  (-0.86181844090844164075e-8 +
3667  (0.56530784203816176153e-10 +
3668  (-0.43120012248888888890e-13 - 0.42372603392496813810e-14 * t) *
3669  t) *
3670  t) *
3671  t) *
3672  t) *
3673  t) *
3674  t;
3675  }
3676  case 75: {
3677  double t = 2 * y100 - 151;
3678  return 0.34150846431979618536e0 +
3679  (-0.79534924968773806029e-2 +
3680  (0.37576885610891515813e-5 +
3681  (0.61419263633090524326e-6 +
3682  (-0.80565865409945960125e-8 +
3683  (0.55684175248749269411e-10 +
3684  (-0.95486860764444444445e-13 - 0.32712946432984510595e-14 * t) *
3685  t) *
3686  t) *
3687  t) *
3688  t) *
3689  t) *
3690  t;
3691  }
3692  case 76: {
3693  double t = 2 * y100 - 153;
3694  return 0.32562129649136346824e0 +
3695  (-0.79313448067948884309e-2 +
3696  (0.72539159933545300034e-5 +
3697  (0.55195028297415503083e-6 +
3698  (-0.75063365335570475258e-8 +
3699  (0.54281686749699595941e-10 - 0.13545424295111111111e-12 * t) *
3700  t) *
3701  t) *
3702  t) *
3703  t) *
3704  t;
3705  }
3706  case 77: {
3707  double t = 2 * y100 - 155;
3708  return 0.30979191977078391864e0 +
3709  (-0.78959416264207333695e-2 +
3710  (0.10389774377677210794e-4 +
3711  (0.49404804463196316464e-6 +
3712  (-0.69722488229411164685e-8 +
3713  (0.52469254655951393842e-10 - 0.16507860650666666667e-12 * t) *
3714  t) *
3715  t) *
3716  t) *
3717  t) *
3718  t;
3719  }
3720  case 78: {
3721  double t = 2 * y100 - 157;
3722  return 0.29404543811214459904e0 +
3723  (-0.78486728990364155356e-2 +
3724  (0.13190885683106990459e-4 +
3725  (0.44034158861387909694e-6 +
3726  (-0.64578942561562616481e-8 +
3727  (0.50354306498006928984e-10 - 0.18614473550222222222e-12 * t) *
3728  t) *
3729  t) *
3730  t) *
3731  t) *
3732  t;
3733  }
3734  case 79: {
3735  double t = 2 * y100 - 159;
3736  return 0.27840427686253660515e0 +
3737  (-0.77908279176252742013e-2 +
3738  (0.15681928798708548349e-4 +
3739  (0.39066226205099807573e-6 +
3740  (-0.59658144820660420814e-8 +
3741  (0.48030086420373141763e-10 - 0.20018995173333333333e-12 * t) *
3742  t) *
3743  t) *
3744  t) *
3745  t) *
3746  t;
3747  }
3748  case 80: {
3749  double t = 2 * y100 - 161;
3750  return 0.26288838011163800908e0 +
3751  (-0.77235993576119469018e-2 +
3752  (0.17886516796198660969e-4 +
3753  (0.34482457073472497720e-6 +
3754  (-0.54977066551955420066e-8 +
3755  (0.45572749379147269213e-10 - 0.20852924954666666667e-12 * t) *
3756  t) *
3757  t) *
3758  t) *
3759  t) *
3760  t;
3761  }
3762  case 81: {
3763  double t = 2 * y100 - 163;
3764  return 0.24751539954181029717e0 +
3765  (-0.76480877165290370975e-2 +
3766  (0.19827114835033977049e-4 +
3767  (0.30263228619976332110e-6 +
3768  (-0.50545814570120129947e-8 +
3769  (0.43043879374212005966e-10 - 0.21228012028444444444e-12 * t) *
3770  t) *
3771  t) *
3772  t) *
3773  t) *
3774  t;
3775  }
3776  case 82: {
3777  double t = 2 * y100 - 165;
3778  return 0.23230087411688914593e0 +
3779  (-0.75653060136384041587e-2 +
3780  (0.21524991113020016415e-4 +
3781  (0.26388338542539382413e-6 +
3782  (-0.46368974069671446622e-8 +
3783  (0.40492715758206515307e-10 - 0.21238627815111111111e-12 * t) *
3784  t) *
3785  t) *
3786  t) *
3787  t) *
3788  t;
3789  }
3790  case 83: {
3791  double t = 2 * y100 - 167;
3792  return 0.21725840021297341931e0 +
3793  (-0.74761846305979730439e-2 +
3794  (0.23000194404129495243e-4 +
3795  (0.22837400135642906796e-6 +
3796  (-0.42446743058417541277e-8 +
3797  (0.37958104071765923728e-10 - 0.20963978568888888889e-12 * t) *
3798  t) *
3799  t) *
3800  t) *
3801  t) *
3802  t;
3803  }
3804  case 84: {
3805  double t = 2 * y100 - 169;
3806  return 0.20239979200788191491e0 +
3807  (-0.73815761980493466516e-2 +
3808  (0.24271552727631854013e-4 +
3809  (0.19590154043390012843e-6 +
3810  (-0.38775884642456551753e-8 +
3811  (0.35470192372162901168e-10 - 0.20470131678222222222e-12 * t) *
3812  t) *
3813  t) *
3814  t) *
3815  t) *
3816  t;
3817  }
3818  case 85: {
3819  double t = 2 * y100 - 171;
3820  return 0.18773523211558098962e0 +
3821  (-0.72822604530339834448e-2 +
3822  (0.25356688567841293697e-4 +
3823  (0.16626710297744290016e-6 +
3824  (-0.35350521468015310830e-8 +
3825  (0.33051896213898864306e-10 - 0.19811844544000000000e-12 * t) *
3826  t) *
3827  t) *
3828  t) *
3829  t) *
3830  t;
3831  }
3832  case 86: {
3833  double t = 2 * y100 - 173;
3834  return 0.17327341258479649442e0 +
3835  (-0.71789490089142761950e-2 +
3836  (0.26272046822383820476e-4 +
3837  (0.13927732375657362345e-6 +
3838  (-0.32162794266956859603e-8 +
3839  (0.30720156036105652035e-10 - 0.19034196304000000000e-12 * t) *
3840  t) *
3841  t) *
3842  t) *
3843  t) *
3844  t;
3845  }
3846  case 87: {
3847  double t = 2 * y100 - 175;
3848  return 0.15902166648328672043e0 +
3849  (-0.70722899934245504034e-2 +
3850  (0.27032932310132226025e-4 +
3851  (0.11474573347816568279e-6 +
3852  (-0.29203404091754665063e-8 +
3853  (0.28487010262547971859e-10 - 0.18174029063111111111e-12 * t) *
3854  t) *
3855  t) *
3856  t) *
3857  t) *
3858  t;
3859  }
3860  case 88: {
3861  double t = 2 * y100 - 177;
3862  return 0.14498609036610283865e0 +
3863  (-0.69628725220045029273e-2 +
3864  (0.27653554229160596221e-4 +
3865  (0.92493727167393036470e-7 +
3866  (-0.26462055548683583849e-8 +
3867  (0.26360506250989943739e-10 - 0.17261211260444444444e-12 * t) *
3868  t) *
3869  t) *
3870  t) *
3871  t) *
3872  t;
3873  }
3874  case 89: {
3875  double t = 2 * y100 - 179;
3876  return 0.13117165798208050667e0 +
3877  (-0.68512309830281084723e-2 +
3878  (0.28147075431133863774e-4 +
3879  (0.72351212437979583441e-7 +
3880  (-0.23927816200314358570e-8 +
3881  (0.24345469651209833155e-10 - 0.16319736960000000000e-12 * t) *
3882  t) *
3883  t) *
3884  t) *
3885  t) *
3886  t;
3887  }
3888  case 90: {
3889  double t = 2 * y100 - 181;
3890  return 0.11758232561160626306e0 +
3891  (-0.67378491192463392927e-2 +
3892  (0.28525664781722907847e-4 +
3893  (0.54156999310046790024e-7 +
3894  (-0.21589405340123827823e-8 +
3895  (0.22444150951727334619e-10 - 0.15368675584000000000e-12 * t) *
3896  t) *
3897  t) *
3898  t) *
3899  t) *
3900  t;
3901  }
3902  case 91: {
3903  double t = 2 * y100 - 183;
3904  return 0.10422112945361673560e0 +
3905  (-0.66231638959845581564e-2 +
3906  (0.28800551216363918088e-4 +
3907  (0.37758983397952149613e-7 +
3908  (-0.19435423557038933431e-8 +
3909  (0.20656766125421362458e-10 - 0.14422990012444444444e-12 * t) *
3910  t) *
3911  t) *
3912  t) *
3913  t) *
3914  t;
3915  }
3916  case 92: {
3917  double t = 2 * y100 - 185;
3918  return 0.91090275493541084785e-1 +
3919  (-0.65075691516115160062e-2 +
3920  (0.28982078385527224867e-4 +
3921  (0.23014165807643012781e-7 +
3922  (-0.17454532910249875958e-8 +
3923  (0.18981946442680092373e-10 - 0.13494234691555555556e-12 * t) *
3924  t) *
3925  t) *
3926  t) *
3927  t) *
3928  t;
3929  }
3930  case 93: {
3931  double t = 2 * y100 - 187;
3932  return 0.78191222288771379358e-1 +
3933  (-0.63914190297303976434e-2 +
3934  (0.29079759021299682675e-4 +
3935  (0.97885458059415717014e-8 +
3936  (-0.15635596116134296819e-8 +
3937  (0.17417110744051331974e-10 - 0.12591151763555555556e-12 * t) *
3938  t) *
3939  t) *
3940  t) *
3941  t) *
3942  t;
3943  }
3944  case 94: {
3945  double t = 2 * y100 - 189;
3946  return 0.65524757106147402224e-1 +
3947  (-0.62750311956082444159e-2 +
3948  (0.29102328354323449795e-4 +
3949  (-0.20430838882727954582e-8 +
3950  (-0.13967781903855367270e-8 +
3951  (0.15958771833747057569e-10 - 0.11720175765333333333e-12 * t) *
3952  t) *
3953  t) *
3954  t) *
3955  t) *
3956  t;
3957  }
3958  case 95: {
3959  double t = 2 * y100 - 191;
3960  return 0.53091065838453612773e-1 +
3961  (-0.61586898417077043662e-2 +
3962  (0.29057796072960100710e-4 +
3963  (-0.12597414620517987536e-7 +
3964  (-0.12440642607426861943e-8 +
3965  (0.14602787128447932137e-10 - 0.10885859114666666667e-12 * t) *
3966  t) *
3967  t) *
3968  t) *
3969  t) *
3970  t;
3971  }
3972  case 96: {
3973  double t = 2 * y100 - 193;
3974  return 0.40889797115352738582e-1 +
3975  (-0.60426484889413678200e-2 +
3976  (0.28953496450191694606e-4 +
3977  (-0.21982952021823718400e-7 +
3978  (-0.11044169117553026211e-8 +
3979  (0.13344562332430552171e-10 - 0.10091231402844444444e-12 * t) *
3980  t) *
3981  t) *
3982  t) *
3983  t) *
3984  t;
3985  }
3986  case 97:
3987  case 98:
3988  case 99:
3989  case 100: { // use Taylor expansion for small x (|x| <= 0.0309...)
3990  // (2/sqrt(pi)) * (x - 2/3 x^3 + 4/15 x^5 - 8/105 x^7 + 16/945 x^9)
3991  double x2 = x * x;
3992  return x * (1.1283791670955125739 -
3993  x2 * (0.75225277806367504925 -
3994  x2 * (0.30090111122547001970 -
3995  x2 * (0.085971746064420005629 -
3996  x2 * 0.016931216931216931217))));
3997  }
3998  }
3999  /* Since 0 <= y100 < 101, this is only reached if x is NaN,
4000  in which case we should return NaN. */
4001  return NaN;
4002 }
4003 
4004 double FADDEEVA(w_im)(double x) {
4005  if (x >= 0) {
4006  if (x > 45) { // continued-fraction expansion is faster
4007  const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi)
4008  if (x > 5e7) // 1-term expansion, important to avoid overflow
4009  return ispi / x;
4010  /* 5-term expansion (rely on compiler for CSE), simplified from:
4011  ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */
4012  return ispi * ((x * x) * (x * x - 4.5) + 2) /
4013  (x * ((x * x) * (x * x - 5) + 3.75));
4014  }
4015  return w_im_y100(100 / (1 + x), x);
4016  } else { // = -FADDEEVA(w_im)(-x)
4017  if (x < -45) { // continued-fraction expansion is faster
4018  const double ispi = 0.56418958354775628694807945156; // 1 / sqrt(pi)
4019  if (x < -5e7) // 1-term expansion, important to avoid overflow
4020  return ispi / x;
4021  /* 5-term expansion (rely on compiler for CSE), simplified from:
4022  ispi / (x-0.5/(x-1/(x-1.5/(x-2/x)))) */
4023  return ispi * ((x * x) * (x * x - 4.5) + 2) /
4024  (x * ((x * x) * (x * x - 5) + 3.75));
4025  }
4026  return -w_im_y100(100 / (1 - x), -x);
4027  }
4028 }
4029 
4031 
4032 // Compile with -DTEST_FADDEEVA to compile a little test program
4033 #ifdef TEST_FADDEEVA
4034 
4035 #ifdef __cplusplus
4036 #include <cstdio>
4037 #else
4038 #include <stdio.h>
4039 #endif
4040 
4041 // compute relative error |b-a|/|a|, handling case of NaN and Inf,
4042 static double relerr(double a, double b) {
4043  if (isnan(a) || isnan(b) || isinf(a) || isinf(b)) {
4044  if ((isnan(a) && !isnan(b)) || (!isnan(a) && isnan(b)) ||
4045  (isinf(a) && !isinf(b)) || (!isinf(a) && isinf(b)) ||
4046  (isinf(a) && isinf(b) && a * b < 0))
4047  return Inf; // "infinite" error
4048  return 0; // matching infinity/nan results counted as zero error
4049  }
4050  if (a == 0)
4051  return b == 0 ? 0 : Inf;
4052  else
4053  return fabs((b - a) / a);
4054 }
4055 
4056 int main(void) {
4057  double errmax_all = 0;
4058  {
4059  printf("############# w(z) tests #############\n");
4060 #define NTST 57 // define instead of const for C compatibility
4061  cmplx z[NTST] = {C(624.2, -0.26123),
4062  C(-0.4, 3.),
4063  C(0.6, 2.),
4064  C(-1., 1.),
4065  C(-1., -9.),
4066  C(-1., 9.),
4067  C(-0.0000000234545, 1.1234),
4068  C(-3., 5.1),
4069  C(-53, 30.1),
4070  C(0.0, 0.12345),
4071  C(11, 1),
4072  C(-22, -2),
4073  C(9, -28),
4074  C(21, -33),
4075  C(1e5, 1e5),
4076  C(1e14, 1e14),
4077  C(-3001, -1000),
4078  C(1e160, -1e159),
4079  C(-6.01, 0.01),
4080  C(-0.7, -0.7),
4081  C(2.611780000000000e+01, 4.540909610972489e+03),
4082  C(0.8e7, 0.3e7),
4083  C(-20, -19.8081),
4084  C(1e-16, -1.1e-16),
4085  C(2.3e-8, 1.3e-8),
4086  C(6.3, -1e-13),
4087  C(6.3, 1e-20),
4088  C(1e-20, 6.3),
4089  C(1e-20, 16.3),
4090  C(9, 1e-300),
4091  C(6.01, 0.11),
4092  C(8.01, 1.01e-10),
4093  C(28.01, 1e-300),
4094  C(10.01, 1e-200),
4095  C(10.01, -1e-200),
4096  C(10.01, 0.99e-10),
4097  C(10.01, -0.99e-10),
4098  C(1e-20, 7.01),
4099  C(-1, 7.01),
4100  C(5.99, 7.01),
4101  C(1, 0),
4102  C(55, 0),
4103  C(-0.1, 0),
4104  C(1e-20, 0),
4105  C(0, 5e-14),
4106  C(0, 51),
4107  C(Inf, 0),
4108  C(-Inf, 0),
4109  C(0, Inf),
4110  C(0, -Inf),
4111  C(Inf, Inf),
4112  C(Inf, -Inf),
4113  C(NaN, NaN),
4114  C(NaN, 0),
4115  C(0, NaN),
4116  C(NaN, Inf),
4117  C(Inf, NaN)};
4118  cmplx w[NTST] = {
4119  /* w(z), computed with WolframAlpha
4120  ... note that WolframAlpha is problematic
4121  some of the above inputs, so I had to
4122  use the continued-fraction expansion
4123  in WolframAlpha in some cases, or switch
4124  to Maple */
4125  C(-3.78270245518980507452677445620103199303131110e-7,
4126  0.000903861276433172057331093754199933411710053155),
4127  C(0.1764906227004816847297495349730234591778719532788,
4128  -0.02146550539468457616788719893991501311573031095617),
4129  C(0.2410250715772692146133539023007113781272362309451,
4130  0.06087579663428089745895459735240964093522265589350),
4131  C(0.30474420525691259245713884106959496013413834051768,
4132  -0.20821893820283162728743734725471561394145872072738),
4133  C(7.317131068972378096865595229600561710140617977e34,
4134  8.321873499714402777186848353320412813066170427e34),
4135  C(0.0615698507236323685519612934241429530190806818395,
4136  -0.00676005783716575013073036218018565206070072304635),
4137  C(0.3960793007699874918961319170187598400134746631,
4138  -5.593152259116644920546186222529802777409274656e-9),
4139  C(0.08217199226739447943295069917990417630675021771804,
4140  -0.04701291087643609891018366143118110965272615832184),
4141  C(0.00457246000350281640952328010227885008541748668738,
4142  -0.00804900791411691821818731763401840373998654987934),
4143  C(0.8746342859608052666092782112565360755791467973338452, 0.),
4144  C(0.00468190164965444174367477874864366058339647648741,
4145  0.0510735563901306197993676329845149741675029197050),
4146  C(-0.0023193175200187620902125853834909543869428763219,
4147  -0.025460054739731556004902057663500272721780776336),
4148  C(9.11463368405637174660562096516414499772662584e304,
4149  3.97101807145263333769664875189354358563218932e305),
4150  C(-4.4927207857715598976165541011143706155432296e281,
4151  -2.8019591213423077494444700357168707775769028e281),
4152  C(2.820947917809305132678577516325951485807107151e-6,
4153  2.820947917668257736791638444590253942253354058e-6),
4154  C(2.82094791773878143474039725787438662716372268e-15,
4155  2.82094791773878143474039725773333923127678361e-15),
4156  C(-0.0000563851289696244350147899376081488003110150498,
4157  -0.000169211755126812174631861529808288295454992688),
4158  C(-5.586035480670854326218608431294778077663867e-162,
4159  5.586035480670854326218608431294778077663867e-161),
4160  C(0.00016318325137140451888255634399123461580248456,
4161  -0.095232456573009287370728788146686162555021209999),
4162  C(0.69504753678406939989115375989939096800793577783885,
4163  -1.8916411171103639136680830887017670616339912024317),
4164  C(0.0001242418269653279656612334210746733213167234822,
4165  7.145975826320186888508563111992099992116786763e-7),
4166  C(2.318587329648353318615800865959225429377529825e-8,
4167  6.182899545728857485721417893323317843200933380e-8),
4168  C(-0.0133426877243506022053521927604277115767311800303,
4169  -0.0148087097143220769493341484176979826888871576145),
4170  C(1.00000000000000012412170838050638522857747934,
4171  1.12837916709551279389615890312156495593616433e-16),
4172  C(0.9999999853310704677583504063775310832036830015,
4173  2.595272024519678881897196435157270184030360773e-8),
4174  C(-1.4731421795638279504242963027196663601154624e-15,
4175  0.090727659684127365236479098488823462473074709),
4176  C(5.79246077884410284575834156425396800754409308e-18,
4177  0.0907276596841273652364790985059772809093822374),
4178  C(0.0884658993528521953466533278764830881245144368,
4179  1.37088352495749125283269718778582613192166760e-22),
4180  C(0.0345480845419190424370085249304184266813447878,
4181  2.11161102895179044968099038990446187626075258e-23),
4182  C(6.63967719958073440070225527042829242391918213e-36,
4183  0.0630820900592582863713653132559743161572639353),
4184  C(0.00179435233208702644891092397579091030658500743634,
4185  0.0951983814805270647939647438459699953990788064762),
4186  C(9.09760377102097999924241322094863528771095448e-13,
4187  0.0709979210725138550986782242355007611074966717),
4188  C(7.2049510279742166460047102593255688682910274423e-304,
4189  0.0201552956479526953866611812593266285000876784321),
4190  C(3.04543604652250734193622967873276113872279682e-44,
4191  0.0566481651760675042930042117726713294607499165),
4192  C(3.04543604652250734193622967873276113872279682e-44,
4193  0.0566481651760675042930042117726713294607499165),
4194  C(0.5659928732065273429286988428080855057102069081e-12,
4195  0.056648165176067504292998527162143030538756683302),
4196  C(-0.56599287320652734292869884280802459698927645e-12,
4197  0.0566481651760675042929985271621430305387566833029),
4198  C(0.0796884251721652215687859778119964009569455462,
4199  1.11474461817561675017794941973556302717225126e-22),
4200  C(0.07817195821247357458545539935996687005781943386550,
4201  -0.01093913670103576690766705513142246633056714279654),
4202  C(0.04670032980990449912809326141164730850466208439937,
4203  0.03944038961933534137558064191650437353429669886545),
4204  C(0.36787944117144232159552377016146086744581113103176,
4205  0.60715770584139372911503823580074492116122092866515),
4206  C(0, 0.010259688805536830986089913987516716056946786526145),
4207  C(0.99004983374916805357390597718003655777207908125383,
4208  -0.11208866436449538036721343053869621153527769495574),
4209  C(0.99999999999999999999999999999999999999990000,
4210  1.12837916709551257389615890312154517168802603e-20),
4211  C(0.999999999999943581041645226871305192054749891144158, 0),
4212  C(0.0110604154853277201542582159216317923453996211744250, 0),
4213  C(0, 0),
4214  C(0, 0),
4215  C(0, 0),
4216  C(Inf, 0),
4217  C(0, 0),
4218  C(NaN, NaN),
4219  C(NaN, NaN),
4220  C(NaN, NaN),
4221  C(NaN, 0),
4222  C(NaN, NaN),
4223  C(NaN, NaN)};
4224  double errmax = 0;
4225  for (int i = 0; i < NTST; ++i) {
4226  cmplx fw = FADDEEVA(w)(z[i], 0.);
4227  double re_err = relerr(creal(w[i]), creal(fw));
4228  double im_err = relerr(cimag(w[i]), cimag(fw));
4229  printf(
4230  "w(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n",
4231  creal(z[i]), cimag(z[i]), creal(fw), cimag(fw), creal(w[i]),
4232  cimag(w[i]), re_err, im_err);
4233  if (re_err > errmax)
4234  errmax = re_err;
4235  if (im_err > errmax)
4236  errmax = im_err;
4237  }
4238  if (errmax > 1e-13) {
4239  printf("FAILURE -- relative error %g too large!\n", errmax);
4240  return 1;
4241  }
4242  printf("SUCCESS (max relative error = %g)\n", errmax);
4243  if (errmax > errmax_all)
4244  errmax_all = errmax;
4245  }
4246  {
4247 #undef NTST
4248 #define NTST 41 // define instead of const for C compatibility
4249  cmplx z[NTST] = {C(1, 2),
4250  C(-1, 2),
4251  C(1, -2),
4252  C(-1, -2),
4253  C(9, -28),
4254  C(21, -33),
4255  C(1e3, 1e3),
4256  C(-3001, -1000),
4257  C(1e160, -1e159),
4258  C(5.1e-3, 1e-8),
4259  C(-4.9e-3, 4.95e-3),
4260  C(4.9e-3, 0.5),
4261  C(4.9e-4, -0.5e1),
4262  C(-4.9e-5, -0.5e2),
4263  C(5.1e-3, 0.5),
4264  C(5.1e-4, -0.5e1),
4265  C(-5.1e-5, -0.5e2),
4266  C(1e-6, 2e-6),
4267  C(0, 2e-6),
4268  C(0, 2),
4269  C(0, 20),
4270  C(0, 200),
4271  C(Inf, 0),
4272  C(-Inf, 0),
4273  C(0, Inf),
4274  C(0, -Inf),
4275  C(Inf, Inf),
4276  C(Inf, -Inf),
4277  C(NaN, NaN),
4278  C(NaN, 0),
4279  C(0, NaN),
4280  C(NaN, Inf),
4281  C(Inf, NaN),
4282  C(1e-3, NaN),
4283  C(7e-2, 7e-2),
4284  C(7e-2, -7e-4),
4285  C(-9e-2, 7e-4),
4286  C(-9e-2, 9e-2),
4287  C(-7e-4, 9e-2),
4288  C(7e-2, 0.9e-2),
4289  C(7e-2, 1.1e-2)};
4290  cmplx w[NTST] = {// erf(z[i]), evaluated with Maple
4291  C(-0.5366435657785650339917955593141927494421,
4292  -5.049143703447034669543036958614140565553),
4293  C(0.5366435657785650339917955593141927494421,
4294  -5.049143703447034669543036958614140565553),
4295  C(-0.5366435657785650339917955593141927494421,
4296  5.049143703447034669543036958614140565553),
4297  C(0.5366435657785650339917955593141927494421,
4298  5.049143703447034669543036958614140565553),
4299  C(0.3359473673830576996788000505817956637777e304,
4300  -0.1999896139679880888755589794455069208455e304),
4301  C(0.3584459971462946066523939204836760283645e278,
4302  0.3818954885257184373734213077678011282505e280),
4303  C(0.9996020422657148639102150147542224526887,
4304  0.00002801044116908227889681753993542916894856),
4305  C(-1, 0),
4306  C(1, 0),
4307  C(0.005754683859034800134412990541076554934877,
4308  0.1128349818335058741511924929801267822634e-7),
4309  C(-0.005529149142341821193633460286828381876955,
4310  0.005585388387864706679609092447916333443570),
4311  C(0.007099365669981359632319829148438283865814,
4312  0.6149347012854211635026981277569074001219),
4313  C(0.3981176338702323417718189922039863062440e8,
4314  -0.8298176341665249121085423917575122140650e10),
4315  C(-Inf, -Inf),
4316  C(0.007389128308257135427153919483147229573895,
4317  0.6149332524601658796226417164791221815139),
4318  C(0.4143671923267934479245651547534414976991e8,
4319  -0.8298168216818314211557046346850921446950e10),
4320  C(-Inf, -Inf),
4321  C(0.1128379167099649964175513742247082845155e-5,
4322  0.2256758334191777400570377193451519478895e-5),
4323  C(0, 0.2256758334194034158904576117253481476197e-5),
4324  C(0, 18.56480241457555259870429191324101719886),
4325  C(0, 0.1474797539628786202447733153131835124599e173),
4326  C(0, Inf),
4327  C(1, 0),
4328  C(-1, 0),
4329  C(0, Inf),
4330  C(0, -Inf),
4331  C(NaN, NaN),
4332  C(NaN, NaN),
4333  C(NaN, NaN),
4334  C(NaN, 0),
4335  C(0, NaN),
4336  C(NaN, NaN),
4337  C(NaN, NaN),
4338  C(NaN, NaN),
4339  C(0.07924380404615782687930591956705225541145,
4340  0.07872776218046681145537914954027729115247),
4341  C(0.07885775828512276968931773651224684454495,
4342  -0.0007860046704118224342390725280161272277506),
4343  C(-0.1012806432747198859687963080684978759881,
4344  0.0007834934747022035607566216654982820299469),
4345  C(-0.1020998418798097910247132140051062512527,
4346  0.1010030778892310851309082083238896270340),
4347  C(-0.0007962891763147907785684591823889484764272,
4348  0.1018289385936278171741809237435404896152),
4349  C(0.07886408666470478681566329888615410479530,
4350  0.01010604288780868961492224347707949372245),
4351  C(0.07886723099940260286824654364807981336591,
4352  0.01235199327873258197931147306290916629654)};
4353 #define TST(f, isc) \
4354  printf("############# " #f "(z) tests #############\n"); \
4355  double errmax = 0; \
4356  for (int i = 0; i < NTST; ++i) { \
4357  cmplx fw = FADDEEVA(f)(z[i], 0.); \
4358  double re_err = relerr(creal(w[i]), creal(fw)); \
4359  double im_err = relerr(cimag(w[i]), cimag(fw)); \
4360  printf(#f \
4361  "(%g%+gi) = %g%+gi (vs. %g%+gi), re/im rel. err. = %0.2g/%0.2g)\n", \
4362  creal(z[i]), cimag(z[i]), creal(fw), cimag(fw), creal(w[i]), \
4363  cimag(w[i]), re_err, im_err); \
4364  if (re_err > errmax) \
4365  errmax = re_err; \
4366  if (im_err > errmax) \
4367  errmax = im_err; \
4368  } \
4369  if (errmax > 1e-13) { \
4370  printf("FAILURE -- relative error %g too large!\n", errmax); \
4371  return 1; \
4372  } \
4373  printf("Checking " #f "(x) special case...\n"); \
4374  for (int i = 0; i < 10000; ++i) { \
4375  double x = pow(10., -300. + i * 600. / (10000 - 1)); \
4376  double re_err = \
4377  relerr(FADDEEVA_RE(f)(x), creal(FADDEEVA(f)(C(x, x * isc), 0.))); \
4378  if (re_err > errmax) \
4379  errmax = re_err; \
4380  re_err = \
4381  relerr(FADDEEVA_RE(f)(-x), creal(FADDEEVA(f)(C(-x, x * isc), 0.))); \
4382  if (re_err > errmax) \
4383  errmax = re_err; \
4384  } \
4385  { \
4386  double re_err = \
4387  relerr(FADDEEVA_RE(f)(Inf), creal(FADDEEVA(f)(C(Inf, 0.), 0.))); \
4388  if (re_err > errmax) \
4389  errmax = re_err; \
4390  re_err = \
4391  relerr(FADDEEVA_RE(f)(-Inf), creal(FADDEEVA(f)(C(-Inf, 0.), 0.))); \
4392  if (re_err > errmax) \
4393  errmax = re_err; \
4394  re_err = relerr(FADDEEVA_RE(f)(NaN), creal(FADDEEVA(f)(C(NaN, 0.), 0.))); \
4395  if (re_err > errmax) \
4396  errmax = re_err; \
4397  } \
4398  if (errmax > 1e-13) { \
4399  printf("FAILURE -- relative error %g too large!\n", errmax); \
4400  return 1; \
4401  } \
4402  printf("SUCCESS (max relative error = %g)\n", errmax); \
4403  if (errmax > errmax_all) \
4404  errmax_all = errmax
4405 
4406  TST(erf, 1e-20);
4407  }
4408  {
4409  // since erfi just calls through to erf, just one test should
4410  // be sufficient to make sure I didn't screw up the signs or something
4411 #undef NTST
4412 #define NTST 1 // define instead of const for C compatibility
4413  cmplx z[NTST] = {C(1.234, 0.5678)};
4414  cmplx w[NTST] = {// erfi(z[i]), computed with Maple
4415  C(1.081032284405373149432716643834106923212,
4416  1.926775520840916645838949402886591180834)};
4417  TST(erfi, 0);
4418  }
4419  {
4420  // since erfcx just calls through to w, just one test should
4421  // be sufficient to make sure I didn't screw up the signs or something
4422 #undef NTST
4423 #define NTST 1 // define instead of const for C compatibility
4424  cmplx z[NTST] = {C(1.234, 0.5678)};
4425  cmplx w[NTST] = {// erfcx(z[i]), computed with Maple
4426  C(0.3382187479799972294747793561190487832579,
4427  -0.1116077470811648467464927471872945833154)};
4428  TST(erfcx, 0);
4429  }
4430  {
4431 #undef NTST
4432 #define NTST 30 // define instead of const for C compatibility
4433  cmplx z[NTST] = {
4434  C(1, 2), C(-1, 2), C(1, -2), C(-1, -2),
4435  C(9, -28), C(21, -33), C(1e3, 1e3), C(-3001, -1000),
4436  C(1e160, -1e159), C(5.1e-3, 1e-8), C(0, 2e-6), C(0, 2),
4437  C(0, 20), C(0, 200), C(2e-6, 0), C(2, 0),
4438  C(20, 0), C(200, 0), C(Inf, 0), C(-Inf, 0),
4439  C(0, Inf), C(0, -Inf), C(Inf, Inf), C(Inf, -Inf),
4440  C(NaN, NaN), C(NaN, 0), C(0, NaN), C(NaN, Inf),
4441  C(Inf, NaN), C(88, 0)};
4442  cmplx w[NTST] = {// erfc(z[i]), evaluated with Maple
4443  C(1.536643565778565033991795559314192749442,
4444  5.049143703447034669543036958614140565553),
4445  C(0.4633564342214349660082044406858072505579,
4446  5.049143703447034669543036958614140565553),
4447  C(1.536643565778565033991795559314192749442,
4448  -5.049143703447034669543036958614140565553),
4449  C(0.4633564342214349660082044406858072505579,
4450  -5.049143703447034669543036958614140565553),
4451  C(-0.3359473673830576996788000505817956637777e304,
4452  0.1999896139679880888755589794455069208455e304),
4453  C(-0.3584459971462946066523939204836760283645e278,
4454  -0.3818954885257184373734213077678011282505e280),
4455  C(0.0003979577342851360897849852457775473112748,
4456  -0.00002801044116908227889681753993542916894856),
4457  C(2, 0),
4458  C(0, 0),
4459  C(0.9942453161409651998655870094589234450651,
4460  -0.1128349818335058741511924929801267822634e-7),
4461  C(1, -0.2256758334194034158904576117253481476197e-5),
4462  C(1, -18.56480241457555259870429191324101719886),
4463  C(1, -0.1474797539628786202447733153131835124599e173),
4464  C(1, -Inf),
4465  C(0.9999977432416658119838633199332831406314, 0),
4466  C(0.004677734981047265837930743632747071389108, 0),
4467  C(0.5395865611607900928934999167905345604088e-175, 0),
4468  C(0, 0),
4469  C(0, 0),
4470  C(2, 0),
4471  C(1, -Inf),
4472  C(1, Inf),
4473  C(NaN, NaN),
4474  C(NaN, NaN),
4475  C(NaN, NaN),
4476  C(NaN, 0),
4477  C(1, NaN),
4478  C(NaN, NaN),
4479  C(NaN, NaN),
4480  C(0, 0)};
4481  TST(erfc, 1e-20);
4482  }
4483  {
4484 #undef NTST
4485 #define NTST 48 // define instead of const for C compatibility
4486  cmplx z[NTST] = {C(2, 1), C(-2, 1),
4487  C(2, -1), C(-2, -1),
4488  C(-28, 9), C(33, -21),
4489  C(1e3, 1e3), C(-1000, -3001),
4490  C(1e-8, 5.1e-3), C(4.95e-3, -4.9e-3),
4491  C(5.1e-3, 5.1e-3), C(0.5, 4.9e-3),
4492  C(-0.5e1, 4.9e-4), C(-0.5e2, -4.9e-5),
4493  C(0.5e3, 4.9e-6), C(0.5, 5.1e-3),
4494  C(-0.5e1, 5.1e-4), C(-0.5e2, -5.1e-5),
4495  C(1e-6, 2e-6), C(2e-6, 0),
4496  C(2, 0), C(20, 0),
4497  C(200, 0), C(0, 4.9e-3),
4498  C(0, -5.1e-3), C(0, 2e-6),
4499  C(0, -2), C(0, 20),
4500  C(0, -200), C(Inf, 0),
4501  C(-Inf, 0), C(0, Inf),
4502  C(0, -Inf), C(Inf, Inf),
4503  C(Inf, -Inf), C(NaN, NaN),
4504  C(NaN, 0), C(0, NaN),
4505  C(NaN, Inf), C(Inf, NaN),
4506  C(39, 6.4e-5), C(41, 6.09e-5),
4507  C(4.9e7, 5e-11), C(5.1e7, 4.8e-11),
4508  C(1e9, 2.4e-12), C(1e11, 2.4e-14),
4509  C(1e13, 2.4e-16), C(1e300, 2.4e-303)};
4510  cmplx w[NTST] = {// dawson(z[i]), evaluated with Maple
4511  C(0.1635394094345355614904345232875688576839,
4512  -0.1531245755371229803585918112683241066853),
4513  C(-0.1635394094345355614904345232875688576839,
4514  -0.1531245755371229803585918112683241066853),
4515  C(0.1635394094345355614904345232875688576839,
4516  0.1531245755371229803585918112683241066853),
4517  C(-0.1635394094345355614904345232875688576839,
4518  0.1531245755371229803585918112683241066853),
4519  C(-0.01619082256681596362895875232699626384420,
4520  -0.005210224203359059109181555401330902819419),
4521  C(0.01078377080978103125464543240346760257008,
4522  0.006866888783433775382193630944275682670599),
4523  C(-0.5808616819196736225612296471081337245459,
4524  0.6688593905505562263387760667171706325749),
4525  C(Inf, -Inf),
4526  C(0.1000052020902036118082966385855563526705e-7,
4527  0.005100088434920073153418834680320146441685),
4528  C(0.004950156837581592745389973960217444687524,
4529  -0.004899838305155226382584756154100963570500),
4530  C(0.005100176864319675957314822982399286703798,
4531  0.005099823128319785355949825238269336481254),
4532  C(0.4244534840871830045021143490355372016428,
4533  0.002820278933186814021399602648373095266538),
4534  C(-0.1021340733271046543881236523269967674156,
4535  -0.00001045696456072005761498961861088944159916),
4536  C(-0.01000200120119206748855061636187197886859,
4537  0.9805885888237419500266621041508714123763e-8),
4538  C(0.001000002000012000023960527532953151819595,
4539  -0.9800058800588007290937355024646722133204e-11),
4540  C(0.4244549085628511778373438768121222815752,
4541  0.002935393851311701428647152230552122898291),
4542  C(-0.1021340732357117208743299813648493928105,
4543  -0.00001088377943049851799938998805451564893540),
4544  C(-0.01000200120119126652710792390331206563616,
4545  0.1020612612857282306892368985525393707486e-7),
4546  C(0.1000000000007333333333344266666666664457e-5,
4547  0.2000000000001333333333323199999999978819e-5),
4548  C(0.1999999999994666666666675199999999990248e-5, 0),
4549  C(0.3013403889237919660346644392864226952119, 0),
4550  C(0.02503136792640367194699495234782353186858, 0),
4551  C(0.002500031251171948248596912483183760683918, 0),
4552  C(0, 0.004900078433419939164774792850907128053308),
4553  C(0, -0.005100088434920074173454208832365950009419),
4554  C(0, 0.2000000000005333333333341866666666676419e-5),
4555  C(0, -48.16001211429122974789822893525016528191),
4556  C(0, 0.4627407029504443513654142715903005954668e174),
4557  C(0, -Inf),
4558  C(0, 0),
4559  C(-0, 0),
4560  C(0, Inf),
4561  C(0, -Inf),
4562  C(NaN, NaN),
4563  C(NaN, NaN),
4564  C(NaN, NaN),
4565  C(NaN, 0),
4566  C(0, NaN),
4567  C(NaN, NaN),
4568  C(NaN, NaN),
4569  C(0.01282473148489433743567240624939698290584,
4570  -0.2105957276516618621447832572909153498104e-7),
4571  C(0.01219875253423634378984109995893708152885,
4572  -0.1813040560401824664088425926165834355953e-7),
4573  C(0.1020408163265306334945473399689037886997e-7,
4574  -0.1041232819658476285651490827866174985330e-25),
4575  C(0.9803921568627452865036825956835185367356e-8,
4576  -0.9227220299884665067601095648451913375754e-26),
4577  C(0.5000000000000000002500000000000000003750e-9,
4578  -0.1200000000000000001800000188712838420241e-29),
4579  C(5.00000000000000000000025000000000000000000003e-12,
4580  -1.20000000000000000000018000000000000000000004e-36),
4581  C(5.00000000000000000000000002500000000000000000e-14,
4582  -1.20000000000000000000000001800000000000000000e-42),
4583  C(5e-301, 0)};
4584  TST(Dawson, 1e-20);
4585  }
4586  printf("#####################################\n");
4587  printf("SUCCESS (max relative error = %g)\n", errmax_all);
4588 }
4589 
4590 #endif
double FADDEEVA_RE() Dawson(double x)
Definition: Faddeeva.cc:463
double FADDEEVA_RE() erfc(double x)
Definition: Faddeeva.cc:418
cmplx FADDEEVA() w(cmplx z, double relerr)
Definition: Faddeeva.cc:668
static double sinc(double x, double sinx)
Definition: Faddeeva.cc:597
#define NaN
Definition: Faddeeva.cc:268
cmplx FADDEEVA() erfi(cmplx z, double relerr)
Definition: Faddeeva.cc:407
int main(int argc, char **argv)
Simple Dalitz plot fit of the channel J/psi -> gamma pi0 pi0.
static double w_im_y100(double y100, double x)
Definition: Faddeeva.cc:2440
double complex cmplx
Definition: Faddeeva.cc:235
static double sinh_taylor(double x)
Definition: Faddeeva.cc:602
static double sqr(double x)
Definition: Faddeeva.cc:607
double FADDEEVA() w_im(double x)
Definition: Faddeeva.cc:4004
static cmplx cpolar(double r, double t)
Definition: Faddeeva.cc:271
#define Inf
Definition: Faddeeva.cc:267
static const double expa2n2[]
Definition: Faddeeva.cc:611
static double erfcx_y100(double y100)
Definition: Faddeeva.cc:996
cmplx FADDEEVA() erfcx(cmplx z, double relerr)
Definition: Faddeeva.cc:284
double FADDEEVA_RE() erf(double x)
Definition: Faddeeva.cc:289