diff options
| author | Ulrich Drepper <drepper@redhat.com> | 1999-08-06 17:20:19 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 1999-08-06 17:20:19 +0000 |
| commit | 652df710ba782d47d40ff47fa699bd3d7fca57d6 (patch) | |
| tree | 0c0c10e925723a6e93489d546c69214e65b107e2 | |
| parent | 0cebbf519716b48332b21fb7c8238cd14c6b9751 (diff) | |
| download | glibc-652df710ba782d47d40ff47fa699bd3d7fca57d6.tar.xz glibc-652df710ba782d47d40ff47fa699bd3d7fca57d6.zip | |
Update.
1999-08-06 Jakub Jelinek <jj@ultra.linux.cz>
* sysdeps/ieee754/ldbl-128/e_expl.c: New file.
* sysdeps/ieee754/ldbl-128/t_expl.h: New file.
* sysdeps/ieee754/ldbl-128/Dist: Add t_expl.h.
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | sysdeps/ieee754/ldbl-128/Dist | 1 | ||||
| -rw-r--r-- | sysdeps/ieee754/ldbl-128/e_expl.c | 248 | ||||
| -rw-r--r-- | sysdeps/ieee754/ldbl-128/t_expl.h | 971 |
4 files changed, 1226 insertions, 0 deletions
@@ -1,3 +1,9 @@ +1999-08-06 Jakub Jelinek <jj@ultra.linux.cz> + + * sysdeps/ieee754/ldbl-128/e_expl.c: New file. + * sysdeps/ieee754/ldbl-128/t_expl.h: New file. + * sysdeps/ieee754/ldbl-128/Dist: Add t_expl.h. + 1999-08-06 Ulrich Drepper <drepper@cygnus.com> * resolv/res_send.c (res_send): Don't test file descriptor for diff --git a/sysdeps/ieee754/ldbl-128/Dist b/sysdeps/ieee754/ldbl-128/Dist index d78de40205..4504060729 100644 --- a/sysdeps/ieee754/ldbl-128/Dist +++ b/sysdeps/ieee754/ldbl-128/Dist @@ -1 +1,2 @@ ieee754.h +t_expl.h diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c new file mode 100644 index 0000000000..959d958736 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128/e_expl.c @@ -0,0 +1,248 @@ +/* Quad-precision floating point e^x. + Copyright (C) 1999 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jj@ultra.linux.cz> + Partly based on double-precision code + by Geoffrey Keating <geoffk@ozemail.com.au> + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* The basic design here is from + Abraham Ziv, "Fast Evaluation of Elementary Mathematical Functions with + Correctly Rounded Last Bit", ACM Trans. Math. Soft., 17 (3), September 1991, + pp. 410-423. + + We work with number pairs where the first number is the high part and + the second one is the low part. Arithmetic with the high part numbers must + be exact, without any roundoff errors. + + The input value, X, is written as + X = n * ln(2)_0 + arg1[t1]_0 + arg2[t2]_0 + x + - n * ln(2)_1 + arg1[t1]_1 + arg2[t2]_1 + xl + + where: + - n is an integer, 16384 >= n >= -16495; + - ln(2)_0 is the first 93 bits of ln(2), and |ln(2)_0-ln(2)-ln(2)_1| < 2^-205 + - t1 is an integer, 89 >= t1 >= -89 + - t2 is an integer, 65 >= t2 >= -65 + - |arg1[t1]-t1/256.0| < 2^-53 + - |arg2[t2]-t2/32768.0| < 2^-53 + - x + xl is whatever is left, |x + xl| < 2^-16 + 2^-53 + + Then e^x is approximated as + + e^x = 2^n_1 ( 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) + + 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) + * p (x + xl + n * ln(2)_1)) + where: + - p(x) is a polynomial approximating e(x)-1 + - e^(arg1[t1]_0 + arg1[t1]_1) is obtained from a table + - e^(arg2[t2]_0 + arg2[t2]_1) likewise + - n_1 + n_0 = n, so that |n_0| < -LDBL_MIN_EXP-1. + + If it happens that n_1 == 0 (this is the usual case), that multiplication + is omitted. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include <float.h> +#include <ieee754.h> +#include <math.h> +#include <fenv.h> +#include <inttypes.h> +#include <math_private.h> +#include "t_expl.h" + +static const long double C[] = { +/* Smallest integer x for which e^x overflows. */ +#define himark C[0] + 11356.523406294143949491931077970765L, + +/* Largest integer x for which e^x underflows. */ +#define lomark C[1] +-11433.4627433362978788372438434526231L, + +/* 3x2^96 */ +#define THREEp96 C[2] + 59421121885698253195157962752.0L, + +/* 3x2^103 */ +#define THREEp103 C[3] + 30423614405477505635920876929024.0L, + +/* 3x2^111 */ +#define THREEp111 C[4] + 7788445287802241442795744493830144.0L, + +/* 1/ln(2) */ +#define M_1_LN2 C[5] + 1.44269504088896340735992468100189204L, + +/* first 93 bits of ln(2) */ +#define M_LN2_0 C[6] + 0.693147180559945309417232121457981864L, + +/* ln2_0 - ln(2) */ +#define M_LN2_1 C[7] +-1.94704509238074995158795957333327386E-31L, + +/* very small number */ +#define TINY C[8] + 1.0e-4900L, + +/* 2^16383 */ +#define TWO16383 C[9] + 5.94865747678615882542879663314003565E+4931L, + +/* 256 */ +#define TWO8 C[10] + 256.0L, + +/* 32768 */ +#define TWO15 C[11] + 32768.0L, + +/* Chebyshev polynom coeficients for (exp(x)-1)/x */ +#define P1 C[12] +#define P2 C[13] +#define P3 C[14] +#define P4 C[15] +#define P5 C[16] +#define P6 C[17] + 0.5L, + 1.66666666666666666666666666666666683E-01L, + 4.16666666666666666666654902320001674E-02L, + 8.33333333333333333333314659767198461E-03L, + 1.38888888889899438565058018857254025E-03L, + 1.98412698413981650382436541785404286E-04L, +}; + +long double +__ieee754_expl (long double x) +{ + /* Check for usual case. */ + if (isless (x, himark) && isgreater (x, lomark)) + { + int tval1, tval2, unsafe, n_i; + long double x22, n, t, result, xl; + union ieee854_long_double ex2_u, scale_u; + fenv_t oldenv; + + feholdexcept (&oldenv); +#ifdef FE_TONEAREST + fesetround (FE_TONEAREST); +#endif + + /* Calculate n. */ + n = x * M_1_LN2 + THREEp111; + n -= THREEp111; + x = x - n * M_LN2_0; + xl = n * M_LN2_1; + + /* Calculate t/256. */ + t = x + THREEp103; + t -= THREEp103; + + /* Compute tval1 = t. */ + tval1 = (int) (t * TWO8); + + x -= __expl_table[T_EXPL_ARG1+2*tval1]; + xl -= __expl_table[T_EXPL_ARG1+2*tval1+1]; + + /* Calculate t/32768. */ + t = x + THREEp96; + t -= THREEp96; + + /* Compute tval2 = t. */ + tval2 = (int) (t * TWO15); + + x -= __expl_table[T_EXPL_ARG2+2*tval2]; + xl -= __expl_table[T_EXPL_ARG2+2*tval2+1]; + + x = x + xl; + + /* Compute ex2 = 2^n_0 e^(argtable[tval1]) e^(argtable[tval2]). */ + ex2_u.d = __expl_table[T_EXPL_RES1 + tval1] + * __expl_table[T_EXPL_RES2 + tval2]; + n_i = (int)n; + /* 'unsafe' is 1 iff n_1 != 0. */ + unsafe = abs(n_i) >= -LDBL_MIN_EXP - 1; + ex2_u.ieee.exponent += n_i >> unsafe; + + /* Compute scale = 2^n_1. */ + scale_u.d = 1.0L; + scale_u.ieee.exponent += n_i - (n_i >> unsafe); + + /* Approximate e^x2 - 1, using a seventh-degree polynomial, + with maximum error in [-2^-16-2^-53,2^-16+2^-53] + less than 4.8e-39. */ + x22 = x + x*x*(P1+x*(P2+x*(P3+x*(P4+x*(P5+x*P6))))); + + /* Return result. */ + fesetenv (&oldenv); + + result = x22 * ex2_u.d + ex2_u.d; + + /* Now we can test whether the result is ultimate or if we are unsure. + In the later case we should probably call a mpn based routine to give + the ultimate result. + Empirically, this routine is already ultimate in about 99.9986% of + cases, the test below for the round to nearest case will be false + in ~ 99.9963% of cases. + Without proc2 routine maximum error which has been seen is + 0.5000262 ulp. + + union ieee854_long_double ex3_u; + + #ifdef FE_TONEAREST + fesetround (FE_TONEAREST); + #endif + ex3_u.d = (result - ex2_u.d) - x22 * ex2_u.d; + ex2_u.d = result; + ex3_u.ieee.exponent += LDBL_MANT_DIG + 15 + IEEE854_LONG_DOUBLE_BIAS + - ex2_u.ieee.exponent; + n_i = abs (ex3_u.d); + n_i = (n_i + 1) / 2; + fesetenv (&oldenv); + #ifdef FE_TONEAREST + if (fegetround () == FE_TONEAREST) + n_i -= 0x4000; + #endif + if (!n_i) { + return __ieee754_expl_proc2 (origx); + } + */ + if (!unsafe) + return result; + else + return result * scale_u.d; + } + /* Exceptional cases: */ + else if (isless (x, himark)) + { + if (__isinfl (x)) + /* e^-inf == 0, with no error. */ + return 0; + else + /* Underflow */ + return TINY * TINY; + } + else + /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ + return TWO16383*x; +} diff --git a/sysdeps/ieee754/ldbl-128/t_expl.h b/sysdeps/ieee754/ldbl-128/t_expl.h new file mode 100644 index 0000000000..fd975add31 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128/t_expl.h @@ -0,0 +1,971 @@ +/* Accurate table for expl(). + Copyright (C) 1999 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jj@ultra.linux.cz> + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* __expl_table basically consists of four tables, T_EXPL_ARG{1,2} and + T_EXPL_RES{1,2}. All tables use positive and negative indexes, the 0 points + are marked by T_EXPL_* defines. + For ARG1 and RES1 tables lets B be 89 and S 256.0, for ARG2 and RES2 B is 65 + and S 32768.0. + These table have the property that, for all integers -B <= i <= B + expl(__expl_table[T_EXPL_ARGN+2*i]+__expl_table[T_EXPL_ARGN+2*i+1]+r) == + __expl_table[T_EXPL_RESN+i], __expl_table[T_EXPL_RESN+i] is some exact number + with the low 58 bits of the mantissa 0, + __expl_table[T_EXPL_ARGN+2*i] == i/S+s + where absl(s) <= 2^-54 and absl(r) <= 2^-212. */ + +static const long double __expl_table [] = { + -3.47656250000000000584188889839535373E-01L, /* bffd640000000000002b1b04213cf000 */ + 6.90417668990715641167244540876988960E-32L, /* 3f97667c3fdb588a6ae1af8748357a17 */ + -3.43749999999999981853132895957607418E-01L, /* bffd5ffffffffffffac4ff5f4050b000 */ + -7.16021898043268093462818380603370350E-33L, /* bf94296c8219427edc1431ac2498583e */ + -3.39843750000000013418643523138766329E-01L, /* bffd5c000000000003de1f027a30e000 */ + 8.16920774283317801641347327589583265E-32L, /* 3f97a82b65774bdca1b4440d749ed8d3 */ + -3.35937500000000014998092453039303051E-01L, /* bffd5800000000000452a9f4d8857000 */ + -6.55865578425428447938248396879359670E-32L, /* bf97548b7d240f3d034b395e6eecfac8 */ + -3.32031250000000000981984049529998541E-01L, /* bffd540000000000004875277cda5000 */ + 6.91213046334032232108944519541512737E-32L, /* 3f9766e5f925338a19045c94443b66e1 */ + -3.28124999999999986646017645350399708E-01L, /* bffd4ffffffffffffc26a667bf44d000 */ + -6.16281060996110316602421505683742661E-32L, /* bf973ffdcdcffb6fbffc86b2b8d42f5d */ + -3.24218749999999991645717430645867963E-01L, /* bffd4bfffffffffffd97901063e48000 */ + -7.90797211087760527593856542417304137E-32L, /* bf979a9afaaca1ada6a8ed1c80584d60 */ + -3.20312499999999998918211610690789652E-01L, /* bffd47ffffffffffffb02d9856d71000 */ + 8.64024799457616856987630373786503376E-32L, /* 3f97c0a098623f95579d5d9b2b67342d */ + -3.16406249999999998153974811017181883E-01L, /* bffd43ffffffffffff77c991f1076000 */ + -2.73176610180696076418536105483668404E-32L, /* bf961baeccb32f9b1fcbb8e60468e95a */ + -3.12500000000000011420976192575972779E-01L, /* bffd400000000000034ab8240483d000 */ + 7.16573502812389453744433792609989420E-32L, /* 3f977410f4c2cfc4335f28446c0fb363 */ + -3.08593750000000001735496343854851414E-01L, /* bffd3c000000000000800e995c176000 */ + -1.56292999645122272621237565671593071E-32L, /* bf95449b9cbdaff6ac1246adb2c826ac */ + -3.04687499999999982592401295899221626E-01L, /* bffd37fffffffffffafb8bc1e061a000 */ + 6.48993208584888904958594509625158417E-32L, /* 3f9750f9fe8366d82d77afa0031a92e1 */ + -3.00781249999999999230616898937763959E-01L, /* bffd33ffffffffffffc73ac39da54000 */ + 6.57082437496961397305801409357792029E-32L, /* 3f97552d3cb598ea80135cf3feb27ec4 */ + -2.96874999999999998788769281703245722E-01L, /* bffd2fffffffffffffa6a07fa5021000 */ + -3.26588297198283968096426564544269170E-32L, /* bf9653260fc1802f46b629aee171809b */ + -2.92968750000000015318089182805941695E-01L, /* bffd2c0000000000046a468614bd6000 */ + -1.73291974845198589684358727559290718E-32L, /* bf9567e9d158f52e483c8d8dcb5961dd */ + -2.89062500000000007736778942676309681E-01L, /* bffd280000000000023adf9f4c3d3000 */ + -6.83629745986675744404029225571026236E-32L, /* bf9762f5face6281c1daf1c6aedbdb45 */ + -2.85156250000000001367091555763661937E-01L, /* bffd2400000000000064dfa11e3fb000 */ + -5.44898442619766878281110054067026237E-32L, /* bf971aed6d2db9f542986a785edae072 */ + -2.81249999999999986958718100227029406E-01L, /* bffd1ffffffffffffc3db9265ca9d000 */ + 1.13007318374506125723591889451107046E-32L, /* 3f94d569fe387f456a97902907ac3856 */ + -2.77343750000000000356078829380495179E-01L, /* bffd1c0000000000001a462390083000 */ + -4.98979365468978332358409063436543102E-32L, /* bf970315bbf3e0d14b5c94c900702d4c */ + -2.73437499999999990276993957508540484E-01L, /* bffd17fffffffffffd32919bcdc94000 */ + -8.79390484115892344533724650295100871E-32L, /* bf97c89b0b89cc19c3ab2b60da9bbbc3 */ + -2.69531250000000002434203866460082225E-01L, /* bffd14000000000000b39ccf9e130000 */ + 9.44060754687026590886751809927191596E-32L, /* 3f97ea2f32cfecca5c64a26137a9210f */ + -2.65624999999999997296320716986257179E-01L, /* bffd0fffffffffffff3880f13a2bc000 */ + 2.07142664067265697791007875348396921E-32L, /* 3f95ae37ee685b9122fbe377bd205ee4 */ + -2.61718750000000010237478733739017956E-01L, /* bffd0c000000000002f3648179d40000 */ + -6.10552936159265665298996309192680256E-32L, /* bf973d0467d31e407515a3cca0f3b4e2 */ + -2.57812500000000011948220522778370303E-01L, /* bffd08000000000003719f81275bd000 */ + 6.72477169058908902499239631466443836E-32L, /* 3f975d2b8c475d3160cf72d227d8e6f9 */ + -2.53906249999999991822993360536596860E-01L, /* bffd03fffffffffffda4a4b62f818000 */ + -2.44868296623215865054704392917190994E-32L, /* bf95fc92516c6d057d29fc2528855976 */ + -2.49999999999999986862019457428548084E-01L, /* bffcfffffffffffff86d2d20d5ff4000 */ + -3.85302898949105073614122724961613078E-32L, /* bf96901f147cb7d643af71b6129ce929 */ + -2.46093750000000000237554160737318435E-01L, /* bffcf8000000000000230e8ade26b000 */ + -1.52823675242678363494345369284988589E-32L, /* bf953d6700c5f3fc303f79d0ec8c680a */ + -2.42187500000000003023380963205457065E-01L, /* bffcf0000000000001be2c1a78bb0000 */ + -7.78402037952209709489481182714311699E-34L, /* bf9102ab1f3998e887f0ee4cf940faa5 */ + -2.38281249999999995309623303145485725E-01L, /* bffce7fffffffffffd4bd2940f43f000 */ + -3.54307216794236899443913216397197696E-32L, /* bf966fef03ab69c3f289436205b21d02 */ + -2.34374999999999998425804947623207526E-01L, /* bffcdfffffffffffff17b097a6092000 */ + -2.86038428948386602859761879407549696E-32L, /* bf96290a0eba0131efe3a05fe188f2e3 */ + -2.30468749999999993822207406785200832E-01L, /* bffcd7fffffffffffc70519834eae000 */ + -2.54339521031747516806893838749365762E-32L, /* bf96081f0ad7f9107ae6cddb32c178ab */ + -2.26562499999999997823524030344489884E-01L, /* bffccffffffffffffebecf10093df000 */ + 4.31904611473158635644635628922959401E-32L, /* 3f96c083f0b1faa7c4c686193e38d67c */ + -2.22656250000000004835132405125162742E-01L, /* bffcc8000000000002c98a233f19f000 */ + 2.54709791629335691650310168420597566E-33L, /* 3f92a735903f5eed07a716ab931e20d9 */ + -2.18749999999999988969454021829236626E-01L, /* bffcbffffffffffff9a42dc14ce36000 */ + -3.77236096429336082213752014054909454E-32L, /* bf9687be8e5b2fca54d3e81157eac660 */ + -2.14843750000000010613256919115758495E-01L, /* bffcb80000000000061e3d828ecac000 */ + -4.55194148712216691177097854305964738E-32L, /* bf96d8b35c776aa3e1a4768271380503 */ + -2.10937499999999993204656148110447201E-01L, /* bffcaffffffffffffc152f2aea118000 */ + -2.95044199165561453749332254271716417E-32L, /* bf96326433b00b2439094d9bef22ddd1 */ + -2.07031250000000012233944895423355677E-01L, /* bffca80000000000070d695ee0e94000 */ + 1.93146788688385419095981415411012357E-32L, /* 3f959126729135a5e390d4bb802a0bde */ + -2.03125000000000008030983633336321863E-01L, /* bffca0000000000004a129fbc51af000 */ + 2.37361904671826193563212931215900137E-32L, /* 3f95ecfb3c4ba1b97ea3ad45cbb1e68a */ + -1.99218750000000001763815712796132779E-01L, /* bffc98000000000001044b12d9950000 */ + -3.63171243370923753295192486732883239E-33L, /* bf932db5fb3f27c38e0fa7bbcfc64f55 */ + -1.95312500000000004883660234506677272E-01L, /* bffc90000000000002d0b3779d1f9000 */ + -3.19989507343607877747980892249711601E-33L, /* bf9309d63de96bb3ef744c865f22f1bd */ + -1.91406250000000013720152363227519348E-01L, /* bffc88000000000007e8bcb387121000 */ + -1.89295754093147174148371614722178860E-32L, /* bf958926e2e67dfe812c508290add2e7 */ + -1.87500000000000000182342082774432620E-01L, /* bffc800000000000001ae8b06a39f000 */ + -2.96812835183184815200854214892983927E-32L, /* bf96343a62d156bbe71f55d14ca4b6e5 */ + -1.83593750000000012410147185883290345E-01L, /* bffc78000000000007276a1adda8d000 */ + -2.02191931237489669058466239995304587E-32L, /* bf95a3efab92d26ec2df90df036a117f */ + -1.79687499999999997439177363346082917E-01L, /* bffc6ffffffffffffe8616db2927d000 */ + -9.92752326937775530007399526834009465E-33L, /* bf949c5f88ed17041e1a3f1829d543cd */ + -1.75781249999999995824373974504785174E-01L, /* bffc67fffffffffffd97c94f13ea3000 */ + 1.44184772065335613487885714828816178E-32L, /* 3f952b75c63476e7fcc2f5841c27bcce */ + -1.71874999999999986685050259043077809E-01L, /* bffc5ffffffffffff8530f6bc531a000 */ + -3.49007014971241147689894940544402482E-32L, /* bf966a6dfaa012aea8ffe6d90b02330f */ + -1.67968749999999997316058782350439701E-01L, /* bffc57fffffffffffe73eb914f2aa000 */ + 3.34025733574205019081305778794376391E-32L, /* 3f965adf4572561fd5456a6c13d8babf */ + -1.64062499999999993322730602128318480E-01L, /* bffc4ffffffffffffc269be4f68f3000 */ + -1.83345916769684984022099095506340635E-32L, /* bf957ccb69026cb2f6024c211576d5f4 */ + -1.60156249999999992419000744447607979E-01L, /* bffc47fffffffffffba13df21784a000 */ + 2.73442789798110494773517431626534726E-32L, /* 3f961bf58ff22c9b30f1e2b39f26d7d5 */ + -1.56249999999999987665010524130393080E-01L, /* bffc3ffffffffffff8e3ad45e7508000 */ + 2.02695576464836145806428118889332191E-32L, /* 3f95a4fb7435a4a2f71de81eb8ae75d1 */ + -1.52343749999999989905291167951491803E-01L, /* bffc37fffffffffffa2e48aecfc24000 */ + -3.61436631548815190395331054871041524E-32L, /* bf967756567ebd108075ae527cc2e7f0 */ + -1.48437500000000006686107754967759751E-01L, /* bffc30000000000003dab20261b3c000 */ + -2.15524270159131591469319477922198390E-32L, /* bf95bfa05b82ef3a708c4f0395e9fcf6 */ + -1.44531250000000005132889939177166485E-01L, /* bffc28000000000002f57b1969e7b000 */ + 2.74741116529653547935086189244019604E-32L, /* 3f961d4eb77c1185d34fe1b04a3f3cf5 */ + -1.40625000000000000707469094533647325E-01L, /* bffc2000000000000068676d3d5c4000 */ + 4.40607097220049957013547629906723266E-33L, /* 3f936e0ac425daf795b42913cf0ef881 */ + -1.36718749999999995713752139187543306E-01L, /* bffc17fffffffffffd87762255991000 */ + -3.73751317180116492404578048203389108E-32L, /* bf9684202491e9cbb7ceb67d9ff7e0c9 */ + -1.32812500000000007198453630478482191E-01L, /* bffc10000000000004264de3a4379000 */ + -3.97050085179660203884930593717220728E-32L, /* bf969c52048de14be3c9c1971e50869c */ + -1.28906250000000006070486371645733082E-01L, /* bffc080000000000037fd87db2cb0000 */ + 3.59610068058504988294019521946586131E-32L, /* 3f967570c10687cb8e9ebd0b280abf5a */ + -1.25000000000000003700729208608337966E-01L, /* bffc00000000000002222198bbc74000 */ + 3.23464851393124362331846965931995969E-33L, /* 3f930cb95da3bfc847e593716c91d57a */ + -1.21093750000000013729038501177102555E-01L, /* bffbf000000000000fd418d1f5fda000 */ + 2.45242487730722066611358741283977619E-32L, /* 3f95fd5945ad86a464292e26ac192a84 */ + -1.17187499999999999765305306880205578E-01L, /* bffbdfffffffffffffbabaf869845000 */ + -1.14557520298960389903199646350205537E-32L, /* bf94dbda735322179d9bcf392e1dd06d */ + -1.13281250000000009579647893740755690E-01L, /* bffbd000000000000b0b69bae7ab9000 */ + 2.37873962873837390105423621772752350E-32L, /* 3f95ee0b7e0bd5ac1f6fab1e2a71abc3 */ + -1.09375000000000008981153004560108539E-01L, /* bffbc000000000000a5ac4bc1d2c3000 */ + 1.53152444860014076105003555837231015E-32L, /* 3f953e15ce931e12ef9a152522e32bdd */ + -1.05468749999999992399063850363228723E-01L, /* bffbaffffffffffff73c998091408000 */ + -8.75920903597804862471749360196688834E-33L, /* bf946bd7e310a01bae5687ebdc47fcc5 */ + -1.01562500000000007685885179918350550E-01L, /* bffba0000000000008dc7910a648c000 */ + -4.63820993797174451904075397785059501E-33L, /* bf938153d0e54001a472da180fb5e8aa */ + -9.76562499999999887262211517861331814E-02L, /* bffb8ffffffffffff300915aa6fd6000 */ + -2.63767025974952608658936466715705903E-33L, /* bf92b64215bb8d520be5404620d38088 */ + -9.37499999999999939650246024457439795E-02L, /* bffb7ffffffffffff90aca26bd0fc000 */ + -1.72047822349322956713582039121348377E-32L, /* bf9565545015c5b9b56d02cfefca2c7d */ + -8.98437500000000033088896383977486369E-02L, /* bffb70000000000003d09ca1e3cbe000 */ + 3.04831994420989436248526129869697270E-33L, /* 3f92fa7d30d2ed90e7ebbd6231fd08b1 */ + -8.59374999999999947312400115121319225E-02L, /* bffb5ffffffffffff9ecefc03376e000 */ + 1.50416954438393392150792422537312281E-32L, /* 3f9538675ee99bd722fad0023c09c915 */ + -8.20312500000000054182280847004695514E-02L, /* bffb500000000000063f2dbd40200000 */ + 2.68399664523430004488075638997207289E-33L, /* 3f92bdf49766629882c49a3da88928ed */ + -7.81250000000000114767533968079748798E-02L, /* bffb4000000000000d3b56f81ba70000 */ + 1.72318124201659121296305402819694281E-32L, /* 3f9565e407aaabfb359e8a567d760de3 */ + -7.42187500000000035531829472486812869E-02L, /* bffb3000000000000418b6e9b5388000 */ + 2.09401756478514117051383998628099655E-32L, /* 3f95b2e91221fcd74be0a86d8ad658d2 */ + -7.03124999999999987474933134860732535E-02L, /* bffb1ffffffffffffe8e53453d2ac000 */ + 2.28515798224350800271565551341211666E-32L, /* 3f95da9bd6adf00894f05b5cc5530125 */ + -6.64062500000000042267533361089054159E-02L, /* bffb10000000000004df8473dbcf2000 */ + 1.97576478800281368377376002585430031E-32L, /* 3f959a59acbddb2f53bd3096b66370e9 */ + -6.25000000000000066329769382774201686E-02L, /* bffb00000000000007a5b5914e336000 */ + -1.46422615813786836245343723048221678E-33L, /* bf91e69295f069fc0c4a9db181ea25a3 */ + -5.85937500000000002823707957982406053E-02L, /* bffae0000000000000a6aeab10592000 */ + 9.25637741701318872896718218457555829E-33L, /* 3f94807eb021f1f40a37d4015b1eb76b */ + -5.46875000000000081586888005226044448E-02L, /* bffac0000000000012d00a3171e3a000 */ + -4.87144542459404765480424673678105050E-33L, /* bf9394b42faba6b7036fe7b36269daf3 */ + -5.07812499999999927720348253140567013E-02L, /* bffa9fffffffffffef555cc8dd914000 */ + -3.01901021987395945826043649523451725E-33L, /* bf92f59e7e3025691f290f8f67277faf */ + -4.68749999999999935349476738962633103E-02L, /* bffa7ffffffffffff117b4ea2b876000 */ + 1.21521638219189777347767475937119750E-32L, /* 3f94f8c7f88c5b56674b94d984ac8ecb */ + -4.29687500000000056305562847814228219E-02L, /* bffa6000000000000cfbb19be30c0000 */ + -1.18643699217679276275559592978275214E-32L, /* bf94ecd39f0833a876550e83eb012b99 */ + -3.90624999999999962692914526031373542E-02L, /* bffa3ffffffffffff765c743922f9000 */ + -4.91277156857520035712509544689973679E-33L, /* bf939823189996193872e58ac0dececb */ + -3.51562500000000108152468207687602886E-02L, /* bffa20000000000018f031e41177f000 */ + 1.18599806302656253755207072755609820E-32L, /* 3f94eca4f23e787fab73ce8f6b9b8d64 */ + -3.12500000000000077376981036742289578E-02L, /* bffa00000000000011d787e0b386f000 */ + 9.97730386477005171963635210799577079E-33L, /* 3f949e70e498c46a0173ac0d46c699fc */ + -2.73437500000000139436129596418623235E-02L, /* bff9c00000000000404db66e70a08000 */ + 2.25755321633070123579875157841633859E-33L, /* 3f927719b1a93074bdf9f3c2cb784785 */ + -2.34375000000000088003629211828324876E-02L, /* bff98000000000002895a27d45feb000 */ + 2.84374279216848803102126617873942975E-33L, /* 3f92d87f70e749d6da6c260b68dc210b */ + -1.95312500000000107408831063404855424E-02L, /* bff9400000000000318898ba69f71000 */ + 2.47348089686935458989103979140011912E-33L, /* 3f929afa3de45086fe909fdddb41edce */ + -1.56250000000000081443917555362290635E-02L, /* bff9000000000000258f335e9cdd6000 */ + -2.43379314483517422161458863218426254E-33L, /* bf9294621c8a9ccacf2b020ec19cad27 */ + -1.17187500000000051490597418161403184E-02L, /* bff88000000000002f7ddfa26221f000 */ + 1.83405297208145390679150568810924707E-33L, /* 3f9230bbfc5d5fe1b534fbcda0465bb9 */ + -7.81249999999999715861805208310174953E-03L, /* bff7ffffffffffffcb95f3fff157d000 */ + 3.51548384878710915171654413641872451E-34L, /* 3f8fd349b76c22966f77a39fc37ed704 */ + -3.90625000000000309326013918295097128E-03L, /* bff7000000000000390f820c8e153000 */ + 6.38058004651791109324060099097251911E-36L, /* 3f8a0f665d3ac25a1ac94d688273dbcd */ +#define T_EXPL_ARG1 (2*89) + 0.00000000000000000000000000000000000E+00L, /* 00000000000000000000000000000000 */ + 0.00000000000000000000000000000000000E+00L, /* 00000000000000000000000000000000 */ + 3.90625000000000245479958859972588985E-03L, /* 3ff70000000000002d48769ac9874000 */ + -6.58439598384342854976169982902779828E-36L, /* bf8a1811b923e6c626b07ef29761482a */ + 7.81250000000001311374391093664996358E-03L, /* 3ff800000000000078f3f3cd89111000 */ + 2.60265650555493781464273319671555602E-33L, /* 3f92b070c3b635b87af426735a71fc87 */ + 1.17187500000000269581156218247101912E-02L, /* 3ff8800000000000f8a50d02fe20d000 */ + 1.00961747974945520631836275894919326E-33L, /* 3f914f80c1a4f8042044fe3b757b030b */ + 1.56249999999999797878275270751825475E-02L, /* 3ff8ffffffffffff45935b69da62e000 */ + 2.03174577741375590087897353146748580E-33L, /* 3f925194e863496e0f6e91cbf6b22e26 */ + 1.95312499999999760319884511789111533E-02L, /* 3ff93fffffffffff917790ff9a8f4000 */ + 4.62788519658803722282100289809515007E-33L, /* 3f9380783ba81295feeb3e4879d7d52d */ + 2.34374999999999822953909016349145918E-02L, /* 3ff97fffffffffffae5a163bd3cd5000 */ + -3.19499956304699705390404384504876533E-33L, /* |
