From 5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Thu, 8 Jun 2017 15:39:03 -0400 Subject: Prepare for radical source tree reorganization. All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control). --- sysdeps/ieee754/ldbl-128/Makefile | 1 - sysdeps/ieee754/ldbl-128/bits/long-double.h | 20 - sysdeps/ieee754/ldbl-128/e_acoshl.c | 61 -- sysdeps/ieee754/ldbl-128/e_acosl.c | 319 -------- sysdeps/ieee754/ldbl-128/e_asinl.c | 258 ------ sysdeps/ieee754/ldbl-128/e_atan2l.c | 122 --- sysdeps/ieee754/ldbl-128/e_atanhl.c | 74 -- sysdeps/ieee754/ldbl-128/e_coshl.c | 110 --- sysdeps/ieee754/ldbl-128/e_exp10l.c | 49 -- sysdeps/ieee754/ldbl-128/e_expl.c | 253 ------ sysdeps/ieee754/ldbl-128/e_fmodl.c | 131 --- sysdeps/ieee754/ldbl-128/e_gammal_r.c | 218 ----- sysdeps/ieee754/ldbl-128/e_hypotl.c | 140 ---- sysdeps/ieee754/ldbl-128/e_ilogbl.c | 56 -- sysdeps/ieee754/ldbl-128/e_j0l.c | 937 --------------------- sysdeps/ieee754/ldbl-128/e_j1l.c | 961 ---------------------- sysdeps/ieee754/ldbl-128/e_jnl.c | 419 ---------- sysdeps/ieee754/ldbl-128/e_lgammal_r.c | 1046 ------------------------ sysdeps/ieee754/ldbl-128/e_log10l.c | 259 ------ sysdeps/ieee754/ldbl-128/e_log2l.c | 252 ------ sysdeps/ieee754/ldbl-128/e_logl.c | 282 ------- sysdeps/ieee754/ldbl-128/e_powl.c | 451 ---------- sysdeps/ieee754/ldbl-128/e_rem_pio2l.c | 273 ------- sysdeps/ieee754/ldbl-128/e_remainderl.c | 71 -- sysdeps/ieee754/ldbl-128/e_sinhl.c | 117 --- sysdeps/ieee754/ldbl-128/gamma_productl.c | 45 - sysdeps/ieee754/ldbl-128/ieee754.h | 170 ---- sysdeps/ieee754/ldbl-128/k_cosl.c | 131 --- sysdeps/ieee754/ldbl-128/k_sincosl.c | 170 ---- sysdeps/ieee754/ldbl-128/k_sinl.c | 135 --- sysdeps/ieee754/ldbl-128/k_tanl.c | 168 ---- sysdeps/ieee754/ldbl-128/ldbl2mpn.c | 140 ---- sysdeps/ieee754/ldbl-128/lgamma_negl.c | 551 ------------- sysdeps/ieee754/ldbl-128/lgamma_productl.c | 52 -- sysdeps/ieee754/ldbl-128/math_ldbl.h | 120 --- sysdeps/ieee754/ldbl-128/mpn2ldbl.c | 52 -- sysdeps/ieee754/ldbl-128/printf_fphex.c | 25 - sysdeps/ieee754/ldbl-128/printf_fphex_macros.h | 104 --- sysdeps/ieee754/ldbl-128/s_asinhl.c | 79 -- sysdeps/ieee754/ldbl-128/s_atanl.c | 253 ------ sysdeps/ieee754/ldbl-128/s_cbrtl.c | 135 --- sysdeps/ieee754/ldbl-128/s_ceill.c | 66 -- sysdeps/ieee754/ldbl-128/s_copysignl.c | 38 - sysdeps/ieee754/ldbl-128/s_cosl.c | 86 -- sysdeps/ieee754/ldbl-128/s_erfl.c | 948 --------------------- sysdeps/ieee754/ldbl-128/s_expm1l.c | 166 ---- sysdeps/ieee754/ldbl-128/s_fabsl.c | 34 - sysdeps/ieee754/ldbl-128/s_finitel.c | 36 - sysdeps/ieee754/ldbl-128/s_floorl.c | 67 -- sysdeps/ieee754/ldbl-128/s_fma.c | 55 -- sysdeps/ieee754/ldbl-128/s_fmal.c | 298 ------- sysdeps/ieee754/ldbl-128/s_fpclassifyl.c | 44 - sysdeps/ieee754/ldbl-128/s_frexpl.c | 54 -- sysdeps/ieee754/ldbl-128/s_fromfpl.c | 4 - sysdeps/ieee754/ldbl-128/s_fromfpl_main.c | 90 -- sysdeps/ieee754/ldbl-128/s_fromfpxl.c | 4 - sysdeps/ieee754/ldbl-128/s_getpayloadl.c | 57 -- sysdeps/ieee754/ldbl-128/s_isinfl.c | 29 - sysdeps/ieee754/ldbl-128/s_isnanl.c | 38 - sysdeps/ieee754/ldbl-128/s_issignalingl.c | 46 -- sysdeps/ieee754/ldbl-128/s_llrintl.c | 108 --- sysdeps/ieee754/ldbl-128/s_llroundl.c | 102 --- sysdeps/ieee754/ldbl-128/s_log1pl.c | 256 ------ sysdeps/ieee754/ldbl-128/s_logbl.c | 54 -- sysdeps/ieee754/ldbl-128/s_lrintl.c | 137 ---- sysdeps/ieee754/ldbl-128/s_lroundl.c | 113 --- sysdeps/ieee754/ldbl-128/s_modfl.c | 79 -- sysdeps/ieee754/ldbl-128/s_nearbyintl.c | 67 -- sysdeps/ieee754/ldbl-128/s_nextafterl.c | 86 -- sysdeps/ieee754/ldbl-128/s_nexttoward.c | 89 -- sysdeps/ieee754/ldbl-128/s_nexttowardf.c | 76 -- sysdeps/ieee754/ldbl-128/s_nextupl.c | 56 -- sysdeps/ieee754/ldbl-128/s_remquol.c | 112 --- sysdeps/ieee754/ldbl-128/s_rintl.c | 62 -- sysdeps/ieee754/ldbl-128/s_roundevenl.c | 102 --- sysdeps/ieee754/ldbl-128/s_roundl.c | 80 -- sysdeps/ieee754/ldbl-128/s_scalblnl.c | 62 -- sysdeps/ieee754/ldbl-128/s_scalbnl.c | 62 -- sysdeps/ieee754/ldbl-128/s_setpayloadl.c | 3 - sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c | 69 -- sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c | 3 - sysdeps/ieee754/ldbl-128/s_signbitl.c | 27 - sysdeps/ieee754/ldbl-128/s_sincosl.c | 73 -- sysdeps/ieee754/ldbl-128/s_sinl.c | 86 -- sysdeps/ieee754/ldbl-128/s_tanhl.c | 100 --- sysdeps/ieee754/ldbl-128/s_tanl.c | 80 -- sysdeps/ieee754/ldbl-128/s_totalorderl.c | 54 -- sysdeps/ieee754/ldbl-128/s_totalordermagl.c | 48 -- sysdeps/ieee754/ldbl-128/s_truncl.c | 56 -- sysdeps/ieee754/ldbl-128/s_ufromfpl.c | 4 - sysdeps/ieee754/ldbl-128/s_ufromfpxl.c | 4 - sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h | 33 - sysdeps/ieee754/ldbl-128/strtold_l.c | 37 - sysdeps/ieee754/ldbl-128/t_expl.h | 970 ---------------------- sysdeps/ieee754/ldbl-128/t_sincosl.c | 696 ---------------- sysdeps/ieee754/ldbl-128/w_expl_compat.c | 42 - sysdeps/ieee754/ldbl-128/x2y2m1l.c | 76 -- 97 files changed, 15534 deletions(-) delete mode 100644 sysdeps/ieee754/ldbl-128/Makefile delete mode 100644 sysdeps/ieee754/ldbl-128/bits/long-double.h delete mode 100644 sysdeps/ieee754/ldbl-128/e_acoshl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_acosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_asinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_atan2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_atanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_coshl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_exp10l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_expl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_fmodl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_gammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_hypotl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_ilogbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_j0l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_j1l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_jnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_lgammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_log10l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_log2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_logl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_powl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_rem_pio2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_remainderl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_sinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/gamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128/ieee754.h delete mode 100644 sysdeps/ieee754/ldbl-128/k_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/ldbl2mpn.c delete mode 100644 sysdeps/ieee754/ldbl-128/lgamma_negl.c delete mode 100644 sysdeps/ieee754/ldbl-128/lgamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128/math_ldbl.h delete mode 100644 sysdeps/ieee754/ldbl-128/mpn2ldbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/printf_fphex.c delete mode 100644 sysdeps/ieee754/ldbl-128/printf_fphex_macros.h delete mode 100644 sysdeps/ieee754/ldbl-128/s_asinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_atanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_cbrtl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ceill.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_copysignl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_erfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_expm1l.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fabsl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_finitel.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_floorl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fma.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fpclassifyl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_frexpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_getpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_isinfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_isnanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_issignalingl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_llrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_llroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_log1pl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_logbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_lrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_lroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_modfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nearbyintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nextafterl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nextupl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_remquol.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_rintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_roundevenl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_roundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_scalbnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_signbitl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_tanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_totalorderl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_totalordermagl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_truncl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ufromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ufromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h delete mode 100644 sysdeps/ieee754/ldbl-128/strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-128/t_expl.h delete mode 100644 sysdeps/ieee754/ldbl-128/t_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/w_expl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-128/x2y2m1l.c (limited to 'sysdeps/ieee754/ldbl-128') diff --git a/sysdeps/ieee754/ldbl-128/Makefile b/sysdeps/ieee754/ldbl-128/Makefile deleted file mode 100644 index 8fd6dad343..0000000000 --- a/sysdeps/ieee754/ldbl-128/Makefile +++ /dev/null @@ -1 +0,0 @@ -long-double-fcts = yes diff --git a/sysdeps/ieee754/ldbl-128/bits/long-double.h b/sysdeps/ieee754/ldbl-128/bits/long-double.h deleted file mode 100644 index baddb2a905..0000000000 --- a/sysdeps/ieee754/ldbl-128/bits/long-double.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Properties of long double type. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* long double is distinct from double, so there is nothing to - define here. */ diff --git a/sysdeps/ieee754/ldbl-128/e_acoshl.c b/sysdeps/ieee754/ldbl-128/e_acoshl.c deleted file mode 100644 index 7c79d437a2..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_acoshl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* e_acoshl.c -- long double version of e_acosh.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acoshl(x) - * Method : - * Based on - * acoshl(x) = logl [ x + sqrtl(x*x-1) ] - * we have - * acoshl(x) := logl(x)+ln2, if x is large; else - * acoshl(x) := logl(2x-1/(sqrtl(x*x-1)+x)) if x>2; else - * acoshl(x) := log1pl(t+sqrtl(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acoshl(x) is NaN with signal if x<1. - * acoshl(NaN) is NaN without signal. - */ - -#include -#include - -static const _Float128 -one = 1.0, -ln2 = L(0.6931471805599453094172321214581766); - -_Float128 -__ieee754_acoshl(_Float128 x) -{ - _Float128 t; - u_int64_t lx; - int64_t hx; - GET_LDOUBLE_WORDS64(hx,lx,x); - if(hx<0x3fff000000000000LL) { /* x < 1 */ - return (x-x)/(x-x); - } else if(hx >=0x4035000000000000LL) { /* x > 2**54 */ - if(hx >=0x7fff000000000000LL) { /* x is inf of NaN */ - return x+x; - } else - return __ieee754_logl(x)+ln2; /* acoshl(huge)=logl(2x) */ - } else if(((hx-0x3fff000000000000LL)|lx)==0) { - return 0; /* acosh(1) = 0 */ - } else if (hx > 0x4000000000000000LL) { /* 2**28 > x > 2 */ - t=x*x; - return __ieee754_logl(2*x-one/(x+__ieee754_sqrtl(t-one))); - } else { /* 1 - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_acosl(x) - * Method : - * acos(x) = pi/2 - asin(x) - * acos(-x) = pi/2 + asin(x) - * For |x| <= 0.375 - * acos(x) = pi/2 - asin(x) - * Between .375 and .5 the approximation is - * acos(0.4375 + x) = acos(0.4375) + x P(x) / Q(x) - * Between .5 and .625 the approximation is - * acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - * For x > 0.625, - * acos(x) = 2 asin(sqrt((1-x)/2)) - * computed with an extended precision square root in the leading term. - * For x < -0.625 - * acos(x) = pi - 2 asin(sqrt((1-|x|)/2)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - * Functions needed: __ieee754_sqrtl. - */ - -#include -#include - -static const _Float128 - one = 1, - pio2_hi = L(1.5707963267948966192313216916397514420986), - pio2_lo = L(4.3359050650618905123985220130216759843812E-35), - - /* acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - - rS0 = L(5.619049346208901520945464704848780243887E0), - rS1 = L(-4.460504162777731472539175700169871920352E1), - rS2 = L(1.317669505315409261479577040530751477488E2), - rS3 = L(-1.626532582423661989632442410808596009227E2), - rS4 = L(3.144806644195158614904369445440583873264E1), - rS5 = L(9.806674443470740708765165604769099559553E1), - rS6 = L(-5.708468492052010816555762842394927806920E1), - rS7 = L(-1.396540499232262112248553357962639431922E1), - rS8 = L(1.126243289311910363001762058295832610344E1), - rS9 = L(4.956179821329901954211277873774472383512E-1), - rS10 = L(-3.313227657082367169241333738391762525780E-1), - - sS0 = L(-4.645814742084009935700221277307007679325E0), - sS1 = L(3.879074822457694323970438316317961918430E1), - sS2 = L(-1.221986588013474694623973554726201001066E2), - sS3 = L(1.658821150347718105012079876756201905822E2), - sS4 = L(-4.804379630977558197953176474426239748977E1), - sS5 = L(-1.004296417397316948114344573811562952793E2), - sS6 = L(7.530281592861320234941101403870010111138E1), - sS7 = L(1.270735595411673647119592092304357226607E1), - sS8 = L(-1.815144839646376500705105967064792930282E1), - sS9 = L(-7.821597334910963922204235247786840828217E-2), - /* 1.000000000000000000000000000000000000000E0 */ - - acosr5625 = L(9.7338991014954640492751132535550279812151E-1), - pimacosr5625 = L(2.1682027434402468335351320579240000860757E0), - - /* acos(0.4375 + x) = acos(0.4375) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 2.1e-35 */ - - P0 = L(2.177690192235413635229046633751390484892E0), - P1 = L(-2.848698225706605746657192566166142909573E1), - P2 = L(1.040076477655245590871244795403659880304E2), - P3 = L(-1.400087608918906358323551402881238180553E2), - P4 = L(2.221047917671449176051896400503615543757E1), - P5 = L(9.643714856395587663736110523917499638702E1), - P6 = L(-5.158406639829833829027457284942389079196E1), - P7 = L(-1.578651828337585944715290382181219741813E1), - P8 = L(1.093632715903802870546857764647931045906E1), - P9 = L(5.448925479898460003048760932274085300103E-1), - P10 = L(-3.315886001095605268470690485170092986337E-1), - Q0 = L(-1.958219113487162405143608843774587557016E0), - Q1 = L(2.614577866876185080678907676023269360520E1), - Q2 = L(-9.990858606464150981009763389881793660938E1), - Q3 = L(1.443958741356995763628660823395334281596E2), - Q4 = L(-3.206441012484232867657763518369723873129E1), - Q5 = L(-1.048560885341833443564920145642588991492E2), - Q6 = L(6.745883931909770880159915641984874746358E1), - Q7 = L(1.806809656342804436118449982647641392951E1), - Q8 = L(-1.770150690652438294290020775359580915464E1), - Q9 = L(-5.659156469628629327045433069052560211164E-1), - /* 1.000000000000000000000000000000000000000E0 */ - - acosr4375 = L(1.1179797320499710475919903296900511518755E0), - pimacosr4375 = L(2.0236129215398221908706530535894517323217E0), - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = L(-8.358099012470680544198472400254596543711E2), - pS1 = L(3.674973957689619490312782828051860366493E3), - pS2 = L(-6.730729094812979665807581609853656623219E3), - pS3 = L(6.643843795209060298375552684423454077633E3), - pS4 = L(-3.817341990928606692235481812252049415993E3), - pS5 = L(1.284635388402653715636722822195716476156E3), - pS6 = L(-2.410736125231549204856567737329112037867E2), - pS7 = L(2.219191969382402856557594215833622156220E1), - pS8 = L(-7.249056260830627156600112195061001036533E-1), - pS9 = L(1.055923570937755300061509030361395604448E-3), - - qS0 = L(-5.014859407482408326519083440151745519205E3), - qS1 = L(2.430653047950480068881028451580393430537E4), - qS2 = L(-4.997904737193653607449250593976069726962E4), - qS3 = L(5.675712336110456923807959930107347511086E4), - qS4 = L(-3.881523118339661268482937768522572588022E4), - qS5 = L(1.634202194895541569749717032234510811216E4), - qS6 = L(-4.151452662440709301601820849901296953752E3), - qS7 = L(5.956050864057192019085175976175695342168E2), - qS8 = L(-4.175375777334867025769346564600396877176E1); - /* 1.000000000000000000000000000000000000000E0 */ - -_Float128 -__ieee754_acosl (_Float128 x) -{ - _Float128 z, r, w, p, q, s, t, f2; - int32_t ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; /* |x| */ - if (ix >= 0x3fff0000) /* |x| >= 1 */ - { - if (ix == 0x3fff0000 - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - { /* |x| == 1 */ - if ((sign & 0x80000000) == 0) - return 0.0; /* acos(1) = 0 */ - else - return (2.0 * pio2_hi) + (2.0 * pio2_lo); /* acos(-1)= pi */ - } - return (x - x) / (x - x); /* acos(|x| > 1) is NaN */ - } - else if (ix < 0x3ffe0000) /* |x| < 0.5 */ - { - if (ix < 0x3f8e0000) /* |x| < 2**-113 */ - return pio2_hi + pio2_lo; - if (ix < 0x3ffde000) /* |x| < .4375 */ - { - /* Arcsine of x. */ - z = x * x; - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = x + x * p / q; - z = pio2_hi - (r - pio2_lo); - return z; - } - /* .4375 <= |x| < .5 */ - t = u.value - L(0.4375); - p = ((((((((((P10 * t - + P9) * t - + P8) * t - + P7) * t - + P6) * t - + P5) * t - + P4) * t - + P3) * t - + P2) * t - + P1) * t - + P0) * t; - - q = (((((((((t - + Q9) * t - + Q8) * t - + Q7) * t - + Q6) * t - + Q5) * t - + Q4) * t - + Q3) * t - + Q2) * t - + Q1) * t - + Q0; - r = p / q; - if (sign & 0x80000000) - r = pimacosr4375 - r; - else - r = acosr4375 + r; - return r; - } - else if (ix < 0x3ffe4000) /* |x| < 0.625 */ - { - t = u.value - L(0.5625); - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = (((((((((t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - if (sign & 0x80000000) - r = pimacosr5625 - p / q; - else - r = acosr5625 + p / q; - return r; - } - else - { /* |x| >= .625 */ - z = (one - u.value) * 0.5; - s = __ieee754_sqrtl (z); - /* Compute an extended precision square root from - the Newton iteration s -> 0.5 * (s + z / s). - The change w from s to the improved value is - w = 0.5 * (s + z / s) - s = (s^2 + z)/2s - s = (z - s^2)/2s. - Express s = f1 + f2 where f1 * f1 is exactly representable. - w = (z - s^2)/2s = (z - f1^2 - 2 f1 f2 - f2^2)/2s . - s + w has extended precision. */ - u.value = s; - u.parts32.w2 = 0; - u.parts32.w3 = 0; - f2 = s - u.value; - w = z - u.value * u.value; - w = w - 2.0 * u.value * f2; - w = w - f2 * f2; - w = w / (2.0 * s); - /* Arcsine of s. */ - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = s + (w + s * p / q); - - if (sign & 0x80000000) - w = pio2_hi + (pio2_lo - r); - else - w = r; - return 2.0 * w; - } -} -strong_alias (__ieee754_acosl, __acosl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_asinl.c b/sysdeps/ieee754/ldbl-128/e_asinl.c deleted file mode 100644 index 1edf1c05a1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_asinl.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under the - following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_asin(x) - * Method : - * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... - * we approximate asin(x) on [0,0.5] by - * asin(x) = x + x*x^2*R(x^2) - * Between .5 and .625 the approximation is - * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - * For x in [0.625,1] - * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) - * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; - * then for x>0.98 - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) - * For x<=0.98, let pio4_hi = pio2_hi/2, then - * f = hi part of s; - * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) - * and - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) - * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - */ - - -#include -#include -#include - -static const _Float128 - one = 1, - huge = L(1.0e+4932), - pio2_hi = L(1.5707963267948966192313216916397514420986), - pio2_lo = L(4.3359050650618905123985220130216759843812E-35), - pio4_hi = L(7.8539816339744830961566084581987569936977E-1), - - /* coefficient for R(x^2) */ - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = L(-8.358099012470680544198472400254596543711E2), - pS1 = L(3.674973957689619490312782828051860366493E3), - pS2 = L(-6.730729094812979665807581609853656623219E3), - pS3 = L(6.643843795209060298375552684423454077633E3), - pS4 = L(-3.817341990928606692235481812252049415993E3), - pS5 = L(1.284635388402653715636722822195716476156E3), - pS6 = L(-2.410736125231549204856567737329112037867E2), - pS7 = L(2.219191969382402856557594215833622156220E1), - pS8 = L(-7.249056260830627156600112195061001036533E-1), - pS9 = L(1.055923570937755300061509030361395604448E-3), - - qS0 = L(-5.014859407482408326519083440151745519205E3), - qS1 = L(2.430653047950480068881028451580393430537E4), - qS2 = L(-4.997904737193653607449250593976069726962E4), - qS3 = L(5.675712336110456923807959930107347511086E4), - qS4 = L(-3.881523118339661268482937768522572588022E4), - qS5 = L(1.634202194895541569749717032234510811216E4), - qS6 = L(-4.151452662440709301601820849901296953752E3), - qS7 = L(5.956050864057192019085175976175695342168E2), - qS8 = L(-4.175375777334867025769346564600396877176E1), - /* 1.000000000000000000000000000000000000000E0 */ - - /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - rS0 = L(-5.619049346208901520945464704848780243887E0), - rS1 = L(4.460504162777731472539175700169871920352E1), - rS2 = L(-1.317669505315409261479577040530751477488E2), - rS3 = L(1.626532582423661989632442410808596009227E2), - rS4 = L(-3.144806644195158614904369445440583873264E1), - rS5 = L(-9.806674443470740708765165604769099559553E1), - rS6 = L(5.708468492052010816555762842394927806920E1), - rS7 = L(1.396540499232262112248553357962639431922E1), - rS8 = L(-1.126243289311910363001762058295832610344E1), - rS9 = L(-4.956179821329901954211277873774472383512E-1), - rS10 = L(3.313227657082367169241333738391762525780E-1), - - sS0 = L(-4.645814742084009935700221277307007679325E0), - sS1 = L(3.879074822457694323970438316317961918430E1), - sS2 = L(-1.221986588013474694623973554726201001066E2), - sS3 = L(1.658821150347718105012079876756201905822E2), - sS4 = L(-4.804379630977558197953176474426239748977E1), - sS5 = L(-1.004296417397316948114344573811562952793E2), - sS6 = L(7.530281592861320234941101403870010111138E1), - sS7 = L(1.270735595411673647119592092304357226607E1), - sS8 = L(-1.815144839646376500705105967064792930282E1), - sS9 = L(-7.821597334910963922204235247786840828217E-2), - /* 1.000000000000000000000000000000000000000E0 */ - - asinr5625 = L(5.9740641664535021430381036628424864397707E-1); - - - -_Float128 -__ieee754_asinl (_Float128 x) -{ - _Float128 t, w, p, q, c, r, s; - int32_t ix, sign, flag; - ieee854_long_double_shape_type u; - - flag = 0; - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; /* |x| */ - if (ix >= 0x3fff0000) /* |x|>= 1 */ - { - if (ix == 0x3fff0000 - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - /* asin(1)=+-pi/2 with inexact */ - return x * pio2_hi + x * pio2_lo; - return (x - x) / (x - x); /* asin(|x|>1) is NaN */ - } - else if (ix < 0x3ffe0000) /* |x| < 0.5 */ - { - if (ix < 0x3fc60000) /* |x| < 2**-57 */ - { - math_check_force_underflow (x); - _Float128 force_inexact = huge + x; - math_force_eval (force_inexact); - return x; /* return x with inexact if x!=0 */ - } - else - { - t = x * x; - /* Mark to use pS, qS later on. */ - flag = 1; - } - } - else if (ix < 0x3ffe4000) /* 0.625 */ - { - t = u.value - 0.5625; - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = ((((((((( t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - t = asinr5625 + p / q; - if ((sign & 0x80000000) == 0) - return t; - else - return -t; - } - else - { - /* 1 > |x| >= 0.625 */ - w = one - u.value; - t = w * 0.5; - } - - p = (((((((((pS9 * t - + pS8) * t - + pS7) * t - + pS6) * t - + pS5) * t - + pS4) * t - + pS3) * t - + pS2) * t - + pS1) * t - + pS0) * t; - - q = (((((((( t - + qS8) * t - + qS7) * t - + qS6) * t - + qS5) * t - + qS4) * t - + qS3) * t - + qS2) * t - + qS1) * t - + qS0; - - if (flag) /* 2^-57 < |x| < 0.5 */ - { - w = p / q; - return x + x * w; - } - - s = __ieee754_sqrtl (t); - if (ix >= 0x3ffef333) /* |x| > 0.975 */ - { - w = p / q; - t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); - } - else - { - u.value = s; - u.parts32.w3 = 0; - u.parts32.w2 = 0; - w = u.value; - c = (t - w * w) / (s + w); - r = p / q; - p = 2.0 * s * r - (pio2_lo - 2.0 * c); - q = pio4_hi - 2.0 * w; - t = pio4_hi - (p - q); - } - - if ((sign & 0x80000000) == 0) - return t; - else - return -t; -} -strong_alias (__ieee754_asinl, __asinl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_atan2l.c b/sysdeps/ieee754/ldbl-128/e_atan2l.c deleted file mode 100644 index faecd1a63b..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_atan2l.c +++ /dev/null @@ -1,122 +0,0 @@ -/* e_atan2l.c -- long double version of e_atan2.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atan2l(y,x) - * Method : - * 1. Reduce y to positive by atan2l(y,x)=-atan2l(-y,x). - * 2. Reduce x to positive by (if x and y are unexceptional): - * ARG (x+iy) = arctan(y/x) ... if x > 0, - * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0, - * - * Special cases: - * - * ATAN2((anything), NaN ) is NaN; - * ATAN2(NAN , (anything) ) is NaN; - * ATAN2(+-0, +(anything but NaN)) is +-0 ; - * ATAN2(+-0, -(anything but NaN)) is +-pi ; - * ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2; - * ATAN2(+-(anything but INF and NaN), +INF) is +-0 ; - * ATAN2(+-(anything but INF and NaN), -INF) is +-pi; - * ATAN2(+-INF,+INF ) is +-pi/4 ; - * ATAN2(+-INF,-INF ) is +-3pi/4; - * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2; - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include - -static const _Float128 -tiny = L(1.0e-4900), -zero = 0.0, -pi_o_4 = L(7.85398163397448309615660845819875699e-01), /* 3ffe921fb54442d18469898cc51701b8 */ -pi_o_2 = L(1.57079632679489661923132169163975140e+00), /* 3fff921fb54442d18469898cc51701b8 */ -pi = L(3.14159265358979323846264338327950280e+00), /* 4000921fb54442d18469898cc51701b8 */ -pi_lo = L(8.67181013012378102479704402604335225e-35); /* 3f8dcd129024e088a67cc74020bbea64 */ - -_Float128 -__ieee754_atan2l(_Float128 y, _Float128 x) -{ - _Float128 z; - int64_t k,m,hx,hy,ix,iy; - u_int64_t lx,ly; - - GET_LDOUBLE_WORDS64(hx,lx,x); - ix = hx&0x7fffffffffffffffLL; - GET_LDOUBLE_WORDS64(hy,ly,y); - iy = hy&0x7fffffffffffffffLL; - if(((ix|((lx|-lx)>>63))>0x7fff000000000000LL)|| - ((iy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* x or y is NaN */ - return x+y; - if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1.0L */ - m = ((hy>>63)&1)|((hx>>62)&2); /* 2*sign(x)+sign(y) */ - - /* when y = 0 */ - if((iy|ly)==0) { - switch(m) { - case 0: - case 1: return y; /* atan(+-0,+anything)=+-0 */ - case 2: return pi+tiny;/* atan(+0,-anything) = pi */ - case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ - } - } - /* when x = 0 */ - if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* when x is INF */ - if(ix==0x7fff000000000000LL) { - if(iy==0x7fff000000000000LL) { - switch(m) { - case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ - case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ - case 2: return 3*pi_o_4+tiny;/*atan(+INF,-INF)*/ - case 3: return -3*pi_o_4-tiny;/*atan(-INF,-INF)*/ - } - } else { - switch(m) { - case 0: return zero ; /* atan(+...,+INF) */ - case 1: return -zero ; /* atan(-...,+INF) */ - case 2: return pi+tiny ; /* atan(+...,-INF) */ - case 3: return -pi-tiny ; /* atan(-...,-INF) */ - } - } - } - /* when y is INF */ - if(iy==0x7fff000000000000LL) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* compute y/x */ - k = (iy-ix)>>48; - if(k > 120) z=pi_o_2+L(0.5)*pi_lo; /* |y/x| > 2**120 */ - else if(hx<0&&k<-120) z=0; /* |y|/x < -2**120 */ - else z=__atanl(fabsl(y/x)); /* safe to do y/x */ - switch (m) { - case 0: return z ; /* atan(+,+) */ - case 1: { - u_int64_t zh; - GET_LDOUBLE_MSW64(zh,z); - SET_LDOUBLE_MSW64(z,zh ^ 0x8000000000000000ULL); - } - return z ; /* atan(-,+) */ - case 2: return pi-(z-pi_lo);/* atan(+,-) */ - default: /* case 3 */ - return (z-pi_lo)-pi;/* atan(-,-) */ - } -} -strong_alias (__ieee754_atan2l, __atan2l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_atanhl.c b/sysdeps/ieee754/ldbl-128/e_atanhl.c deleted file mode 100644 index 3905af4dfc..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_atanhl.c +++ /dev/null @@ -1,74 +0,0 @@ -/* s_atanhl.c -- long double version of s_atan.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atanhl(x) - * Method : - * 1.Reduced x to positive by atanh(-x) = -atanh(x) - * 2.For x>=0.5 - * 1 2x x - * atanhl(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - * 2 1 - x 1 - x - * - * For x<0.5 - * atanhl(x) = 0.5*log1pl(2x+2x*x/(1-x)) - * - * Special cases: - * atanhl(x) is NaN if |x| > 1 with signal; - * atanhl(NaN) is that NaN with no signal; - * atanhl(+-1) is +-INF with signal. - * - */ - -#include -#include -#include - -static const _Float128 one = 1, huge = L(1e4900); - -static const _Float128 zero = 0; - -_Float128 -__ieee754_atanhl(_Float128 x) -{ - _Float128 t; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - u.parts32.w0 = ix; - if (ix >= 0x3fff0000) /* |x| >= 1.0 or infinity or NaN */ - { - if (u.value == one) - return x/zero; - else - return (x-x)/(x-x); - } - if(ix<0x3fc60000 && (huge+x)>zero) /* x < 2^-57 */ - { - math_check_force_underflow (x); - return x; - } - - if(ix<0x3ffe0000) { /* x < 0.5 */ - t = u.value+u.value; - t = 0.5*__log1pl(t+t*u.value/(one-u.value)); - } else - t = 0.5*__log1pl((u.value+u.value)/(one-u.value)); - if(jx & 0x80000000) return -t; else return t; -} -strong_alias (__ieee754_atanhl, __atanhl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_coshl.c b/sysdeps/ieee754/ldbl-128/e_coshl.c deleted file mode 100644 index 70a2fe3e84..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_coshl.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_coshl(x) - * Method : - * mathematically coshl(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (coshl(x) = coshl(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : coshl(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 22 : coshl(x) := ------------------- - * 2 - * 22 <= x <= lnovft : coshl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: coshl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : coshl(x) := huge*huge (overflow) - * - * Special cases: - * coshl(x) is |x| if x is +INF, -INF, or NaN. - * only coshl(0)=1 is exact for finite x. - */ - -#include -#include - -static const _Float128 one = 1.0, half = 0.5, huge = L(1.0e4900), -ovf_thresh = L(1.1357216553474703894801348310092223067821E4); - -_Float128 -__ieee754_coshl (_Float128 x) -{ - _Float128 t, w; - int32_t ex; - ieee854_long_double_shape_type u; - - u.value = x; - ex = u.parts32.w0 & 0x7fffffff; - - /* Absolute value of x. */ - u.parts32.w0 = ex; - - /* x is INF or NaN */ - if (ex >= 0x7fff0000) - return x * x; - - /* |x| in [0,0.5*ln2], return 1+expm1l(|x|)^2/(2*expl(|x|)) */ - if (ex < 0x3ffd62e4) /* 0.3465728759765625 */ - { - if (ex < 0x3fb80000) /* |x| < 2^-116 */ - return one; /* cosh(tiny) = 1 */ - t = __expm1l (u.value); - w = one + t; - - return one + (t * t) / (w + w); - } - - /* |x| in [0.5*ln2,40], return (exp(|x|)+1/exp(|x|)/2; */ - if (ex < 0x40044000) - { - t = __ieee754_expl (u.value); - return half * t + half / t; - } - - /* |x| in [22, ln(maxdouble)] return half*exp(|x|) */ - if (ex <= 0x400c62e3) /* 11356.375 */ - return half * __ieee754_expl (u.value); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (u.value <= ovf_thresh) - { - w = __ieee754_expl (half * u.value); - t = half * w; - return t * w; - } - - /* |x| > overflowthresold, cosh(x) overflow */ - return huge * huge; -} -strong_alias (__ieee754_coshl, __coshl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_exp10l.c b/sysdeps/ieee754/ldbl-128/e_exp10l.c deleted file mode 100644 index 05a470fa39..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_exp10l.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 log10_high = L(0x2.4d763776aaa2bp0); -static const _Float128 log10_low = L(0x5.ba95b58ae0b4c28a38a3fb3e7698p-60); - -_Float128 -__ieee754_exp10l (_Float128 arg) -{ - ieee854_long_double_shape_type u; - _Float128 arg_high, arg_low; - _Float128 exp_high, exp_low; - - if (!isfinite (arg)) - return __ieee754_expl (arg); - if (arg < LDBL_MIN_10_EXP - LDBL_DIG - 10) - return LDBL_MIN * LDBL_MIN; - else if (arg > LDBL_MAX_10_EXP + 1) - return LDBL_MAX * LDBL_MAX; - else if (fabsl (arg) < L(0x1p-116)) - return 1; - - u.value = arg; - u.parts64.lsw &= 0xfe00000000000000LL; - arg_high = u.value; - arg_low = arg - arg_high; - exp_high = arg_high * log10_high; - exp_low = arg_high * log10_low + arg_low * M_LN10l; - return __ieee754_expl (exp_high) * __ieee754_expl (exp_low); -} -strong_alias (__ieee754_exp10l, __exp10l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c deleted file mode 100644 index 15639d1da1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_expl.c +++ /dev/null @@ -1,253 +0,0 @@ -/* Quad-precision floating point e^x. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - Partly based on double-precision code - by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* 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 -#include -#include -#include -#include -#include -#include -#include "t_expl.h" - -static const _Float128 C[] = { -/* Smallest integer x for which e^x overflows. */ -#define himark C[0] - L(11356.523406294143949491931077970765), - -/* Largest integer x for which e^x underflows. */ -#define lomark C[1] -L(-11433.4627433362978788372438434526231), - -/* 3x2^96 */ -#define THREEp96 C[2] - L(59421121885698253195157962752.0), - -/* 3x2^103 */ -#define THREEp103 C[3] - L(30423614405477505635920876929024.0), - -/* 3x2^111 */ -#define THREEp111 C[4] - L(7788445287802241442795744493830144.0), - -/* 1/ln(2) */ -#define M_1_LN2 C[5] - L(1.44269504088896340735992468100189204), - -/* first 93 bits of ln(2) */ -#define M_LN2_0 C[6] - L(0.693147180559945309417232121457981864), - -/* ln2_0 - ln(2) */ -#define M_LN2_1 C[7] -L(-1.94704509238074995158795957333327386E-31), - -/* very small number */ -#define TINY C[8] - L(1.0e-4900), - -/* 2^16383 */ -#define TWO16383 C[9] - L(5.94865747678615882542879663314003565E+4931), - -/* 256 */ -#define TWO8 C[10] - 256, - -/* 32768 */ -#define TWO15 C[11] - 32768, - -/* Chebyshev polynom coefficients 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] - L(0.5), - L(1.66666666666666666666666666666666683E-01), - L(4.16666666666666666666654902320001674E-02), - L(8.33333333333333333333314659767198461E-03), - L(1.38888888889899438565058018857254025E-03), - L(1.98412698413981650382436541785404286E-04), -}; - -_Float128 -__ieee754_expl (_Float128 x) -{ - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - int tval1, tval2, unsafe, n_i; - _Float128 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) >= 15000; - ex2_u.ieee.exponent += n_i >> unsafe; - - /* Compute scale = 2^n_1. */ - scale_u.d = 1; - 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 - { - result *= scale_u.d; - math_check_force_underflow_nonneg (result); - return result; - } - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (isinf (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; -} -strong_alias (__ieee754_expl, __expl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_fmodl.c b/sysdeps/ieee754/ldbl-128/e_fmodl.c deleted file mode 100644 index f27cd4f8ff..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_fmodl.c +++ /dev/null @@ -1,131 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993, 2011 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmodl(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include - -static const _Float128 one = 1.0, Zero[] = {0.0, -0.0,}; - -_Float128 -__ieee754_fmodl (_Float128 x, _Float128 y) -{ - int64_t n,hx,hy,hz,ix,iy,sx,i; - u_int64_t lx,ly,lz; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - sx = hx&0x8000000000000000ULL; /* sign of x */ - hx ^=sx; /* |x| */ - hy &= 0x7fffffffffffffffLL; /* |y| */ - - /* purge off exception values */ - if((hy|ly)==0||(hx>=0x7fff000000000000LL)|| /* y=0,or x not finite */ - ((hy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* or y is NaN */ - return (x*y)/(x*y); - if(hx<=hy) { - if((hx>63]; /* |x|=|y| return x*0*/ - } - - /* determine ix = ilogb(x) */ - if(hx<0x0001000000000000LL) { /* subnormal x */ - if(hx==0) { - for (ix = -16431, i=lx; i>0; i<<=1) ix -=1; - } else { - for (ix = -16382, i=hx<<15; i>0; i<<=1) ix -=1; - } - } else ix = (hx>>48)-0x3fff; - - /* determine iy = ilogb(y) */ - if(hy<0x0001000000000000LL) { /* subnormal y */ - if(hy==0) { - for (iy = -16431, i=ly; i>0; i<<=1) iy -=1; - } else { - for (iy = -16382, i=hy<<15; i>0; i<<=1) iy -=1; - } - } else iy = (hy>>48)-0x3fff; - - /* set up {hx,lx}, {hy,ly} and align y to x */ - if(ix >= -16382) - hx = 0x0001000000000000LL|(0x0000ffffffffffffLL&hx); - else { /* subnormal x, shift x to normal */ - n = -16382-ix; - if(n<=63) { - hx = (hx<>(64-n)); - lx <<= n; - } else { - hx = lx<<(n-64); - lx = 0; - } - } - if(iy >= -16382) - hy = 0x0001000000000000LL|(0x0000ffffffffffffLL&hy); - else { /* subnormal y, shift y to normal */ - n = -16382-iy; - if(n<=63) { - hy = (hy<>(64-n)); - ly <<= n; - } else { - hy = ly<<(n-64); - ly = 0; - } - } - - /* fix point fmod */ - n = ix - iy; - while(n--) { - hz=hx-hy;lz=lx-ly; if(lx>63); lx = lx+lx;} - else { - if((hz|lz)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - hx = hz+hz+(lz>>63); lx = lz+lz; - } - } - hz=hx-hy;lz=lx-ly; if(lx=0) {hx=hz;lx=lz;} - - /* convert back to floating value and restore the sign */ - if((hx|lx)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - while(hx<0x0001000000000000LL) { /* normalize x */ - hx = hx+hx+(lx>>63); lx = lx+lx; - iy -= 1; - } - if(iy>= -16382) { /* normalize output */ - hx = ((hx-0x0001000000000000LL)|((iy+16383)<<48)); - SET_LDOUBLE_WORDS64(x,hx|sx,lx); - } else { /* subnormal output */ - n = -16382 - iy; - if(n<=48) { - lx = (lx>>n)|((u_int64_t)hx<<(64-n)); - hx >>= n; - } else if (n<=63) { - lx = (hx<<(64-n))|(lx>>n); hx = sx; - } else { - lx = hx>>(n-64); hx = sx; - } - SET_LDOUBLE_WORDS64(x,hx|sx,lx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmodl, __fmodl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_gammal_r.c b/sysdeps/ieee754/ldbl-128/e_gammal_r.c deleted file mode 100644 index 3a5317ade1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_gammal_r.c +++ /dev/null @@ -1,218 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const _Float128 gamma_coeff[] = - { - L(0x1.5555555555555555555555555555p-4), - L(-0xb.60b60b60b60b60b60b60b60b60b8p-12), - L(0x3.4034034034034034034034034034p-12), - L(-0x2.7027027027027027027027027028p-12), - L(0x3.72a3c5631fe46ae1d4e700dca8f2p-12), - L(-0x7.daac36664f1f207daac36664f1f4p-12), - L(0x1.a41a41a41a41a41a41a41a41a41ap-8), - L(-0x7.90a1b2c3d4e5f708192a3b4c5d7p-8), - L(0x2.dfd2c703c0cfff430edfd2c703cp-4), - L(-0x1.6476701181f39edbdb9ce625987dp+0), - L(0xd.672219167002d3a7a9c886459cp+0), - L(-0x9.cd9292e6660d55b3f712eb9e07c8p+4), - L(0x8.911a740da740da740da740da741p+8), - L(-0x8.d0cc570e255bf59ff6eec24b49p+12), - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 1775, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static _Float128 -gammal_positive (_Float128 x, int *exp2_adj) -{ - int local_signgam; - if (x < L(0.5)) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x + 1, &local_signgam)) / x; - } - else if (x <= L(1.5)) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x, &local_signgam)); - } - else if (x < L(12.5)) - { - /* Adjust into the range for using exp (lgamma). */ - *exp2_adj = 0; - _Float128 n = __ceill (x - L(1.5)); - _Float128 x_adj = x - n; - _Float128 eps; - _Float128 prod = __gamma_productl (x_adj, 0, n, &eps); - return (__ieee754_expl (__ieee754_lgammal_r (x_adj, &local_signgam)) - * prod * (1 + eps)); - } - else - { - _Float128 eps = 0; - _Float128 x_eps = 0; - _Float128 x_adj = x; - _Float128 prod = 1; - if (x < 24) - { - /* Adjust into the range for applying Stirling's - approximation. */ - _Float128 n = __ceill (24 - x); - x_adj = x + n; - x_eps = (x - (x_adj - n)); - prod = __gamma_productl (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - _Float128 exp_adj = -eps; - _Float128 x_adj_int = __roundl (x_adj); - _Float128 x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - _Float128 x_adj_mant = __frexpl (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2l) - { - x_adj_log2--; - x_adj_mant *= 2; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - _Float128 ret = (__ieee754_powl (x_adj_mant, x_adj) - * __ieee754_exp2l (x_adj_log2 * x_adj_frac) - * __ieee754_expl (-x_adj) - * __ieee754_sqrtl (2 * M_PIl / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logl (x_adj); - _Float128 bsum = gamma_coeff[NCOEFF - 1]; - _Float128 x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1l (exp_adj); - } -} - -_Float128 -__ieee754_gammal_r (_Float128 x, int *signgamp) -{ - int64_t hx; - u_int64_t lx; - _Float128 ret; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (hx < 0 && (u_int64_t) hx < 0xffff000000000000ULL && __rintl (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - if (hx == 0xffff000000000000ULL && lx == 0) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if ((hx & 0x7fff000000000000ULL) == 0x7fff000000000000ULL) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - - if (x >= 1756) - { - /* Overflow. */ - *signgamp = 0; - return LDBL_MAX * LDBL_MAX; - } - else - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x > 0) - { - *signgamp = 0; - int exp2_adj; - ret = gammal_positive (x, &exp2_adj); - ret = __scalbnl (ret, exp2_adj); - } - else if (x >= -LDBL_EPSILON / 4) - { - *signgamp = 0; - ret = 1 / x; - } - else - { - _Float128 tx = __truncl (x); - *signgamp = (tx == 2 * __truncl (tx / 2)) ? -1 : 1; - if (x <= -1775) - /* Underflow. */ - ret = LDBL_MIN * LDBL_MIN; - else - { - _Float128 frac = tx - x; - if (frac > L(0.5)) - frac = 1 - frac; - _Float128 sinpix = (frac <= L(0.25) - ? __sinl (M_PIl * frac) - : __cosl (M_PIl * (L(0.5) - frac))); - int exp2_adj; - ret = M_PIl / (-x * sinpix - * gammal_positive (-x, &exp2_adj)); - ret = __scalbnl (ret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MAX, ret) * LDBL_MAX); - else - return __copysignl (LDBL_MAX, ret) * LDBL_MAX; - } - else if (ret == 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MIN, ret) * LDBL_MIN); - else - return __copysignl (LDBL_MIN, ret) * LDBL_MIN; - } - else - return ret; -} -strong_alias (__ieee754_gammal_r, __gammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c deleted file mode 100644 index 6c4e178fbe..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_hypotl.c +++ /dev/null @@ -1,140 +0,0 @@ -/* e_hypotl.c -- long double version of e_hypot.c. - * Conversion to long double by Jakub Jelinek, jakub@redhat.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_hypotl(x,y) - * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrtl(2)/2 ulp, than - * sqrtl(z) has error less than 1 ulp (exercise). - * - * So, compute sqrtl(x*x+y*y) with some care as - * follows to get the error below 1 ulp: - * - * Assume x>y>0; - * (if possible, set rounding to round-to-nearest) - * 1. if x > 2y use - * x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y - * where x1 = x with lower 64 bits cleared, x2 = x-x1; else - * 2. if x <= 2y use - * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 64 bits cleared, t2 = 2x-t1, - * y1= y with lower 64 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too - * large or too tiny - * - * Special cases: - * hypotl(x,y) is INF if x or y is +INF or -INF; else - * hypotl(x,y) is NAN if x or y is NAN. - * - * Accuracy: - * hypotl(x,y) returns sqrtl(x^2+y^2) with error less - * than 1 ulps (units in the last place) - */ - -#include -#include - -_Float128 -__ieee754_hypotl(_Float128 x, _Float128 y) -{ - _Float128 a,b,t1,t2,y1,y2,w; - int64_t j,k,ha,hb; - - GET_LDOUBLE_MSW64(ha,x); - ha &= 0x7fffffffffffffffLL; - GET_LDOUBLE_MSW64(hb,y); - hb &= 0x7fffffffffffffffLL; - if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} - SET_LDOUBLE_MSW64(a,ha); /* a <- |a| */ - SET_LDOUBLE_MSW64(b,hb); /* b <- |b| */ - if((ha-hb)>0x78000000000000LL) {return a+b;} /* x/y > 2**120 */ - k=0; - if(ha > 0x5f3f000000000000LL) { /* a>2**8000 */ - if(ha >= 0x7fff000000000000LL) { /* Inf or NaN */ - u_int64_t low; - w = a+b; /* for sNaN */ - if (issignaling (a) || issignaling (b)) - return w; - GET_LDOUBLE_LSW64(low,a); - if(((ha&0xffffffffffffLL)|low)==0) w = a; - GET_LDOUBLE_LSW64(low,b); - if(((hb^0x7fff000000000000LL)|low)==0) w = b; - return w; - } - /* scale a and b by 2**-9600 */ - ha -= 0x2580000000000000LL; - hb -= 0x2580000000000000LL; k += 9600; - SET_LDOUBLE_MSW64(a,ha); - SET_LDOUBLE_MSW64(b,hb); - } - if(hb < 0x20bf000000000000LL) { /* b < 2**-8000 */ - if(hb <= 0x0000ffffffffffffLL) { /* subnormal b or 0 */ - u_int64_t low; - GET_LDOUBLE_LSW64(low,b); - if((hb|low)==0) return a; - t1=0; - SET_LDOUBLE_MSW64(t1,0x7ffd000000000000LL); /* t1=2^16382 */ - b *= t1; - a *= t1; - k -= 16382; - GET_LDOUBLE_MSW64 (ha, a); - GET_LDOUBLE_MSW64 (hb, b); - if (hb > ha) - { - t1 = a; - a = b; - b = t1; - j = ha; - ha = hb; - hb = j; - } - } else { /* scale a and b by 2^9600 */ - ha += 0x2580000000000000LL; /* a *= 2^9600 */ - hb += 0x2580000000000000LL; /* b *= 2^9600 */ - k -= 9600; - SET_LDOUBLE_MSW64(a,ha); - SET_LDOUBLE_MSW64(b,hb); - } - } - /* medium size a and b */ - w = a-b; - if (w>b) { - t1 = 0; - SET_LDOUBLE_MSW64(t1,ha); - t2 = a-t1; - w = __ieee754_sqrtl(t1*t1-(b*(-b)-t2*(a+t1))); - } else { - a = a+a; - y1 = 0; - SET_LDOUBLE_MSW64(y1,hb); - y2 = b - y1; - t1 = 0; - SET_LDOUBLE_MSW64(t1,ha+0x0001000000000000LL); - t2 = a - t1; - w = __ieee754_sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b))); - } - if(k!=0) { - u_int64_t high; - t1 = 1; - GET_LDOUBLE_MSW64(high,t1); - SET_LDOUBLE_MSW64(t1,high+(k<<48)); - w *= t1; - math_check_force_underflow_nonneg (w); - return w; - } else return w; -} -strong_alias (__ieee754_hypotl, __hypotl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_ilogbl.c b/sysdeps/ieee754/ldbl-128/e_ilogbl.c deleted file mode 100644 index 9effe6386a..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_ilogbl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* s_ilogbl.c -- long double version of s_ilogb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* ilogbl(long double x) - * return the binary exponent of non-zero x - * ilogbl(0) = FP_ILOGB0 - * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised) - * ilogbl(+-Inf) = INT_MAX (no signal is raised) - */ - -#include -#include -#include - -int __ieee754_ilogbl (_Float128 x) -{ - int64_t hx,lx; - int ix; - - GET_LDOUBLE_WORDS64(hx,lx,x); - hx &= 0x7fffffffffffffffLL; - if(hx <= 0x0001000000000000LL) { - if((hx|lx)==0) - return FP_ILOGB0; /* ilogbl(0) = FP_ILOGB0 */ - else /* subnormal x */ - if(hx==0) { - for (ix = -16431; lx>0; lx<<=1) ix -=1; - } else { - for (ix = -16382, hx<<=15; hx>0; hx<<=1) ix -=1; - } - return ix; - } - else if (hx<0x7fff000000000000LL) return (hx>>48)-0x3fff; - else if (FP_ILOGBNAN != INT_MAX) { - /* ISO C99 requires ilogbl(+-Inf) == INT_MAX. */ - if (((hx^0x7fff000000000000LL)|lx) == 0) - return INT_MAX; - } - return FP_ILOGBNAN; -} diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c deleted file mode 100644 index fb8d3518ce..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_j0l.c +++ /dev/null @@ -1,937 +0,0 @@ -/* j0l.c - * - * Bessel function of order zero - * - * - * - * SYNOPSIS: - * - * long double x, y, j0l(); - * - * y = j0l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of first kind, order zero of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation - * is J0(x) = 1 - x^2 / 4 + x^4 R(x^2) - * The second interval is further partitioned into eight equal segments - * of 1/x. - * - * J0(x) = sqrt(2/(pi x)) (P0(x) cos(X) - Q0(x) sin(X)), - * X = x - pi/4, - * - * and the auxiliary functions are given by - * - * J0(x)cos(X) + Y0(x)sin(X) = sqrt( 2/(pi x)) P0(x), - * P0(x) = 1 + 1/x^2 R(1/x^2) - * - * Y0(x)cos(X) - J0(x)sin(X) = sqrt( 2/(pi x)) Q0(x), - * Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - * - * - * - * ACCURACY: - * - * Absolute error: - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 1.7e-34 2.4e-35 - * - * - */ - -/* y0l.c - * - * Bessel function of the second kind, order zero - * - * - * - * SYNOPSIS: - * - * double x, y, y0l(); - * - * y = y0l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of the second kind, of order - * zero, of the argument. - * - * The approximation is the same as for J0(x), and - * Y0(x) = sqrt(2/(pi x)) (P0(x) sin(X) + Q0(x) cos(X)). - * - * ACCURACY: - * - * Absolute error, when y0(x) < 1; else relative error: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 3.0e-34 2.7e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier (moshier@na-net.ornl.gov). - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include - -/* 1 / sqrt(pi) */ -static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1); -/* 2 / pi */ -static const _Float128 TWOOPI = L(6.3661977236758134307553505349005744813784E-1); -static const _Float128 zero = 0; - -/* J0(x) = 1 - x^2/4 + x^2 x^2 R(x^2) - Peak relative error 3.4e-37 - 0 <= x <= 2 */ -#define NJ0_2N 6 -static const _Float128 J0_2N[NJ0_2N + 1] = { - L(3.133239376997663645548490085151484674892E16), - L(-5.479944965767990821079467311839107722107E14), - L(6.290828903904724265980249871997551894090E12), - L(-3.633750176832769659849028554429106299915E10), - L(1.207743757532429576399485415069244807022E8), - L(-2.107485999925074577174305650549367415465E5), - L(1.562826808020631846245296572935547005859E2), -}; -#define NJ0_2D 6 -static const _Float128 J0_2D[NJ0_2D + 1] = { - L(2.005273201278504733151033654496928968261E18), - L(2.063038558793221244373123294054149790864E16), - L(1.053350447931127971406896594022010524994E14), - L(3.496556557558702583143527876385508882310E11), - L(8.249114511878616075860654484367133976306E8), - L(1.402965782449571800199759247964242790589E6), - L(1.619910762853439600957801751815074787351E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2), - 0 <= 1/x <= .0625 - Peak relative error 3.3e-36 */ -#define NP16_IN 9 -static const _Float128 P16_IN[NP16_IN + 1] = { - L(-1.901689868258117463979611259731176301065E-16), - L(-1.798743043824071514483008340803573980931E-13), - L(-6.481746687115262291873324132944647438959E-11), - L(-1.150651553745409037257197798528294248012E-8), - L(-1.088408467297401082271185599507222695995E-6), - L(-5.551996725183495852661022587879817546508E-5), - L(-1.477286941214245433866838787454880214736E-3), - L(-1.882877976157714592017345347609200402472E-2), - L(-9.620983176855405325086530374317855880515E-2), - L(-1.271468546258855781530458854476627766233E-1), -}; -#define NP16_ID 9 -static const _Float128 P16_ID[NP16_ID + 1] = { - L(2.704625590411544837659891569420764475007E-15), - L(2.562526347676857624104306349421985403573E-12), - L(9.259137589952741054108665570122085036246E-10), - L(1.651044705794378365237454962653430805272E-7), - L(1.573561544138733044977714063100859136660E-5), - L(8.134482112334882274688298469629884804056E-4), - L(2.219259239404080863919375103673593571689E-2), - L(2.976990606226596289580242451096393862792E-1), - L(1.713895630454693931742734911930937246254E0), - L(3.231552290717904041465898249160757368855E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - 0.0625 <= 1/x <= 0.125 - Peak relative error 2.4e-35 */ -#define NP8_16N 10 -static const _Float128 P8_16N[NP8_16N + 1] = { - L(-2.335166846111159458466553806683579003632E-15), - L(-1.382763674252402720401020004169367089975E-12), - L(-3.192160804534716696058987967592784857907E-10), - L(-3.744199606283752333686144670572632116899E-8), - L(-2.439161236879511162078619292571922772224E-6), - L(-9.068436986859420951664151060267045346549E-5), - L(-1.905407090637058116299757292660002697359E-3), - L(-2.164456143936718388053842376884252978872E-2), - L(-1.212178415116411222341491717748696499966E-1), - L(-2.782433626588541494473277445959593334494E-1), - L(-1.670703190068873186016102289227646035035E-1), -}; -#define NP8_16D 10 -static const _Float128 P8_16D[NP8_16D + 1] = { - L(3.321126181135871232648331450082662856743E-14), - L(1.971894594837650840586859228510007703641E-11), - L(4.571144364787008285981633719513897281690E-9), - L(5.396419143536287457142904742849052402103E-7), - L(3.551548222385845912370226756036899901549E-5), - L(1.342353874566932014705609788054598013516E-3), - L(2.899133293006771317589357444614157734385E-2), - L(3.455374978185770197704507681491574261545E-1), - L(2.116616964297512311314454834712634820514E0), - L(5.850768316827915470087758636881584174432E0), - L(5.655273858938766830855753983631132928968E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - 0.125 <= 1/x <= 0.1875 - Peak relative error 2.7e-35 */ -#define NP5_8N 10 -static const _Float128 P5_8N[NP5_8N + 1] = { - L(-1.270478335089770355749591358934012019596E-12), - L(-4.007588712145412921057254992155810347245E-10), - L(-4.815187822989597568124520080486652009281E-8), - L(-2.867070063972764880024598300408284868021E-6), - L(-9.218742195161302204046454768106063638006E-5), - L(-1.635746821447052827526320629828043529997E-3), - L(-1.570376886640308408247709616497261011707E-2), - L(-7.656484795303305596941813361786219477807E-2), - L(-1.659371030767513274944805479908858628053E-1), - L(-1.185340550030955660015841796219919804915E-1), - L(-8.920026499909994671248893388013790366712E-3), -}; -#define NP5_8D 9 -static const _Float128 P5_8D[NP5_8D + 1] = { - L(1.806902521016705225778045904631543990314E-11), - L(5.728502760243502431663549179135868966031E-9), - L(6.938168504826004255287618819550667978450E-7), - L(4.183769964807453250763325026573037785902E-5), - L(1.372660678476925468014882230851637878587E-3), - L(2.516452105242920335873286419212708961771E-2), - L(2.550502712902647803796267951846557316182E-1), - L(1.365861559418983216913629123778747617072E0), - L(3.523825618308783966723472468855042541407E0), - L(3.656365803506136165615111349150536282434E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 3.5e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NP4_5N 9 -static const _Float128 P4_5N[NP4_5N + 1] = { - L(-9.791405771694098960254468859195175708252E-10), - L(-1.917193059944531970421626610188102836352E-7), - L(-1.393597539508855262243816152893982002084E-5), - L(-4.881863490846771259880606911667479860077E-4), - L(-8.946571245022470127331892085881699269853E-3), - L(-8.707474232568097513415336886103899434251E-2), - L(-4.362042697474650737898551272505525973766E-1), - L(-1.032712171267523975431451359962375617386E0), - L(-9.630502683169895107062182070514713702346E-1), - L(-2.251804386252969656586810309252357233320E-1), -}; -#define NP4_5D 9 -static const _Float128 P4_5D[NP4_5D + 1] = { - L(1.392555487577717669739688337895791213139E-8), - L(2.748886559120659027172816051276451376854E-6), - L(2.024717710644378047477189849678576659290E-4), - L(7.244868609350416002930624752604670292469E-3), - L(1.373631762292244371102989739300382152416E-1), - L(1.412298581400224267910294815260613240668E0), - L(7.742495637843445079276397723849017617210E0), - L(2.138429269198406512028307045259503811861E1), - L(2.651547684548423476506826951831712762610E1), - L(1.167499382465291931571685222882909166935E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 2.3e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NP3r2_4N 9 -static const _Float128 P3r2_4N[NP3r2_4N + 1] = { - L(-2.589155123706348361249809342508270121788E-8), - L(-3.746254369796115441118148490849195516593E-6), - L(-1.985595497390808544622893738135529701062E-4), - L(-5.008253705202932091290132760394976551426E-3), - L(-6.529469780539591572179155511840853077232E-2), - L(-4.468736064761814602927408833818990271514E-1), - L(-1.556391252586395038089729428444444823380E0), - L(-2.533135309840530224072920725976994981638E0), - L(-1.605509621731068453869408718565392869560E0), - L(-2.518966692256192789269859830255724429375E-1), -}; -#define NP3r2_4D 9 -static const _Float128 P3r2_4D[NP3r2_4D + 1] = { - L(3.682353957237979993646169732962573930237E-7), - L(5.386741661883067824698973455566332102029E-5), - L(2.906881154171822780345134853794241037053E-3), - L(7.545832595801289519475806339863492074126E-2), - L(1.029405357245594877344360389469584526654E0), - L(7.565706120589873131187989560509757626725E0), - L(2.951172890699569545357692207898667665796E1), - L(5.785723537170311456298467310529815457536E1), - L(5.095621464598267889126015412522773474467E1), - L(1.602958484169953109437547474953308401442E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.0e-35 - 0.3125 <= 1/x <= 0.375 */ -#define NP2r7_3r2N 9 -static const _Float128 P2r7_3r2N[NP2r7_3r2N + 1] = { - L(-1.917322340814391131073820537027234322550E-7), - L(-1.966595744473227183846019639723259011906E-5), - L(-7.177081163619679403212623526632690465290E-4), - L(-1.206467373860974695661544653741899755695E-2), - L(-1.008656452188539812154551482286328107316E-1), - L(-4.216016116408810856620947307438823892707E-1), - L(-8.378631013025721741744285026537009814161E-1), - L(-6.973895635309960850033762745957946272579E-1), - L(-1.797864718878320770670740413285763554812E-1), - L(-4.098025357743657347681137871388402849581E-3), -}; -#define NP2r7_3r2D 8 -static const _Float128 P2r7_3r2D[NP2r7_3r2D + 1] = { - L(2.726858489303036441686496086962545034018E-6), - L(2.840430827557109238386808968234848081424E-4), - L(1.063826772041781947891481054529454088832E-2), - L(1.864775537138364773178044431045514405468E-1), - L(1.665660052857205170440952607701728254211E0), - L(7.723745889544331153080842168958348568395E0), - L(1.810726427571829798856428548102077799835E1), - L(1.986460672157794440666187503833545388527E1), - L(8.645503204552282306364296517220055815488E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.3e-36 - 0.3125 <= 1/x <= 0.4375 */ -#define NP2r3_2r7N 9 -static const _Float128 P2r3_2r7N[NP2r3_2r7N + 1] = { - L(-1.594642785584856746358609622003310312622E-6), - L(-1.323238196302221554194031733595194539794E-4), - L(-3.856087818696874802689922536987100372345E-3), - L(-5.113241710697777193011470733601522047399E-2), - L(-3.334229537209911914449990372942022350558E-1), - L(-1.075703518198127096179198549659283422832E0), - L(-1.634174803414062725476343124267110981807E0), - L(-1.030133247434119595616826842367268304880E0), - L(-1.989811539080358501229347481000707289391E-1), - L(-3.246859189246653459359775001466924610236E-3), -}; -#define NP2r3_2r7D 8 -static const _Float128 P2r3_2r7D[NP2r3_2r7D + 1] = { - L(2.267936634217251403663034189684284173018E-5), - L(1.918112982168673386858072491437971732237E-3), - L(5.771704085468423159125856786653868219522E-2), - L(8.056124451167969333717642810661498890507E-1), - L(5.687897967531010276788680634413789328776E0), - L(2.072596760717695491085444438270778394421E1), - L(3.801722099819929988585197088613160496684E1), - L(3.254620235902912339534998592085115836829E1), - L(1.104847772130720331801884344645060675036E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.2e-35 - 0.4375 <= 1/x <= 0.5 */ -#define NP2_2r3N 8 -static const _Float128 P2_2r3N[NP2_2r3N + 1] = { - L(-1.001042324337684297465071506097365389123E-4), - L(-6.289034524673365824853547252689991418981E-3), - L(-1.346527918018624234373664526930736205806E-1), - L(-1.268808313614288355444506172560463315102E0), - L(-5.654126123607146048354132115649177406163E0), - L(-1.186649511267312652171775803270911971693E1), - L(-1.094032424931998612551588246779200724257E1), - L(-3.728792136814520055025256353193674625267E0), - L(-3.000348318524471807839934764596331810608E-1), -}; -#define NP2_2r3D 8 -static const _Float128 P2_2r3D[NP2_2r3D + 1] = { - L(1.423705538269770974803901422532055612980E-3), - L(9.171476630091439978533535167485230575894E-2), - L(2.049776318166637248868444600215942828537E0), - L(2.068970329743769804547326701946144899583E1), - L(1.025103500560831035592731539565060347709E2), - L(2.528088049697570728252145557167066708284E2), - L(2.992160327587558573740271294804830114205E2), - L(1.540193761146551025832707739468679973036E2), - L(2.779516701986912132637672140709452502650E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 2.2e-35 - 0 <= 1/x <= .0625 */ -#define NQ16_IN 10 -static const _Float128 Q16_IN[NQ16_IN + 1] = { - L(2.343640834407975740545326632205999437469E-18), - L(2.667978112927811452221176781536278257448E-15), - L(1.178415018484555397390098879501969116536E-12), - L(2.622049767502719728905924701288614016597E-10), - L(3.196908059607618864801313380896308968673E-8), - L(2.179466154171673958770030655199434798494E-6), - L(8.139959091628545225221976413795645177291E-5), - L(1.563900725721039825236927137885747138654E-3), - L(1.355172364265825167113562519307194840307E-2), - L(3.928058355906967977269780046844768588532E-2), - L(1.107891967702173292405380993183694932208E-2), -}; -#define NQ16_ID 9 -static const _Float128 Q16_ID[NQ16_ID + 1] = { - L(3.199850952578356211091219295199301766718E-17), - L(3.652601488020654842194486058637953363918E-14), - L(1.620179741394865258354608590461839031281E-11), - L(3.629359209474609630056463248923684371426E-9), - L(4.473680923894354600193264347733477363305E-7), - L(3.106368086644715743265603656011050476736E-5), - L(1.198239259946770604954664925153424252622E-3), - L(2.446041004004283102372887804475767568272E-2), - L(2.403235525011860603014707768815113698768E-1), - L(9.491006790682158612266270665136910927149E-1), - /* 1.000000000000000000000000000000000000000E0 */ - }; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 5.1e-36 - 0.0625 <= 1/x <= 0.125 */ -#define NQ8_16N 11 -static const _Float128 Q8_16N[NQ8_16N + 1] = { - L(1.001954266485599464105669390693597125904E-17), - L(7.545499865295034556206475956620160007849E-15), - L(2.267838684785673931024792538193202559922E-12), - L(3.561909705814420373609574999542459912419E-10), - L(3.216201422768092505214730633842924944671E-8), - L(1.731194793857907454569364622452058554314E-6), - L(5.576944613034537050396518509871004586039E-5), - L(1.051787760316848982655967052985391418146E-3), - L(1.102852974036687441600678598019883746959E-2), - L(5.834647019292460494254225988766702933571E-2), - L(1.290281921604364618912425380717127576529E-1), - L(7.598886310387075708640370806458926458301E-2), -}; -#define NQ8_16D 11 -static const _Float128 Q8_16D[NQ8_16D + 1] = { - L(1.368001558508338469503329967729951830843E-16), - L(1.034454121857542147020549303317348297289E-13), - L(3.128109209247090744354764050629381674436E-11), - L(4.957795214328501986562102573522064468671E-9), - L(4.537872468606711261992676606899273588899E-7), - L(2.493639207101727713192687060517509774182E-5), - L(8.294957278145328349785532236663051405805E-4), - L(1.646471258966713577374948205279380115839E-2), - L(1.878910092770966718491814497982191447073E-1), - L(1.152641605706170353727903052525652504075E0), - L(3.383550240669773485412333679367792932235E0), - L(3.823875252882035706910024716609908473970E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.9e-35 - 0.125 <= 1/x <= 0.1875 */ -#define NQ5_8N 10 -static const _Float128 Q5_8N[NQ5_8N + 1] = { - L(1.750399094021293722243426623211733898747E-13), - L(6.483426211748008735242909236490115050294E-11), - L(9.279430665656575457141747875716899958373E-9), - L(6.696634968526907231258534757736576340266E-7), - L(2.666560823798895649685231292142838188061E-5), - L(6.025087697259436271271562769707550594540E-4), - L(7.652807734168613251901945778921336353485E-3), - L(5.226269002589406461622551452343519078905E-2), - L(1.748390159751117658969324896330142895079E-1), - L(2.378188719097006494782174902213083589660E-1), - L(8.383984859679804095463699702165659216831E-2), -}; -#define NQ5_8D 10 -static const _Float128 Q5_8D[NQ5_8D + 1] = { - L(2.389878229704327939008104855942987615715E-12), - L(8.926142817142546018703814194987786425099E-10), - L(1.294065862406745901206588525833274399038E-7), - L(9.524139899457666250828752185212769682191E-6), - L(3.908332488377770886091936221573123353489E-4), - L(9.250427033957236609624199884089916836748E-3), - L(1.263420066165922645975830877751588421451E-1), - L(9.692527053860420229711317379861733180654E-1), - L(3.937813834630430172221329298841520707954E0), - L(7.603126427436356534498908111445191312181E0), - L(5.670677653334105479259958485084550934305E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.2e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NQ4_5N 10 -static const _Float128 Q4_5N[NQ4_5N + 1] = { - L(2.233870042925895644234072357400122854086E-11), - L(5.146223225761993222808463878999151699792E-9), - L(4.459114531468296461688753521109797474523E-7), - L(1.891397692931537975547242165291668056276E-5), - L(4.279519145911541776938964806470674565504E-4), - L(5.275239415656560634702073291768904783989E-3), - L(3.468698403240744801278238473898432608887E-2), - L(1.138773146337708415188856882915457888274E-1), - L(1.622717518946443013587108598334636458955E-1), - L(7.249040006390586123760992346453034628227E-2), - L(1.941595365256460232175236758506411486667E-3), -}; -#define NQ4_5D 9 -static const _Float128 Q4_5D[NQ4_5D + 1] = { - L(3.049977232266999249626430127217988047453E-10), - L(7.120883230531035857746096928889676144099E-8), - L(6.301786064753734446784637919554359588859E-6), - L(2.762010530095069598480766869426308077192E-4), - L(6.572163250572867859316828886203406361251E-3), - L(8.752566114841221958200215255461843397776E-2), - L(6.487654992874805093499285311075289932664E-1), - L(2.576550017826654579451615283022812801435E0), - L(5.056392229924022835364779562707348096036E0), - L(4.179770081068251464907531367859072157773E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 1.4e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NQ3r2_4N 10 -static const _Float128 Q3r2_4N[NQ3r2_4N + 1] = { - L(6.126167301024815034423262653066023684411E-10), - L(1.043969327113173261820028225053598975128E-7), - L(6.592927270288697027757438170153763220190E-6), - L(2.009103660938497963095652951912071336730E-4), - L(3.220543385492643525985862356352195896964E-3), - L(2.774405975730545157543417650436941650990E-2), - L(1.258114008023826384487378016636555041129E-1), - L(2.811724258266902502344701449984698323860E-1), - L(2.691837665193548059322831687432415014067E-1), - L(7.949087384900985370683770525312735605034E-2), - L(1.229509543620976530030153018986910810747E-3), -}; -#define NQ3r2_4D 9 -static const _Float128 Q3r2_4D[NQ3r2_4D + 1] = { - L(8.364260446128475461539941389210166156568E-9), - L(1.451301850638956578622154585560759862764E-6), - L(9.431830010924603664244578867057141839463E-5), - L(3.004105101667433434196388593004526182741E-3), - L(5.148157397848271739710011717102773780221E-2), - L(4.901089301726939576055285374953887874895E-1), - L(2.581760991981709901216967665934142240346E0), - L(7.257105880775059281391729708630912791847E0), - L(1.006014717326362868007913423810737369312E1), - L(5.879416600465399514404064187445293212470E0), - /* 1.000000000000000000000000000000000000000E0*/ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.8e-36 - 0.3125 <= 1/x <= 0.375 */ -#define NQ2r7_3r2N 9 -static const _Float128 Q2r7_3r2N[NQ2r7_3r2N + 1] = { - L(7.584861620402450302063691901886141875454E-8), - L(9.300939338814216296064659459966041794591E-6), - L(4.112108906197521696032158235392604947895E-4), - L(8.515168851578898791897038357239630654431E-3), - L(8.971286321017307400142720556749573229058E-2), - L(4.885856732902956303343015636331874194498E-1), - L(1.334506268733103291656253500506406045846E0), - L(1.681207956863028164179042145803851824654E0), - L(8.165042692571721959157677701625853772271E-1), - L(9.805848115375053300608712721986235900715E-2), -}; -#define NQ2r7_3r2D 9 -static const _Float128 Q2r7_3r2D[NQ2r7_3r2D + 1] = { - L(1.035586492113036586458163971239438078160E-6), - L(1.301999337731768381683593636500979713689E-4), - L(5.993695702564527062553071126719088859654E-3), - L(1.321184892887881883489141186815457808785E-1), - L(1.528766555485015021144963194165165083312E0), - L(9.561463309176490874525827051566494939295E0), - L(3.203719484883967351729513662089163356911E1), - L(5.497294687660930446641539152123568668447E1), - L(4.391158169390578768508675452986948391118E1), - L(1.347836630730048077907818943625789418378E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 2.2e-35 - 0.375 <= 1/x <= 0.4375 */ -#define NQ2r3_2r7N 9 -static const _Float128 Q2r3_2r7N[NQ2r3_2r7N + 1] = { - L(4.455027774980750211349941766420190722088E-7), - L(4.031998274578520170631601850866780366466E-5), - L(1.273987274325947007856695677491340636339E-3), - L(1.818754543377448509897226554179659122873E-2), - L(1.266748858326568264126353051352269875352E-1), - L(4.327578594728723821137731555139472880414E-1), - L(6.892532471436503074928194969154192615359E-1), - L(4.490775818438716873422163588640262036506E-1), - L(8.649615949297322440032000346117031581572E-2), - L(7.261345286655345047417257611469066147561E-4), -}; -#define NQ2r3_2r7D 8 -static const _Float128 Q2r3_2r7D[NQ2r3_2r7D + 1] = { - L(6.082600739680555266312417978064954793142E-6), - L(5.693622538165494742945717226571441747567E-4), - L(1.901625907009092204458328768129666975975E-2), - L(2.958689532697857335456896889409923371570E-1), - L(2.343124711045660081603809437993368799568E0), - L(9.665894032187458293568704885528192804376E0), - L(2.035273104990617136065743426322454881353E1), - L(2.044102010478792896815088858740075165531E1), - L(8.445937177863155827844146643468706599304E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.1e-36 - 0.4375 <= 1/x <= 0.5 */ -#define NQ2_2r3N 9 -static const _Float128 Q2_2r3N[NQ2_2r3N + 1] = { - L(2.817566786579768804844367382809101929314E-6), - L(2.122772176396691634147024348373539744935E-4), - L(5.501378031780457828919593905395747517585E-3), - L(6.355374424341762686099147452020466524659E-2), - L(3.539652320122661637429658698954748337223E-1), - L(9.571721066119617436343740541777014319695E-1), - L(1.196258777828426399432550698612171955305E0), - L(6.069388659458926158392384709893753793967E-1), - L(9.026746127269713176512359976978248763621E-2), - L(5.317668723070450235320878117210807236375E-4), -}; -#define NQ2_2r3D 8 -static const _Float128 Q2_2r3D[NQ2_2r3D + 1] = { - L(3.846924354014260866793741072933159380158E-5), - L(3.017562820057704325510067178327449946763E-3), - L(8.356305620686867949798885808540444210935E-2), - L(1.068314930499906838814019619594424586273E0), - L(6.900279623894821067017966573640732685233E0), - L(2.307667390886377924509090271780839563141E1), - L(3.921043465412723970791036825401273528513E1), - L(3.167569478939719383241775717095729233436E1), - L(1.051023841699200920276198346301543665909E1), - /* 1.000000000000000000000000000000000000000E0*/ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Bessel function of the first kind, order zero. */ - -_Float128 -__ieee754_j0l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - { - if (x != x) - return x + x; - else - return 0; - } - if (x == 0) - return 1; - - xx = fabsl (x); - if (xx <= 2) - { - if (xx < L(0x1p-57)) - return 1; - /* 0 <= x <= 2 */ - z = xx * xx; - p = z * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); - p -= L(0.25) * z; - p += 1; - return p; - } - - /* X = x - pi/4 - cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) - = 1/sqrt(2) * (cos(x) + sin(x)) - sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) - = 1/sqrt(2) * (sin(x) - cos(x)) - sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = s - c; - cc = s + c; - if (xx <= LDBL_MAX / 2) - { - z = -__cosl (xx + xx); - if ((s * c) < 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * cc / __ieee754_sqrtl (xx); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * xinv * q; - q = q - L(0.125) * xinv; - z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); - return z; -} -strong_alias (__ieee754_j0l, __j0l_finite) - - -/* Y0(x) = 2/pi * log(x) * J0(x) + R(x^2) - Peak absolute error 1.7e-36 (relative where Y0 > 1) - 0 <= x <= 2 */ -#define NY0_2N 7 -static _Float128 Y0_2N[NY0_2N + 1] = { - L(-1.062023609591350692692296993537002558155E19), - L(2.542000883190248639104127452714966858866E19), - L(-1.984190771278515324281415820316054696545E18), - L(4.982586044371592942465373274440222033891E16), - L(-5.529326354780295177243773419090123407550E14), - L(3.013431465522152289279088265336861140391E12), - L(-7.959436160727126750732203098982718347785E9), - L(8.230845651379566339707130644134372793322E6), -}; -#define NY0_2D 7 -static _Float128 Y0_2D[NY0_2D + 1] = { - L(1.438972634353286978700329883122253752192E20), - L(1.856409101981569254247700169486907405500E18), - L(1.219693352678218589553725579802986255614E16), - L(5.389428943282838648918475915779958097958E13), - L(1.774125762108874864433872173544743051653E11), - L(4.522104832545149534808218252434693007036E8), - L(8.872187401232943927082914504125234454930E5), - L(1.251945613186787532055610876304669413955E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -static const _Float128 U0 = L(-7.3804295108687225274343927948483016310862e-02); - -/* Bessel function of the second kind, order zero. */ - -_Float128 - __ieee754_y0l(_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - return 1 / (x + x * x); - if (x <= 0) - { - if (x < 0) - return (zero / (zero * x)); - return -1 / zero; /* -inf and divide by zero exception. */ - } - xx = fabsl (x); - if (xx <= 0x1p-57) - return U0 + TWOOPI * __ieee754_logl (x); - if (xx <= 2) - { - /* 0 <= x <= 2 */ - z = xx * xx; - p = neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); - p = TWOOPI * __ieee754_logl (x) * __ieee754_j0l (x) + p; - return p; - } - - /* X = x - pi/4 - cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) - = 1/sqrt(2) * (cos(x) + sin(x)) - sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) - = 1/sqrt(2) * (sin(x) - cos(x)) - sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - cf. Fdlibm. */ - __sincosl (x, &s, &c); - ss = s - c; - cc = s + c; - if (xx <= LDBL_MAX / 2) - { - z = -__cosl (x + x); - if ((s * c) < 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * ss / __ieee754_sqrtl (x); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * xinv * q; - q = q - L(0.125) * xinv; - z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (x); - return z; -} -strong_alias (__ieee754_y0l, __y0l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c deleted file mode 100644 index 6fc69faa3c..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_j1l.c +++ /dev/null @@ -1,961 +0,0 @@ -/* j1l.c - * - * Bessel function of order one - * - * - * - * SYNOPSIS: - * - * long double x, y, j1l(); - * - * y = j1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of first kind, order one of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation is - * J1(x) = .5x + x x^2 R(x^2) - * - * The second interval is further partitioned into eight equal segments - * of 1/x. - * J1(x) = sqrt(2/(pi x)) (P1(x) cos(X) - Q1(x) sin(X)), - * X = x - 3 pi / 4, - * - * and the auxiliary functions are given by - * - * J1(x)cos(X) + Y1(x)sin(X) = sqrt( 2/(pi x)) P1(x), - * P1(x) = 1 + 1/x^2 R(1/x^2) - * - * Y1(x)cos(X) - J1(x)sin(X) = sqrt( 2/(pi x)) Q1(x), - * Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)). - * - * - * - * ACCURACY: - * - * Absolute error: - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 2.8e-34 2.7e-35 - * - * - */ - -/* y1l.c - * - * Bessel function of the second kind, order one - * - * - * - * SYNOPSIS: - * - * double x, y, y1l(); - * - * y = y1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of the second kind, of order - * one, of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation is - * Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2) . - * In the second interval the approximation is the same as for J1(x), and - * Y1(x) = sqrt(2/(pi x)) (P1(x) sin(X) + Q1(x) cos(X)), - * X = x - 3 pi / 4. - * - * ACCURACY: - * - * Absolute error, when y0(x) < 1; else relative error: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 2.7e-34 2.9e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier (moshier@na-net.onrl.gov). - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include -#include - -/* 1 / sqrt(pi) */ -static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1); -/* 2 / pi */ -static const _Float128 TWOOPI = L(6.3661977236758134307553505349005744813784E-1); -static const _Float128 zero = 0; - -/* J1(x) = .5x + x x^2 R(x^2) - Peak relative error 1.9e-35 - 0 <= x <= 2 */ -#define NJ0_2N 6 -static const _Float128 J0_2N[NJ0_2N + 1] = { - L(-5.943799577386942855938508697619735179660E16), - L(1.812087021305009192259946997014044074711E15), - L(-2.761698314264509665075127515729146460895E13), - L(2.091089497823600978949389109350658815972E11), - L(-8.546413231387036372945453565654130054307E8), - L(1.797229225249742247475464052741320612261E6), - L(-1.559552840946694171346552770008812083969E3) -}; -#define NJ0_2D 6 -static const _Float128 J0_2D[NJ0_2D + 1] = { - L(9.510079323819108569501613916191477479397E17), - L(1.063193817503280529676423936545854693915E16), - L(5.934143516050192600795972192791775226920E13), - L(2.168000911950620999091479265214368352883E11), - L(5.673775894803172808323058205986256928794E8), - L(1.080329960080981204840966206372671147224E6), - L(1.411951256636576283942477881535283304912E3), - /* 1.000000000000000000000000000000000000000E0L */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0 <= 1/x <= .0625 - Peak relative error 3.6e-36 */ -#define NP16_IN 9 -static const _Float128 P16_IN[NP16_IN + 1] = { - L(5.143674369359646114999545149085139822905E-16), - L(4.836645664124562546056389268546233577376E-13), - L(1.730945562285804805325011561498453013673E-10), - L(3.047976856147077889834905908605310585810E-8), - L(2.855227609107969710407464739188141162386E-6), - L(1.439362407936705484122143713643023998457E-4), - L(3.774489768532936551500999699815873422073E-3), - L(4.723962172984642566142399678920790598426E-2), - L(2.359289678988743939925017240478818248735E-1), - L(3.032580002220628812728954785118117124520E-1), -}; -#define NP16_ID 9 -static const _Float128 P16_ID[NP16_ID + 1] = { - L(4.389268795186898018132945193912677177553E-15), - L(4.132671824807454334388868363256830961655E-12), - L(1.482133328179508835835963635130894413136E-9), - L(2.618941412861122118906353737117067376236E-7), - L(2.467854246740858470815714426201888034270E-5), - L(1.257192927368839847825938545925340230490E-3), - L(3.362739031941574274949719324644120720341E-2), - L(4.384458231338934105875343439265370178858E-1), - L(2.412830809841095249170909628197264854651E0), - L(4.176078204111348059102962617368214856874E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0.0625 <= 1/x <= 0.125 - Peak relative error 1.9e-36 */ -#define NP8_16N 11 -static const _Float128 P8_16N[NP8_16N + 1] = { - L(2.984612480763362345647303274082071598135E-16), - L(1.923651877544126103941232173085475682334E-13), - L(4.881258879388869396043760693256024307743E-11), - L(6.368866572475045408480898921866869811889E-9), - L(4.684818344104910450523906967821090796737E-7), - L(2.005177298271593587095982211091300382796E-5), - L(4.979808067163957634120681477207147536182E-4), - L(6.946005761642579085284689047091173581127E-3), - L(5.074601112955765012750207555985299026204E-2), - L(1.698599455896180893191766195194231825379E-1), - L(1.957536905259237627737222775573623779638E-1), - L(2.991314703282528370270179989044994319374E-2), -}; -#define NP8_16D 10 -static const _Float128 P8_16D[NP8_16D + 1] = { - L(2.546869316918069202079580939942463010937E-15), - L(1.644650111942455804019788382157745229955E-12), - L(4.185430770291694079925607420808011147173E-10), - L(5.485331966975218025368698195861074143153E-8), - L(4.062884421686912042335466327098932678905E-6), - L(1.758139661060905948870523641319556816772E-4), - L(4.445143889306356207566032244985607493096E-3), - L(6.391901016293512632765621532571159071158E-2), - L(4.933040207519900471177016015718145795434E-1), - L(1.839144086168947712971630337250761842976E0), - L(2.715120873995490920415616716916149586579E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0.125 <= 1/x <= 0.1875 - Peak relative error 1.3e-36 */ -#define NP5_8N 10 -static const _Float128 P5_8N[NP5_8N + 1] = { - L(2.837678373978003452653763806968237227234E-12), - L(9.726641165590364928442128579282742354806E-10), - L(1.284408003604131382028112171490633956539E-7), - L(8.524624695868291291250573339272194285008E-6), - L(3.111516908953172249853673787748841282846E-4), - L(6.423175156126364104172801983096596409176E-3), - L(7.430220589989104581004416356260692450652E-2), - L(4.608315409833682489016656279567605536619E-1), - L(1.396870223510964882676225042258855977512E0), - L(1.718500293904122365894630460672081526236E0), - L(5.465927698800862172307352821870223855365E-1) -}; -#define NP5_8D 10 -static const _Float128 P5_8D[NP5_8D + 1] = { - L(2.421485545794616609951168511612060482715E-11), - L(8.329862750896452929030058039752327232310E-9), - L(1.106137992233383429630592081375289010720E-6), - L(7.405786153760681090127497796448503306939E-5), - L(2.740364785433195322492093333127633465227E-3), - L(5.781246470403095224872243564165254652198E-2), - L(6.927711353039742469918754111511109983546E-1), - L(4.558679283460430281188304515922826156690E0), - L(1.534468499844879487013168065728837900009E1), - L(2.313927430889218597919624843161569422745E1), - L(1.194506341319498844336768473218382828637E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.4e-36 - 0.1875 <= 1/x <= 0.25 */ -#define NP4_5N 10 -static const _Float128 P4_5N[NP4_5N + 1] = { - L(1.846029078268368685834261260420933914621E-10), - L(3.916295939611376119377869680335444207768E-8), - L(3.122158792018920627984597530935323997312E-6), - L(1.218073444893078303994045653603392272450E-4), - L(2.536420827983485448140477159977981844883E-3), - L(2.883011322006690823959367922241169171315E-2), - L(1.755255190734902907438042414495469810830E-1), - L(5.379317079922628599870898285488723736599E-1), - L(7.284904050194300773890303361501726561938E-1), - L(3.270110346613085348094396323925000362813E-1), - L(1.804473805689725610052078464951722064757E-2), -}; -#define NP4_5D 9 -static const _Float128 P4_5D[NP4_5D + 1] = { - L(1.575278146806816970152174364308980863569E-9), - L(3.361289173657099516191331123405675054321E-7), - L(2.704692281550877810424745289838790693708E-5), - L(1.070854930483999749316546199273521063543E-3), - L(2.282373093495295842598097265627962125411E-2), - L(2.692025460665354148328762368240343249830E-1), - L(1.739892942593664447220951225734811133759E0), - L(5.890727576752230385342377570386657229324E0), - L(9.517442287057841500750256954117735128153E0), - L(6.100616353935338240775363403030137736013E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 3.0e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NP3r2_4N 9 -static const _Float128 P3r2_4N[NP3r2_4N + 1] = { - L(8.240803130988044478595580300846665863782E-8), - L(1.179418958381961224222969866406483744580E-5), - L(6.179787320956386624336959112503824397755E-4), - L(1.540270833608687596420595830747166658383E-2), - L(1.983904219491512618376375619598837355076E-1), - L(1.341465722692038870390470651608301155565E0), - L(4.617865326696612898792238245990854646057E0), - L(7.435574801812346424460233180412308000587E0), - L(4.671327027414635292514599201278557680420E0), - L(7.299530852495776936690976966995187714739E-1), -}; -#define NP3r2_4D 9 -static const _Float128 P3r2_4D[NP3r2_4D + 1] = { - L(7.032152009675729604487575753279187576521E-7), - L(1.015090352324577615777511269928856742848E-4), - L(5.394262184808448484302067955186308730620E-3), - L(1.375291438480256110455809354836988584325E-1), - L(1.836247144461106304788160919310404376670E0), - L(1.314378564254376655001094503090935880349E1), - L(4.957184590465712006934452500894672343488E1), - L(9.287394244300647738855415178790263465398E1), - L(7.652563275535900609085229286020552768399E1), - L(2.147042473003074533150718117770093209096E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.0e-35 - 0.3125 <= 1/x <= 0.375 */ -#define NP2r7_3r2N 9 -static const _Float128 P2r7_3r2N[NP2r7_3r2N + 1] = { - L(4.599033469240421554219816935160627085991E-7), - L(4.665724440345003914596647144630893997284E-5), - L(1.684348845667764271596142716944374892756E-3), - L(2.802446446884455707845985913454440176223E-2), - L(2.321937586453963310008279956042545173930E-1), - L(9.640277413988055668692438709376437553804E-1), - L(1.911021064710270904508663334033003246028E0), - L(1.600811610164341450262992138893970224971E0), - L(4.266299218652587901171386591543457861138E-1), - L(1.316470424456061252962568223251247207325E-2), -}; -#define NP2r7_3r2D 8 -static const _Float128 P2r7_3r2D[NP2r7_3r2D + 1] = { - L(3.924508608545520758883457108453520099610E-6), - L(4.029707889408829273226495756222078039823E-4), - L(1.484629715787703260797886463307469600219E-2), - L(2.553136379967180865331706538897231588685E-1), - L(2.229457223891676394409880026887106228740E0), - L(1.005708903856384091956550845198392117318E1), - L(2.277082659664386953166629360352385889558E1), - L(2.384726835193630788249826630376533988245E1), - L(9.700989749041320895890113781610939632410E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.7e-36 - 0.3125 <= 1/x <= 0.4375 */ -#define NP2r3_2r7N 9 -static const _Float128 P2r3_2r7N[NP2r3_2r7N + 1] = { - L(3.916766777108274628543759603786857387402E-6), - L(3.212176636756546217390661984304645137013E-4), - L(9.255768488524816445220126081207248947118E-3), - L(1.214853146369078277453080641911700735354E-1), - L(7.855163309847214136198449861311404633665E-1), - L(2.520058073282978403655488662066019816540E0), - L(3.825136484837545257209234285382183711466E0), - L(2.432569427554248006229715163865569506873E0), - L(4.877934835018231178495030117729800489743E-1), - L(1.109902737860249670981355149101343427885E-2), -}; -#define NP2r3_2r7D 8 -static const _Float128 P2r3_2r7D[NP2r3_2r7D + 1] = { - L(3.342307880794065640312646341190547184461E-5), - L(2.782182891138893201544978009012096558265E-3), - L(8.221304931614200702142049236141249929207E-2), - L(1.123728246291165812392918571987858010949E0), - L(7.740482453652715577233858317133423434590E0), - L(2.737624677567945952953322566311201919139E1), - L(4.837181477096062403118304137851260715475E1), - L(3.941098643468580791437772701093795299274E1), - L(1.245821247166544627558323920382547533630E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.7e-35 - 0.4375 <= 1/x <= 0.5 */ -#define NP2_2r3N 8 -static const _Float128 P2_2r3N[NP2_2r3N + 1] = { - L(3.397930802851248553545191160608731940751E-4), - L(2.104020902735482418784312825637833698217E-2), - L(4.442291771608095963935342749477836181939E-1), - L(4.131797328716583282869183304291833754967E0), - L(1.819920169779026500146134832455189917589E1), - L(3.781779616522937565300309684282401791291E1), - L(3.459605449728864218972931220783543410347E1), - L(1.173594248397603882049066603238568316561E1), - L(9.455702270242780642835086549285560316461E-1), -}; -#define NP2_2r3D 8 -static const _Float128 P2_2r3D[NP2_2r3D + 1] = { - L(2.899568897241432883079888249845707400614E-3), - L(1.831107138190848460767699919531132426356E-1), - L(3.999350044057883839080258832758908825165E0), - L(3.929041535867957938340569419874195303712E1), - L(1.884245613422523323068802689915538908291E2), - L(4.461469948819229734353852978424629815929E2), - L(5.004998753999796821224085972610636347903E2), - L(2.386342520092608513170837883757163414100E2), - L(3.791322528149347975999851588922424189957E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 8.0e-36 - 0 <= 1/x <= .0625 */ -#define NQ16_IN 10 -static const _Float128 Q16_IN[NQ16_IN + 1] = { - L(-3.917420835712508001321875734030357393421E-18), - L(-4.440311387483014485304387406538069930457E-15), - L(-1.951635424076926487780929645954007139616E-12), - L(-4.318256438421012555040546775651612810513E-10), - L(-5.231244131926180765270446557146989238020E-8), - L(-3.540072702902043752460711989234732357653E-6), - L(-1.311017536555269966928228052917534882984E-4), - L(-2.495184669674631806622008769674827575088E-3), - L(-2.141868222987209028118086708697998506716E-2), - L(-6.184031415202148901863605871197272650090E-2), - L(-1.922298704033332356899546792898156493887E-2), -}; -#define NQ16_ID 9 -static const _Float128 Q16_ID[NQ16_ID + 1] = { - L(3.820418034066293517479619763498400162314E-17), - L(4.340702810799239909648911373329149354911E-14), - L(1.914985356383416140706179933075303538524E-11), - L(4.262333682610888819476498617261895474330E-9), - L(5.213481314722233980346462747902942182792E-7), - L(3.585741697694069399299005316809954590558E-5), - L(1.366513429642842006385029778105539457546E-3), - L(2.745282599850704662726337474371355160594E-2), - L(2.637644521611867647651200098449903330074E-1), - L(1.006953426110765984590782655598680488746E0), - /* 1.000000000000000000000000000000000000000E0 */ - }; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.9e-36 - 0.0625 <= 1/x <= 0.125 */ -#define NQ8_16N 11 -static const _Float128 Q8_16N[NQ8_16N + 1] = { - L(-2.028630366670228670781362543615221542291E-17), - L(-1.519634620380959966438130374006858864624E-14), - L(-4.540596528116104986388796594639405114524E-12), - L(-7.085151756671466559280490913558388648274E-10), - L(-6.351062671323970823761883833531546885452E-8), - L(-3.390817171111032905297982523519503522491E-6), - L(-1.082340897018886970282138836861233213972E-4), - L(-2.020120801187226444822977006648252379508E-3), - L(-2.093169910981725694937457070649605557555E-2), - L(-1.092176538874275712359269481414448063393E-1), - L(-2.374790947854765809203590474789108718733E-1), - L(-1.365364204556573800719985118029601401323E-1), -}; -#define NQ8_16D 11 -static const _Float128 Q8_16D[NQ8_16D + 1] = { - L(1.978397614733632533581207058069628242280E-16), - L(1.487361156806202736877009608336766720560E-13), - L(4.468041406888412086042576067133365913456E-11), - L(7.027822074821007443672290507210594648877E-9), - L(6.375740580686101224127290062867976007374E-7), - L(3.466887658320002225888644977076410421940E-5), - L(1.138625640905289601186353909213719596986E-3), - L(2.224470799470414663443449818235008486439E-2), - L(2.487052928527244907490589787691478482358E-1), - L(1.483927406564349124649083853892380899217E0), - L(4.182773513276056975777258788903489507705E0), - L(4.419665392573449746043880892524360870944E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.5e-35 - 0.125 <= 1/x <= 0.1875 */ -#define NQ5_8N 10 -static const _Float128 Q5_8N[NQ5_8N + 1] = { - L(-3.656082407740970534915918390488336879763E-13), - L(-1.344660308497244804752334556734121771023E-10), - L(-1.909765035234071738548629788698150760791E-8), - L(-1.366668038160120210269389551283666716453E-6), - L(-5.392327355984269366895210704976314135683E-5), - L(-1.206268245713024564674432357634540343884E-3), - L(-1.515456784370354374066417703736088291287E-2), - L(-1.022454301137286306933217746545237098518E-1), - L(-3.373438906472495080504907858424251082240E-1), - L(-4.510782522110845697262323973549178453405E-1), - L(-1.549000892545288676809660828213589804884E-1), -}; -#define NQ5_8D 10 -static const _Float128 Q5_8D[NQ5_8D + 1] = { - L(3.565550843359501079050699598913828460036E-12), - L(1.321016015556560621591847454285330528045E-9), - L(1.897542728662346479999969679234270605975E-7), - L(1.381720283068706710298734234287456219474E-5), - L(5.599248147286524662305325795203422873725E-4), - L(1.305442352653121436697064782499122164843E-2), - L(1.750234079626943298160445750078631894985E-1), - L(1.311420542073436520965439883806946678491E0), - L(5.162757689856842406744504211089724926650E0), - L(9.527760296384704425618556332087850581308E0), - L(6.604648207463236667912921642545100248584E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.3e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NQ4_5N 10 -static const _Float128 Q4_5N[NQ4_5N + 1] = { - L(-4.079513568708891749424783046520200903755E-11), - L(-9.326548104106791766891812583019664893311E-9), - L(-8.016795121318423066292906123815687003356E-7), - L(-3.372350544043594415609295225664186750995E-5), - L(-7.566238665947967882207277686375417983917E-4), - L(-9.248861580055565402130441618521591282617E-3), - L(-6.033106131055851432267702948850231270338E-2), - L(-1.966908754799996793730369265431584303447E-1), - L(-2.791062741179964150755788226623462207560E-1), - L(-1.255478605849190549914610121863534191666E-1), - L(-4.320429862021265463213168186061696944062E-3), -}; -#define NQ4_5D 9 -static const _Float128 Q4_5D[NQ4_5D + 1] = { - L(3.978497042580921479003851216297330701056E-10), - L(9.203304163828145809278568906420772246666E-8), - L(8.059685467088175644915010485174545743798E-6), - L(3.490187375993956409171098277561669167446E-4), - L(8.189109654456872150100501732073810028829E-3), - L(1.072572867311023640958725265762483033769E-1), - L(7.790606862409960053675717185714576937994E-1), - L(3.016049768232011196434185423512777656328E0), - L(5.722963851442769787733717162314477949360E0), - L(4.510527838428473279647251350931380867663E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 2.1e-35 - 0.25 <= 1/x <= 0.3125 */ -#define NQ3r2_4N 9 -static const _Float128 Q3r2_4N[NQ3r2_4N + 1] = { - L(-1.087480809271383885936921889040388133627E-8), - L(-1.690067828697463740906962973479310170932E-6), - L(-9.608064416995105532790745641974762550982E-5), - L(-2.594198839156517191858208513873961837410E-3), - L(-3.610954144421543968160459863048062977822E-2), - L(-2.629866798251843212210482269563961685666E-1), - L(-9.709186825881775885917984975685752956660E-1), - L(-1.667521829918185121727268867619982417317E0), - L(-1.109255082925540057138766105229900943501E0), - L(-1.812932453006641348145049323713469043328E-1), -}; -#define NQ3r2_4D 9 -static const _Float128 Q3r2_4D[NQ3r2_4D + 1] = { - L(1.060552717496912381388763753841473407026E-7), - L(1.676928002024920520786883649102388708024E-5), - L(9.803481712245420839301400601140812255737E-4), - L(2.765559874262309494758505158089249012930E-2), - L(4.117921827792571791298862613287549140706E-1), - L(3.323769515244751267093378361930279161413E0), - L(1.436602494405814164724810151689705353670E1), - L(3.163087869617098638064881410646782408297E1), - L(3.198181264977021649489103980298349589419E1), - L(1.203649258862068431199471076202897823272E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.6e-36 - 0.3125 <= 1/x <= 0.375 */ -#define NQ2r7_3r2N 9 -static const _Float128 Q2r7_3r2N[NQ2r7_3r2N + 1] = { - L(-1.723405393982209853244278760171643219530E-7), - L(-2.090508758514655456365709712333460087442E-5), - L(-9.140104013370974823232873472192719263019E-4), - L(-1.871349499990714843332742160292474780128E-2), - L(-1.948930738119938669637865956162512983416E-1), - L(-1.048764684978978127908439526343174139788E0), - L(-2.827714929925679500237476105843643064698E0), - L(-3.508761569156476114276988181329773987314E0), - L(-1.669332202790211090973255098624488308989E0), - L(-1.930796319299022954013840684651016077770E-1), -}; -#define NQ2r7_3r2D 9 -static const _Float128 Q2r7_3r2D[NQ2r7_3r2D + 1] = { - L(1.680730662300831976234547482334347983474E-6), - L(2.084241442440551016475972218719621841120E-4), - L(9.445316642108367479043541702688736295579E-3), - L(2.044637889456631896650179477133252184672E-1), - L(2.316091982244297350829522534435350078205E0), - L(1.412031891783015085196708811890448488865E1), - L(4.583830154673223384837091077279595496149E1), - L(7.549520609270909439885998474045974122261E1), - L(5.697605832808113367197494052388203310638E1), - L(1.601496240876192444526383314589371686234E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 9.5e-36 - 0.375 <= 1/x <= 0.4375 */ -#define NQ2r3_2r7N 9 -static const _Float128 Q2r3_2r7N[NQ2r3_2r7N + 1] = { - L(-8.603042076329122085722385914954878953775E-7), - L(-7.701746260451647874214968882605186675720E-5), - L(-2.407932004380727587382493696877569654271E-3), - L(-3.403434217607634279028110636919987224188E-2), - L(-2.348707332185238159192422084985713102877E-1), - L(-7.957498841538254916147095255700637463207E-1), - L(-1.258469078442635106431098063707934348577E0), - L(-8.162415474676345812459353639449971369890E-1), - L(-1.581783890269379690141513949609572806898E-1), - L(-1.890595651683552228232308756569450822905E-3), -}; -#define NQ2r3_2r7D 8 -static const _Float128 Q2r3_2r7D[NQ2r3_2r7D + 1] = { - L(8.390017524798316921170710533381568175665E-6), - L(7.738148683730826286477254659973968763659E-4), - L(2.541480810958665794368759558791634341779E-2), - L(3.878879789711276799058486068562386244873E-1), - L(3.003783779325811292142957336802456109333E0), - L(1.206480374773322029883039064575464497400E1), - L(2.458414064785315978408974662900438351782E1), - L(2.367237826273668567199042088835448715228E1), - L(9.231451197519171090875569102116321676763E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.4e-36 - 0.4375 <= 1/x <= 0.5 */ -#define NQ2_2r3N 9 -static const _Float128 Q2_2r3N[NQ2_2r3N + 1] = { - L(-5.552507516089087822166822364590806076174E-6), - L(-4.135067659799500521040944087433752970297E-4), - L(-1.059928728869218962607068840646564457980E-2), - L(-1.212070036005832342565792241385459023801E-1), - L(-6.688350110633603958684302153362735625156E-1), - L(-1.793587878197360221340277951304429821582E0), - L(-2.225407682237197485644647380483725045326E0), - L(-1.123402135458940189438898496348239744403E0), - L(-1.679187241566347077204805190763597299805E-1), - L(-1.458550613639093752909985189067233504148E-3), -}; -#define NQ2_2r3D 8 -static const _Float128 Q2_2r3D[NQ2_2r3D + 1] = { - L(5.415024336507980465169023996403597916115E-5), - L(4.179246497380453022046357404266022870788E-3), - L(1.136306384261959483095442402929502368598E-1), - L(1.422640343719842213484515445393284072830E0), - L(8.968786703393158374728850922289204805764E0), - L(2.914542473339246127533384118781216495934E1), - L(4.781605421020380669870197378210457054685E1), - L(3.693865837171883152382820584714795072937E1), - L(1.153220502744204904763115556224395893076E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Bessel function of the first kind, order one. */ - -_Float128 -__ieee754_j1l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - { - if (x != x) - return x + x; - else - return 0; - } - if (x == 0) - return x; - xx = fabsl (x); - if (xx <= L(0x1p-58)) - { - _Float128 ret = x * L(0.5); - math_check_force_underflow (ret); - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - if (xx <= 2) - { - /* 0 <= x <= 2 */ - z = xx * xx; - p = xx * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); - p += L(0.5) * xx; - if (x < 0) - p = -p; - return p; - } - - /* X = x - 3 pi/4 - cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) - = 1/sqrt(2) * (-cos(x) + sin(x)) - sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) - = -1/sqrt(2) * (sin(x) + cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = -s - c; - cc = s - c; - if (xx <= LDBL_MAX / 2) - { - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - { - z = ONEOSQPI * cc / __ieee754_sqrtl (xx); - if (x < 0) - z = -z; - return z; - } - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * q; - q = q * xinv + L(0.375) * xinv; - z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); - if (x < 0) - z = -z; - return z; -} -strong_alias (__ieee754_j1l, __j1l_finite) - - -/* Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2) - Peak relative error 6.2e-38 - 0 <= x <= 2 */ -#define NY0_2N 7 -static _Float128 Y0_2N[NY0_2N + 1] = { - L(-6.804415404830253804408698161694720833249E19), - L(1.805450517967019908027153056150465849237E19), - L(-8.065747497063694098810419456383006737312E17), - L(1.401336667383028259295830955439028236299E16), - L(-1.171654432898137585000399489686629680230E14), - L(5.061267920943853732895341125243428129150E11), - L(-1.096677850566094204586208610960870217970E9), - L(9.541172044989995856117187515882879304461E5), -}; -#define NY0_2D 7 -static _Float128 Y0_2D[NY0_2D + 1] = { - L(3.470629591820267059538637461549677594549E20), - L(4.120796439009916326855848107545425217219E18), - L(2.477653371652018249749350657387030814542E16), - L(9.954678543353888958177169349272167762797E13), - L(2.957927997613630118216218290262851197754E11), - L(6.748421382188864486018861197614025972118E8), - L(1.173453425218010888004562071020305709319E6), - L(1.450335662961034949894009554536003377187E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - - -/* Bessel function of the second kind, order one. */ - -_Float128 -__ieee754_y1l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - return 1 / (x + x * x); - if (x <= 0) - { - if (x < 0) - return (zero / (zero * x)); - return -1 / zero; /* -inf and divide by zero exception. */ - } - xx = fabsl (x); - if (xx <= 0x1p-114) - { - z = -TWOOPI / x; - if (isinf (z)) - __set_errno (ERANGE); - return z; - } - if (xx <= 2) - { - /* 0 <= x <= 2 */ - SET_RESTORE_ROUNDL (FE_TONEAREST); - z = xx * xx; - p = xx * neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); - p = -TWOOPI / xx + p; - p = TWOOPI * __ieee754_logl (x) * __ieee754_j1l (x) + p; - return p; - } - - /* X = x - 3 pi/4 - cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) - = 1/sqrt(2) * (-cos(x) + sin(x)) - sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) - = -1/sqrt(2) * (sin(x) + cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = -s - c; - cc = s - c; - if (xx <= LDBL_MAX / 2) - { - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * ss / __ieee754_sqrtl (xx); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * q; - q = q * xinv + L(0.375) * xinv; - z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (xx); - return z; -} -strong_alias (__ieee754_y1l, __y1l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_jnl.c b/sysdeps/ieee754/ldbl-128/e_jnl.c deleted file mode 100644 index 470631e600..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_jnl.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* - * __ieee754_jn(n, x), __ieee754_yn(n, x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include -#include -#include -#include - -static const _Float128 - invsqrtpi = L(5.6418958354775628694807945156077258584405E-1), - two = 2, - one = 1, - zero = 0; - - -_Float128 -__ieee754_jnl (int n, _Float128 x) -{ - u_int32_t se; - int32_t i, ix, sgn; - _Float128 a, b, temp, di, ret; - _Float128 z, w; - ieee854_long_double_shape_type u; - - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - - u.value = x; - se = u.parts32.w0; - ix = se & 0x7fffffff; - - /* if J(n,NaN) is NaN */ - if (ix >= 0x7fff0000) - { - if ((u.parts32.w0 & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) - return x + x; - } - - if (n < 0) - { - n = -n; - x = -x; - se ^= 0x80000000; - } - if (n == 0) - return (__ieee754_j0l (x)); - if (n == 1) - return (__ieee754_j1l (x)); - sgn = (n & 1) & (se >> 31); /* even n -- 0, odd n -- sign(x) */ - x = fabsl (x); - - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x == 0 || ix >= 0x7fff0000) /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if ((_Float128) n <= x) - { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - if (ix >= 0x412D0000) - { /* x > 2**302 */ - - /* ??? Could use an expansion for large x here. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - _Float128 s; - _Float128 c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = c + s; - break; - case 1: - temp = -c + s; - break; - case 2: - temp = -c - s; - break; - case 3: - temp = c - s; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_j0l (x); - b = __ieee754_j1l (x); - for (i = 1; i < n; i++) - { - temp = b; - b = b * ((_Float128) (i + i) / x) - a; /* avoid underflow */ - a = temp; - } - } - } - else - { - if (ix < 0x3fc60000) - { /* x < 2**-57 */ - /* x is tiny, return the first Taylor expansion of J(n,x) - * J(n,x) = 1/n!*(x/2)^n - ... - */ - if (n >= 400) /* underflow, result < 10^-4952 */ - b = zero; - else - { - temp = x * 0.5; - b = temp; - for (a = one, i = 2; i <= n; i++) - { - a *= (_Float128) i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b / a; - } - } - else - { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - _Float128 t, v; - _Float128 q0, q1, h, tmp; - int32_t k, m; - w = (n + n) / (_Float128) x; - h = 2 / (_Float128) x; - q0 = w; - z = w + h; - q1 = w * z - 1; - k = 1; - while (q1 < L(1.0e17)) - { - k += 1; - z += h; - tmp = z * q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n + n; - for (t = zero, i = 2 * (n + k); i >= m; i -= 2) - t = one / (i / x - t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two / x; - tmp = tmp * __ieee754_logl (fabsl (v * tmp)); - - if (tmp < L(1.1356523406294143949491931077970765006170e+04)) - { - for (i = n - 1, di = (_Float128) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - } - } - else - { - for (i = n - 1, di = (_Float128) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if (b > L(1e100)) - { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0l (x); - w = __ieee754_j1l (x); - if (fabsl (z) >= fabsl (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if (sgn == 1) - ret = -b; - else - ret = b; - } - if (ret == 0) - { - ret = __copysignl (LDBL_MIN, ret) * LDBL_MIN; - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jnl, __jnl_finite) - -_Float128 -__ieee754_ynl (int n, _Float128 x) -{ - u_int32_t se; - int32_t i, ix; - int32_t sign; - _Float128 a, b, temp, ret; - ieee854_long_double_shape_type u; - - u.value = x; - se = u.parts32.w0; - ix = se & 0x7fffffff; - - /* if Y(n,NaN) is NaN */ - if (ix >= 0x7fff0000) - { - if ((u.parts32.w0 & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) - return x + x; - } - if (x <= 0) - { - if (x == 0) - return ((n < 0 && (n & 1) != 0) ? 1 : -1) / L(0.0); - if (se & 0x80000000) - return zero / (zero * x); - } - sign = 1; - if (n < 0) - { - n = -n; - sign = 1 - ((n & 1) << 1); - } - if (n == 0) - return (__ieee754_y0l (x)); - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (n == 1) - { - ret = sign * __ieee754_y1l (x); - goto out; - } - if (ix >= 0x7fff0000) - return zero; - if (ix >= 0x412D0000) - { /* x > 2**302 */ - - /* ??? See comment above on the possible futility of this. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - _Float128 s; - _Float128 c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = s - c; - break; - case 1: - temp = -s - c; - break; - case 2: - temp = -s + c; - break; - case 3: - temp = s + c; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_y0l (x); - b = __ieee754_y1l (x); - /* quit if b is -inf */ - u.value = b; - se = u.parts32.w0 & 0xffff0000; - for (i = 1; i < n && se != 0xffff0000; i++) - { - temp = b; - b = ((_Float128) (i + i) / x) * b - a; - u.value = b; - se = u.parts32.w0 & 0xffff0000; - a = temp; - } - } - /* If B is +-Inf, set up errno accordingly. */ - if (! isfinite (b)) - __set_errno (ERANGE); - if (sign > 0) - ret = b; - else - ret = -b; - } - out: - if (isinf (ret)) - ret = __copysignl (LDBL_MAX, ret) * LDBL_MAX; - return ret; -} -strong_alias (__ieee754_ynl, __ynl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c deleted file mode 100644 index bef2601bce..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c +++ /dev/null @@ -1,1046 +0,0 @@ -/* lgammal - * - * Natural logarithm of gamma function - * - * - * - * SYNOPSIS: - * - * long double x, y, lgammal(); - * extern int sgngam; - * - * y = lgammal(x); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of the absolute - * value of the gamma function of the argument. - * The sign (+1 or -1) of the gamma function is returned in a - * global (extern) variable named sgngam. - * - * The positive domain is partitioned into numerous segments for approximation. - * For x > 10, - * log gamma(x) = (x - 0.5) log(x) - x + log sqrt(2 pi) + 1/x R(1/x^2) - * Near the minimum at x = x0 = 1.46... the approximation is - * log gamma(x0 + z) = log gamma(x0) + z^2 P(z)/Q(z) - * for small z. - * Elsewhere between 0 and 10, - * log gamma(n + z) = log gamma(n) + z P(z)/Q(z) - * for various selected n and small z. - * - * The cosecant reflection formula is employed for negative arguments. - * - * - * - * ACCURACY: - * - * - * arithmetic domain # trials peak rms - * Relative error: - * IEEE 10, 30 100000 3.9e-34 9.8e-35 - * IEEE 0, 10 100000 3.8e-34 5.3e-35 - * Absolute error: - * IEEE -10, 0 100000 8.0e-34 8.0e-35 - * IEEE -30, -10 100000 4.4e-34 1.0e-34 - * IEEE -100, 100 100000 1.0e-34 - * - * The absolute error criterion is the same as relative error - * when the function magnitude is greater than one but it is absolute - * when the magnitude is less than one. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include - -static const _Float128 PIL = L(3.1415926535897932384626433832795028841972E0); -#if LDBL_MANT_DIG == 106 -static const _Float128 MAXLGM = L(0x5.d53649e2d469dbc1f01e99fd66p+1012); -#else -static const _Float128 MAXLGM = L(1.0485738685148938358098967157129705071571E4928); -#endif -static const _Float128 one = 1; -static const _Float128 huge = LDBL_MAX; - -/* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2) - 1/x <= 0.0741 (x >= 13.495...) - Peak relative error 1.5e-36 */ -static const _Float128 ls2pi = L(9.1893853320467274178032973640561763986140E-1); -#define NRASY 12 -static const _Float128 RASY[NRASY + 1] = -{ - L(8.333333333333333333333333333310437112111E-2), - L(-2.777777777777777777777774789556228296902E-3), - L(7.936507936507936507795933938448586499183E-4), - L(-5.952380952380952041799269756378148574045E-4), - L(8.417508417507928904209891117498524452523E-4), - L(-1.917526917481263997778542329739806086290E-3), - L(6.410256381217852504446848671499409919280E-3), - L(-2.955064066900961649768101034477363301626E-2), - L(1.796402955865634243663453415388336954675E-1), - L(-1.391522089007758553455753477688592767741E0), - L(1.326130089598399157988112385013829305510E1), - L(-1.420412699593782497803472576479997819149E2), - L(1.218058922427762808938869872528846787020E3) -}; - - -/* log gamma(x+13) = log gamma(13) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 12.5 <= x+13 <= 13.5 - Peak relative error 1.1e-36 */ -static const _Float128 lgam13a = L(1.9987213134765625E1); -static const _Float128 lgam13b = L(1.3608962611495173623870550785125024484248E-6); -#define NRN13 7 -static const _Float128 RN13[NRN13 + 1] = -{ - L(8.591478354823578150238226576156275285700E11), - L(2.347931159756482741018258864137297157668E11), - L(2.555408396679352028680662433943000804616E10), - L(1.408581709264464345480765758902967123937E9), - L(4.126759849752613822953004114044451046321E7), - L(6.133298899622688505854211579222889943778E5), - L(3.929248056293651597987893340755876578072E3), - L(6.850783280018706668924952057996075215223E0) -}; -#define NRD13 6 -static const _Float128 RD13[NRD13 + 1] = -{ - L(3.401225382297342302296607039352935541669E11), - L(8.756765276918037910363513243563234551784E10), - L(8.873913342866613213078554180987647243903E9), - L(4.483797255342763263361893016049310017973E8), - L(1.178186288833066430952276702931512870676E7), - L(1.519928623743264797939103740132278337476E5), - L(7.989298844938119228411117593338850892311E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+12) = log gamma(12) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 11.5 <= x+12 <= 12.5 - Peak relative error 4.1e-36 */ -static const _Float128 lgam12a = L(1.75023040771484375E1); -static const _Float128 lgam12b = L(3.7687254483392876529072161996717039575982E-6); -#define NRN12 7 -static const _Float128 RN12[NRN12 + 1] = -{ - L(4.709859662695606986110997348630997559137E11), - L(1.398713878079497115037857470168777995230E11), - L(1.654654931821564315970930093932954900867E10), - L(9.916279414876676861193649489207282144036E8), - L(3.159604070526036074112008954113411389879E7), - L(5.109099197547205212294747623977502492861E5), - L(3.563054878276102790183396740969279826988E3), - L(6.769610657004672719224614163196946862747E0) -}; -#define NRD12 6 -static const _Float128 RD12[NRD12 + 1] = -{ - L(1.928167007860968063912467318985802726613E11), - L(5.383198282277806237247492369072266389233E10), - L(5.915693215338294477444809323037871058363E9), - L(3.241438287570196713148310560147925781342E8), - L(9.236680081763754597872713592701048455890E6), - L(1.292246897881650919242713651166596478850E5), - L(7.366532445427159272584194816076600211171E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+11) = log gamma(11) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 10.5 <= x+11 <= 11.5 - Peak relative error 1.8e-35 */ -static const _Float128 lgam11a = L(1.5104400634765625E1); -static const _Float128 lgam11b = L(1.1938309890295225709329251070371882250744E-5); -#define NRN11 7 -static const _Float128 RN11[NRN11 + 1] = -{ - L(2.446960438029415837384622675816736622795E11), - L(7.955444974446413315803799763901729640350E10), - L(1.030555327949159293591618473447420338444E10), - L(6.765022131195302709153994345470493334946E8), - L(2.361892792609204855279723576041468347494E7), - L(4.186623629779479136428005806072176490125E5), - L(3.202506022088912768601325534149383594049E3), - L(6.681356101133728289358838690666225691363E0) -}; -#define NRD11 6 -static const _Float128 RD11[NRD11 + 1] = -{ - L(1.040483786179428590683912396379079477432E11), - L(3.172251138489229497223696648369823779729E10), - L(3.806961885984850433709295832245848084614E9), - L(2.278070344022934913730015420611609620171E8), - L(7.089478198662651683977290023829391596481E6), - L(1.083246385105903533237139380509590158658E5), - L(6.744420991491385145885727942219463243597E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+10) = log gamma(10) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 9.5 <= x+10 <= 10.5 - Peak relative error 5.4e-37 */ -static const _Float128 lgam10a = L(1.280181884765625E1); -static const _Float128 lgam10b = L(8.6324252196112077178745667061642811492557E-6); -#define NRN10 7 -static const _Float128 RN10[NRN10 + 1] = -{ - L(-1.239059737177249934158597996648808363783E14), - L(-4.725899566371458992365624673357356908719E13), - L(-7.283906268647083312042059082837754850808E12), - L(-5.802855515464011422171165179767478794637E11), - L(-2.532349691157548788382820303182745897298E10), - L(-5.884260178023777312587193693477072061820E8), - L(-6.437774864512125749845840472131829114906E6), - L(-2.350975266781548931856017239843273049384E4) -}; -#define NRD10 7 -static const _Float128 RD10[NRD10 + 1] = -{ - L(-5.502645997581822567468347817182347679552E13), - L(-1.970266640239849804162284805400136473801E13), - L(-2.819677689615038489384974042561531409392E12), - L(-2.056105863694742752589691183194061265094E11), - L(-8.053670086493258693186307810815819662078E9), - L(-1.632090155573373286153427982504851867131E8), - L(-1.483575879240631280658077826889223634921E6), - L(-4.002806669713232271615885826373550502510E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+9) = log gamma(9) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 8.5 <= x+9 <= 9.5 - Peak relative error 3.6e-36 */ -static const _Float128 lgam9a = L(1.06045989990234375E1); -static const _Float128 lgam9b = L(3.9037218127284172274007216547549861681400E-6); -#define NRN9 7 -static const _Float128 RN9[NRN9 + 1] = -{ - L(-4.936332264202687973364500998984608306189E13), - L(-2.101372682623700967335206138517766274855E13), - L(-3.615893404644823888655732817505129444195E12), - L(-3.217104993800878891194322691860075472926E11), - L(-1.568465330337375725685439173603032921399E10), - L(-4.073317518162025744377629219101510217761E8), - L(-4.983232096406156139324846656819246974500E6), - L(-2.036280038903695980912289722995505277253E4) -}; -#define NRD9 7 -static const _Float128 RD9[NRD9 + 1] = -{ - L(-2.306006080437656357167128541231915480393E13), - L(-9.183606842453274924895648863832233799950E12), - L(-1.461857965935942962087907301194381010380E12), - L(-1.185728254682789754150068652663124298303E11), - L(-5.166285094703468567389566085480783070037E9), - L(-1.164573656694603024184768200787835094317E8), - L(-1.177343939483908678474886454113163527909E6), - L(-3.529391059783109732159524500029157638736E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+8) = log gamma(8) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 7.5 <= x+8 <= 8.5 - Peak relative error 2.4e-37 */ -static const _Float128 lgam8a = L(8.525146484375E0); -static const _Float128 lgam8b = L(1.4876690414300165531036347125050759667737E-5); -#define NRN8 8 -static const _Float128 RN8[NRN8 + 1] = -{ - L(6.600775438203423546565361176829139703289E11), - L(3.406361267593790705240802723914281025800E11), - L(7.222460928505293914746983300555538432830E10), - L(8.102984106025088123058747466840656458342E9), - L(5.157620015986282905232150979772409345927E8), - L(1.851445288272645829028129389609068641517E7), - L(3.489261702223124354745894067468953756656E5), - L(2.892095396706665774434217489775617756014E3), - L(6.596977510622195827183948478627058738034E0) -}; -#define NRD8 7 -static const _Float128 RD8[NRD8 + 1] = -{ - L(3.274776546520735414638114828622673016920E11), - L(1.581811207929065544043963828487733970107E11), - L(3.108725655667825188135393076860104546416E10), - L(3.193055010502912617128480163681842165730E9), - L(1.830871482669835106357529710116211541839E8), - L(5.790862854275238129848491555068073485086E6), - L(9.305213264307921522842678835618803553589E4), - L(6.216974105861848386918949336819572333622E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+7) = log gamma(7) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 6.5 <= x+7 <= 7.5 - Peak relative error 3.2e-36 */ -static const _Float128 lgam7a = L(6.5792388916015625E0); -static const _Float128 lgam7b = L(1.2320408538495060178292903945321122583007E-5); -#define NRN7 8 -static const _Float128 RN7[NRN7 + 1] = -{ - L(2.065019306969459407636744543358209942213E11), - L(1.226919919023736909889724951708796532847E11), - L(2.996157990374348596472241776917953749106E10), - L(3.873001919306801037344727168434909521030E9), - L(2.841575255593761593270885753992732145094E8), - L(1.176342515359431913664715324652399565551E7), - L(2.558097039684188723597519300356028511547E5), - L(2.448525238332609439023786244782810774702E3), - L(6.460280377802030953041566617300902020435E0) -}; -#define NRD7 7 -static const _Float128 RD7[NRD7 + 1] = -{ - L(1.102646614598516998880874785339049304483E11), - L(6.099297512712715445879759589407189290040E10), - L(1.372898136289611312713283201112060238351E10), - L(1.615306270420293159907951633566635172343E9), - L(1.061114435798489135996614242842561967459E8), - L(3.845638971184305248268608902030718674691E6), - L(7.081730675423444975703917836972720495507E4), - L(5.423122582741398226693137276201344096370E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+6) = log gamma(6) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 5.5 <= x+6 <= 6.5 - Peak relative error 6.2e-37 */ -static const _Float128 lgam6a = L(4.7874908447265625E0); -static const _Float128 lgam6b = L(8.9805548349424770093452324304839959231517E-7); -#define NRN6 8 -static const _Float128 RN6[NRN6 + 1] = -{ - L(-3.538412754670746879119162116819571823643E13), - L(-2.613432593406849155765698121483394257148E13), - L(-8.020670732770461579558867891923784753062E12), - L(-1.322227822931250045347591780332435433420E12), - L(-1.262809382777272476572558806855377129513E11), - L(-7.015006277027660872284922325741197022467E9), - L(-2.149320689089020841076532186783055727299E8), - L(-3.167210585700002703820077565539658995316E6), - L(-1.576834867378554185210279285358586385266E4) -}; -#define NRD6 8 -static const _Float128 RD6[NRD6 + 1] = -{ - L(-2.073955870771283609792355579558899389085E13), - L(-1.421592856111673959642750863283919318175E13), - L(-4.012134994918353924219048850264207074949E12), - L(-6.013361045800992316498238470888523722431E11), - L(-5.145382510136622274784240527039643430628E10), - L(-2.510575820013409711678540476918249524123E9), - L(-6.564058379709759600836745035871373240904E7), - L(-7.861511116647120540275354855221373571536E5), - L(-2.821943442729620524365661338459579270561E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+5) = log gamma(5) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 4.5 <= x+5 <= 5.5 - Peak relative error 3.4e-37 */ -static const _Float128 lgam5a = L(3.17803955078125E0); -static const _Float128 lgam5b = L(1.4279566695619646941601297055408873990961E-5); -#define NRN5 9 -static const _Float128 RN5[NRN5 + 1] = -{ - L(2.010952885441805899580403215533972172098E11), - L(1.916132681242540921354921906708215338584E11), - L(7.679102403710581712903937970163206882492E10), - L(1.680514903671382470108010973615268125169E10), - L(2.181011222911537259440775283277711588410E9), - L(1.705361119398837808244780667539728356096E8), - L(7.792391565652481864976147945997033946360E6), - L(1.910741381027985291688667214472560023819E5), - L(2.088138241893612679762260077783794329559E3), - L(6.330318119566998299106803922739066556550E0) -}; -#define NRD5 8 -static const _Float128 RD5[NRD5 + 1] = -{ - L(1.335189758138651840605141370223112376176E11), - L(1.174130445739492885895466097516530211283E11), - L(4.308006619274572338118732154886328519910E10), - L(8.547402888692578655814445003283720677468E9), - L(9.934628078575618309542580800421370730906E8), - L(6.847107420092173812998096295422311820672E7), - L(2.698552646016599923609773122139463150403E6), - L(5.526516251532464176412113632726150253215E4), - L(4.772343321713697385780533022595450486932E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+4) = log gamma(4) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 3.5 <= x+4 <= 4.5 - Peak relative error 6.7e-37 */ -static const _Float128 lgam4a = L(1.791748046875E0); -static const _Float128 lgam4b = L(1.1422353055000812477358380702272722990692E-5); -#define NRN4 9 -static const _Float128 RN4[NRN4 + 1] = -{ - L(-1.026583408246155508572442242188887829208E13), - L(-1.306476685384622809290193031208776258809E13), - L(-7.051088602207062164232806511992978915508E12), - L(-2.100849457735620004967624442027793656108E12), - L(-3.767473790774546963588549871673843260569E11), - L(-4.156387497364909963498394522336575984206E10), - L(-2.764021460668011732047778992419118757746E9), - L(-1.036617204107109779944986471142938641399E8), - L(-1.895730886640349026257780896972598305443E6), - L(-1.180509051468390914200720003907727988201E4) -}; -#define NRD4 9 -static const _Float128 RD4[NRD4 + 1] = -{ - L(-8.172669122056002077809119378047536240889E12), - L(-9.477592426087986751343695251801814226960E12), - L(-4.629448850139318158743900253637212801682E12), - L(-1.237965465892012573255370078308035272942E12), - L(-1.971624313506929845158062177061297598956E11), - L(-1.905434843346570533229942397763361493610E10), - L(-1.089409357680461419743730978512856675984E9), - L(-3.416703082301143192939774401370222822430E7), - L(-4.981791914177103793218433195857635265295E5), - L(-2.192507743896742751483055798411231453733E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+3) = log gamma(3) + x P(x)/Q(x) - -0.25 <= x <= 0.5 - 2.75 <= x+3 <= 3.5 - Peak relative error 6.0e-37 */ -static const _Float128 lgam3a = L(6.93145751953125E-1); -static const _Float128 lgam3b = L(1.4286068203094172321214581765680755001344E-6); - -#define NRN3 9 -static const _Float128 RN3[NRN3 + 1] = -{ - L(-4.813901815114776281494823863935820876670E11), - L(-8.425592975288250400493910291066881992620E11), - L(-6.228685507402467503655405482985516909157E11), - L(-2.531972054436786351403749276956707260499E11), - L(-6.170200796658926701311867484296426831687E10), - L(-9.211477458528156048231908798456365081135E9), - L(-8.251806236175037114064561038908691305583E8), - L(-4.147886355917831049939930101151160447495E7), - L(-1.010851868928346082547075956946476932162E6), - L(-8.333374463411801009783402800801201603736E3) -}; -#define NRD3 9 -static const _Float128 RD3[NRD3 + 1] = -{ - L(-5.216713843111675050627304523368029262450E11), - L(-8.014292925418308759369583419234079164391E11), - L(-5.180106858220030014546267824392678611990E11), - L(-1.830406975497439003897734969120997840011E11), - L(-3.845274631904879621945745960119924118925E10), - L(-4.891033385370523863288908070309417710903E9), - L(-3.670172254411328640353855768698287474282E8), - L(-1.505316381525727713026364396635522516989E7), - L(-2.856327162923716881454613540575964890347E5), - L(-1.622140448015769906847567212766206894547E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+2.5) = log gamma(2.5) + x P(x)/Q(x) - -0.125 <= x <= 0.25 - 2.375 <= x+2.5 <= 2.75 */ -static const _Float128 lgam2r5a = L(2.8466796875E-1); -static const _Float128 lgam2r5b = L(1.4901722919159632494669682701924320137696E-5); -#define NRN2r5 8 -static const _Float128 RN2r5[NRN2r5 + 1] = -{ - L(-4.676454313888335499356699817678862233205E9), - L(-9.361888347911187924389905984624216340639E9), - L(-7.695353600835685037920815799526540237703E9), - L(-3.364370100981509060441853085968900734521E9), - L(-8.449902011848163568670361316804900559863E8), - L(-1.225249050950801905108001246436783022179E8), - L(-9.732972931077110161639900388121650470926E6), - L(-3.695711763932153505623248207576425983573E5), - L(-4.717341584067827676530426007495274711306E3) -}; -#define NRD2r5 8 -static const _Float128 RD2r5[NRD2r5 + 1] = -{ - L(-6.650657966618993679456019224416926875619E9), - L(-1.099511409330635807899718829033488771623E10), - L(-7.482546968307837168164311101447116903148E9), - L(-2.702967190056506495988922973755870557217E9), - L(-5.570008176482922704972943389590409280950E8), - L(-6.536934032192792470926310043166993233231E7), - L(-4.101991193844953082400035444146067511725E6), - L(-1.174082735875715802334430481065526664020E5), - L(-9.932840389994157592102947657277692978511E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+2) = x P(x)/Q(x) - -0.125 <= x <= +0.375 - 1.875 <= x+2 <= 2.375 - Peak relative error 4.6e-36 */ -#define NRN2 9 -static const _Float128 RN2[NRN2 + 1] = -{ - L(-3.716661929737318153526921358113793421524E9), - L(-1.138816715030710406922819131397532331321E10), - L(-1.421017419363526524544402598734013569950E10), - L(-9.510432842542519665483662502132010331451E9), - L(-3.747528562099410197957514973274474767329E9), - L(-8.923565763363912474488712255317033616626E8), - L(-1.261396653700237624185350402781338231697E8), - L(-9.918402520255661797735331317081425749014E6), - L(-3.753996255897143855113273724233104768831E5), - L(-4.778761333044147141559311805999540765612E3) -}; -#define NRD2 9 -static const _Float128 RD2[NRD2 + 1] = -{ - L(-8.790916836764308497770359421351673950111E9), - L(-2.023108608053212516399197678553737477486E10), - L(-1.958067901852022239294231785363504458367E10), - L(-1.035515043621003101254252481625188704529E10), - L(-3.253884432621336737640841276619272224476E9), - L(-6.186383531162456814954947669274235815544E8), - L(-6.932557847749518463038934953605969951466E7), - L(-4.240731768287359608773351626528479703758E6), - L(-1.197343995089189188078944689846348116630E5), - L(-1.004622911670588064824904487064114090920E3) -/* 1.0E0 */ -}; - - -/* log gamma(x+1.75) = log gamma(1.75) + x P(x)/Q(x) - -0.125 <= x <= +0.125 - 1.625 <= x+1.75 <= 1.875 - Peak relative error 9.2e-37 */ -static const _Float128 lgam1r75a = L(-8.441162109375E-2); -static const _Float128 lgam1r75b = L(1.0500073264444042213965868602268256157604E-5); -#define NRN1r75 8 -static const _Float128 RN1r75[NRN1r75 + 1] = -{ - L(-5.221061693929833937710891646275798251513E7), - L(-2.052466337474314812817883030472496436993E8), - L(-2.952718275974940270675670705084125640069E8), - L(-2.132294039648116684922965964126389017840E8), - L(-8.554103077186505960591321962207519908489E7), - L(-1.940250901348870867323943119132071960050E7), - L(-2.379394147112756860769336400290402208435E6), - L(-1.384060879999526222029386539622255797389E5), - L(-2.698453601378319296159355612094598695530E3) -}; -#define NRD1r75 8 -static const _Float128 RD1r75[NRD1r75 + 1] = -{ - L(-2.109754689501705828789976311354395393605E8), - L(-5.036651829232895725959911504899241062286E8), - L(-4.954234699418689764943486770327295098084E8), - L(-2.589558042412676610775157783898195339410E8), - L(-7.731476117252958268044969614034776883031E7), - L(-1.316721702252481296030801191240867486965E7), - L(-1.201296501404876774861190604303728810836E6), - L(-5.007966406976106636109459072523610273928E4), - L(-6.155817990560743422008969155276229018209E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+x0) = y0 + x^2 P(x)/Q(x) - -0.0867 <= x <= +0.1634 - 1.374932... <= x+x0 <= 1.625032... - Peak relative error 4.0e-36 */ -static const _Float128 x0a = L(1.4616241455078125); -static const _Float128 x0b = L(7.9994605498412626595423257213002588621246E-6); -static const _Float128 y0a = L(-1.21490478515625E-1); -static const _Float128 y0b = L(4.1879797753919044854428223084178486438269E-6); -#define NRN1r5 8 -static const _Float128 RN1r5[NRN1r5 + 1] = -{ - L(6.827103657233705798067415468881313128066E5), - L(1.910041815932269464714909706705242148108E6), - L(2.194344176925978377083808566251427771951E6), - L(1.332921400100891472195055269688876427962E6), - L(4.589080973377307211815655093824787123508E5), - L(8.900334161263456942727083580232613796141E4), - L(9.053840838306019753209127312097612455236E3), - L(4.053367147553353374151852319743594873771E2), - L(5.040631576303952022968949605613514584950E0) -}; -#define NRD1r5 8 -static const _Float128 RD1r5[NRD1r5 + 1] = -{ - L(1.411036368843183477558773688484699813355E6), - L(4.378121767236251950226362443134306184849E6), - L(5.682322855631723455425929877581697918168E6), - L(3.999065731556977782435009349967042222375E6), - L(1.653651390456781293163585493620758410333E6), - L(4.067774359067489605179546964969435858311E5), - L(5.741463295366557346748361781768833633256E4), - L(4.226404539738182992856094681115746692030E3), - L(1.316980975410327975566999780608618774469E2), - /* 1.0E0L */ -}; - - -/* log gamma(x+1.25) = log gamma(1.25) + x P(x)/Q(x) - -.125 <= x <= +.125 - 1.125 <= x+1.25 <= 1.375 - Peak relative error = 4.9e-36 */ -static const _Float128 lgam1r25a = L(-9.82818603515625E-2); -static const _Float128 lgam1r25b = L(1.0023929749338536146197303364159774377296E-5); -#define NRN1r25 9 -static const _Float128 RN1r25[NRN1r25 + 1] = -{ - L(-9.054787275312026472896002240379580536760E4), - L(-8.685076892989927640126560802094680794471E4), - L(2.797898965448019916967849727279076547109E5), - L(6.175520827134342734546868356396008898299E5), - L(5.179626599589134831538516906517372619641E5), - L(2.253076616239043944538380039205558242161E5), - L(5.312653119599957228630544772499197307195E4), - L(6.434329437514083776052669599834938898255E3), - L(3.385414416983114598582554037612347549220E2), - L(4.907821957946273805080625052510832015792E0) -}; -#define NRD1r25 8 -static const _Float128 RD1r25[NRD1r25 + 1] = -{ - L(3.980939377333448005389084785896660309000E5), - L(1.429634893085231519692365775184490465542E6), - L(2.145438946455476062850151428438668234336E6), - L(1.743786661358280837020848127465970357893E6), - L(8.316364251289743923178092656080441655273E5), - L(2.355732939106812496699621491135458324294E5), - L(3.822267399625696880571810137601310855419E4), - L(3.228463206479133236028576845538387620856E3), - L(1.152133170470059555646301189220117965514E2) - /* 1.0E0L */ -}; - - -/* log gamma(x + 1) = x P(x)/Q(x) - 0.0 <= x <= +0.125 - 1.0 <= x+1 <= 1.125 - Peak relative error 1.1e-35 */ -#define NRN1 8 -static const _Float128 RN1[NRN1 + 1] = -{ - L(-9.987560186094800756471055681088744738818E3), - L(-2.506039379419574361949680225279376329742E4), - L(-1.386770737662176516403363873617457652991E4), - L(1.439445846078103202928677244188837130744E4), - L(2.159612048879650471489449668295139990693E4), - L(1.047439813638144485276023138173676047079E4), - L(2.250316398054332592560412486630769139961E3), - L(1.958510425467720733041971651126443864041E2), - L(4.516830313569454663374271993200291219855E0) -}; -#define NRD1 7 -static const _Float128 RD1[NRD1 + 1] = -{ - L(1.730299573175751778863269333703788214547E4), - L(6.807080914851328611903744668028014678148E4), - L(1.090071629101496938655806063184092302439E5), - L(9.124354356415154289343303999616003884080E4), - L(4.262071638655772404431164427024003253954E4), - L(1.096981664067373953673982635805821283581E4), - L(1.431229503796575892151252708527595787588E3), - L(7.734110684303689320830401788262295992921E1) - /* 1.0E0 */ -}; - - -/* log gamma(x + 1) = x P(x)/Q(x) - -0.125 <= x <= 0 - 0.875 <= x+1 <= 1.0 - Peak relative error 7.0e-37 */ -#define NRNr9 8 -static const _Float128 RNr9[NRNr9 + 1] = -{ - L(4.441379198241760069548832023257571176884E5), - L(1.273072988367176540909122090089580368732E6), - L(9.732422305818501557502584486510048387724E5), - L(-5.040539994443998275271644292272870348684E5), - L(-1.208719055525609446357448132109723786736E6), - L(-7.434275365370936547146540554419058907156E5), - L(-2.075642969983377738209203358199008185741E5), - L(-2.565534860781128618589288075109372218042E4), - L(-1.032901669542994124131223797515913955938E3), -}; -#define NRDr9 8 -static const _Float128 RDr9[NRDr9 + 1] = -{ - L(-7.694488331323118759486182246005193998007E5), - L(-3.301918855321234414232308938454112213751E6), - L(-5.856830900232338906742924836032279404702E6), - L(-5.540672519616151584486240871424021377540E6), - L(-3.006530901041386626148342989181721176919E6), - L(-9.350378280513062139466966374330795935163E5), - L(-1.566179100031063346901755685375732739511E5), - L(-1.205016539620260779274902967231510804992E4), - L(-2.724583156305709733221564484006088794284E2) -/* 1.0E0 */ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -_Float128 -__ieee754_lgammal_r (_Float128 x, int *signgamp) -{ - _Float128 p, q, w, z, nx; - int i, nn; - - *signgamp = 1; - - if (! isfinite (x)) - return x * x; - - if (x == 0) - { - if (signbit (x)) - *signgamp = -1; - } - - if (x < 0) - { - if (x < -2 && x > (LDBL_MANT_DIG == 106 ? -48 : -50)) - return __lgamma_negl (x, signgamp); - q = -x; - p = __floorl (q); - if (p == q) - return (one / __fabsl (p - p)); - _Float128 halfp = p * L(0.5); - if (halfp == __floorl (halfp)) - *signgamp = -1; - else - *signgamp = 1; - if (q < L(0x1p-120)) - return -__logl (q); - z = q - p; - if (z > L(0.5)) - { - p += 1; - z = p - q; - } - z = q * __sinl (PIL * z); - w = __ieee754_lgammal_r (q, &i); - z = __logl (PIL / z) - w; - return (z); - } - - if (x < L(13.5)) - { - p = 0; - nx = __floorl (x + L(0.5)); - nn = nx; - switch (nn) - { - case 0: - /* log gamma (x + 1) = log(x) + log gamma(x) */ - if (x < L(0x1p-120)) - return -__logl (x); - else if (x <= 0.125) - { - p = x * neval (x, RN1, NRN1) / deval (x, RD1, NRD1); - } - else if (x <= 0.375) - { - z = x - L(0.25); - p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); - p += lgam1r25b; - p += lgam1r25a; - } - else if (x <= 0.625) - { - z = x + (1 - x0a); - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x <= 0.875) - { - z = x - L(0.75); - p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else - { - z = x - 1; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - p = p - __logl (x); - break; - - case 1: - if (x < L(0.875)) - { - if (x <= 0.625) - { - z = x + (1 - x0a); - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x <= 0.875) - { - z = x - L(0.75); - p = z * neval (z, RN1r75, NRN1r75) - / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else - { - z = x - 1; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - p = p - __logl (x); - } - else if (x < 1) - { - z = x - 1; - p = z * neval (z, RNr9, NRNr9) / deval (z, RDr9, NRDr9); - } - else if (x == 1) - p = 0; - else if (x <= L(1.125)) - { - z = x - 1; - p = z * neval (z, RN1, NRN1) / deval (z, RD1, NRD1); - } - else if (x <= 1.375) - { - z = x - L(1.25); - p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); - p += lgam1r25b; - p += lgam1r25a; - } - else - { - /* 1.375 <= x+x0 <= 1.625 */ - z = x - x0a; - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - break; - - case 2: - if (x < L(1.625)) - { - z = x - x0a; - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x < L(1.875)) - { - z = x - L(1.75); - p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else if (x == 2) - p = 0; - else if (x < L(2.375)) - { - z = x - 2; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - else - { - z = x - L(2.5); - p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); - p += lgam2r5b; - p += lgam2r5a; - } - break; - - case 3: - if (x < 2.75) - { - z = x - L(2.5); - p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); - p += lgam2r5b; - p += lgam2r5a; - } - else - { - z = x - 3; - p = z * neval (z, RN3, NRN3) / deval (z, RD3, NRD3); - p += lgam3b; - p += lgam3a; - } - break; - - case 4: - z = x - 4; - p = z * neval (z, RN4, NRN4) / deval (z, RD4, NRD4); - p += lgam4b; - p += lgam4a; - break; - - case 5: - z = x - 5; - p = z * neval (z, RN5, NRN5) / deval (z, RD5, NRD5); - p += lgam5b; - p += lgam5a; - break; - - case 6: - z = x - 6; - p = z * neval (z, RN6, NRN6) / deval (z, RD6, NRD6); - p += lgam6b; - p += lgam6a; - break; - - case 7: - z = x - 7; - p = z * neval (z, RN7, NRN7) / deval (z, RD7, NRD7); - p += lgam7b; - p += lgam7a; - break; - - case 8: - z = x - 8; - p = z * neval (z, RN8, NRN8) / deval (z, RD8, NRD8); - p += lgam8b; - p += lgam8a; - break; - - case 9: - z = x - 9; - p = z * neval (z, RN9, NRN9) / deval (z, RD9, NRD9); - p += lgam9b; - p += lgam9a; - break; - - case 10: - z = x - 10; - p = z * neval (z, RN10, NRN10) / deval (z, RD10, NRD10); - p += lgam10b; - p += lgam10a; - break; - - case 11: - z = x - 11; - p = z * neval (z, RN11, NRN11) / deval (z, RD11, NRD11); - p += lgam11b; - p += lgam11a; - break; - - case 12: - z = x - 12; - p = z * neval (z, RN12, NRN12) / deval (z, RD12, NRD12); - p += lgam12b; - p += lgam12a; - break; - - case 13: - z = x - 13; - p = z * neval (z, RN13, NRN13) / deval (z, RD13, NRD13); - p += lgam13b; - p += lgam13a; - break; - } - return p; - } - - if (x > MAXLGM) - return (*signgamp * huge * huge); - - if (x > L(0x1p120)) - return x * (__logl (x) - 1); - q = ls2pi - x; - q = (x - L(0.5)) * __logl (x) + q; - if (x > L(1.0e18)) - return (q); - - p = 1 / (x * x); - q += neval (p, RASY, NRASY) / x; - return (q); -} -strong_alias (__ieee754_lgammal_r, __lgammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_log10l.c b/sysdeps/ieee754/ldbl-128/e_log10l.c deleted file mode 100644 index c992f6e5ee..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_log10l.c +++ /dev/null @@ -1,259 +0,0 @@ -/* log10l.c - * - * Common logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log10l(); - * - * y = log10l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 10 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 30000 2.3e-34 4.9e-35 - * IEEE exp(+-10000) 30000 1.0e-34 4.1e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 P[13] = -{ - L(1.313572404063446165910279910527789794488E4), - L(7.771154681358524243729929227226708890930E4), - L(2.014652742082537582487669938141683759923E5), - L(3.007007295140399532324943111654767187848E5), - L(2.854829159639697837788887080758954924001E5), - L(1.797628303815655343403735250238293741397E5), - L(7.594356839258970405033155585486712125861E4), - L(2.128857716871515081352991964243375186031E4), - L(3.824952356185897735160588078446136783779E3), - L(4.114517881637811823002128927449878962058E2), - L(2.321125933898420063925789532045674660756E1), - L(4.998469661968096229986658302195402690910E-1), - L(1.538612243596254322971797716843006400388E-6) -}; -static const _Float128 Q[12] = -{ - L(3.940717212190338497730839731583397586124E4), - L(2.626900195321832660448791748036714883242E5), - L(7.777690340007566932935753241556479363645E5), - L(1.347518538384329112529391120390701166528E6), - L(1.514882452993549494932585972882995548426E6), - L(1.158019977462989115839826904108208787040E6), - L(6.132189329546557743179177159925690841200E5), - L(2.248234257620569139969141618556349415120E5), - L(5.605842085972455027590989944010492125825E4), - L(9.147150349299596453976674231612674085381E3), - L(9.104928120962988414618126155557301584078E2), - L(4.839208193348159620282142911143429644326E1) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 R[6] = -{ - L(1.418134209872192732479751274970992665513E5), - L(-8.977257995689735303686582344659576526998E4), - L(2.048819892795278657810231591630928516206E4), - L(-2.024301798136027039250415126250455056397E3), - L(8.057002716646055371965756206836056074715E1), - L(-8.828896441624934385266096344596648080902E-1) -}; -static const _Float128 S[6] = -{ - L(1.701761051846631278975701529965589676574E6), - L(-1.332535117259762928288745111081235577029E6), - L(4.001557694070773974936904547424676279307E5), - L(-5.748542087379434595104154610899551484314E4), - L(3.998526750980007367835804959888064681098E3), - L(-1.186359407982897997337150403816839480438E2) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const _Float128 -/* log10(2) */ -L102A = L(0.3125), -L102B = L(-1.14700043360188047862611052755069732318101185E-2), -/* log10(e) */ -L10EA = L(0.5), -L10EB = L(-6.570551809674817234887108108339491770560299E-2), -/* sqrt(2)/2 */ -SQRTH = L(7.071067811865475244008443621048490392848359E-1); - - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -_Float128 -__ieee754_log10l (_Float128 x) -{ - _Float128 z; - _Float128 y; - int e; - int64_t hx, lx; - -/* Test for domain */ - GET_LDOUBLE_WORDS64 (hx, lx, x); - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - return (-1 / __fabsl (x)); /* log10l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7fff000000000000LL) - return (x + x); - - if (x == 1) - return 0; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1; /* 2x - 1 */ - } - else - { - x = x - 1; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - - /* Multiply log of fraction by log10(e) - * and base 2 exponent by log10(2). - */ - z = y * L10EB; - z += x * L10EB; - z += e * L102B; - z += y * L10EA; - z += x * L10EA; - z += e * L102A; - return (z); -} -strong_alias (__ieee754_log10l, __log10l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_log2l.c b/sysdeps/ieee754/ldbl-128/e_log2l.c deleted file mode 100644 index cf4a380f16..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_log2l.c +++ /dev/null @@ -1,252 +0,0 @@ -/* log2l.c - * Base 2 logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log2l(); - * - * y = log2l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 2 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the (natural) - * logarithm of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 100,000 2.6e-34 4.9e-35 - * IEEE exp(+-10000) 100,000 9.6e-35 4.0e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 P[13] = -{ - L(1.313572404063446165910279910527789794488E4), - L(7.771154681358524243729929227226708890930E4), - L(2.014652742082537582487669938141683759923E5), - L(3.007007295140399532324943111654767187848E5), - L(2.854829159639697837788887080758954924001E5), - L(1.797628303815655343403735250238293741397E5), - L(7.594356839258970405033155585486712125861E4), - L(2.128857716871515081352991964243375186031E4), - L(3.824952356185897735160588078446136783779E3), - L(4.114517881637811823002128927449878962058E2), - L(2.321125933898420063925789532045674660756E1), - L(4.998469661968096229986658302195402690910E-1), - L(1.538612243596254322971797716843006400388E-6) -}; -static const _Float128 Q[12] = -{ - L(3.940717212190338497730839731583397586124E4), - L(2.626900195321832660448791748036714883242E5), - L(7.777690340007566932935753241556479363645E5), - L(1.347518538384329112529391120390701166528E6), - L(1.514882452993549494932585972882995548426E6), - L(1.158019977462989115839826904108208787040E6), - L(6.132189329546557743179177159925690841200E5), - L(2.248234257620569139969141618556349415120E5), - L(5.605842085972455027590989944010492125825E4), - L(9.147150349299596453976674231612674085381E3), - L(9.104928120962988414618126155557301584078E2), - L(4.839208193348159620282142911143429644326E1) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 R[6] = -{ - L(1.418134209872192732479751274970992665513E5), - L(-8.977257995689735303686582344659576526998E4), - L(2.048819892795278657810231591630928516206E4), - L(-2.024301798136027039250415126250455056397E3), - L(8.057002716646055371965756206836056074715E1), - L(-8.828896441624934385266096344596648080902E-1) -}; -static const _Float128 S[6] = -{ - L(1.701761051846631278975701529965589676574E6), - L(-1.332535117259762928288745111081235577029E6), - L(4.001557694070773974936904547424676279307E5), - L(-5.748542087379434595104154610899551484314E4), - L(3.998526750980007367835804959888064681098E3), - L(-1.186359407982897997337150403816839480438E2) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const _Float128 -/* log2(e) - 1 */ -LOG2EA = L(4.4269504088896340735992468100189213742664595E-1), -/* sqrt(2)/2 */ -SQRTH = L(7.071067811865475244008443621048490392848359E-1); - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -_Float128 -__ieee754_log2l (_Float128 x) -{ - _Float128 z; - _Float128 y; - int e; - int64_t hx, lx; - -/* Test for domain */ - GET_LDOUBLE_WORDS64 (hx, lx, x); - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - return (-1 / __fabsl (x)); /* log2l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7fff000000000000LL) - return (x + x); - - if (x == 1) - return 0; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1; /* 2x - 1 */ - } - else - { - x = x - 1; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - -/* Multiply log of fraction by log2(e) - * and base 2 exponent by 1 - */ - z = y * LOG2EA; - z += x * LOG2EA; - z += y; - z += x; - z += e; - return (z); -} -strong_alias (__ieee754_log2l, __log2l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_logl.c b/sysdeps/ieee754/ldbl-128/e_logl.c deleted file mode 100644 index 8672047e43..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_logl.c +++ /dev/null @@ -1,282 +0,0 @@ -/* logll.c - * - * Natural logarithm for 128-bit long double precision. - * - * - * - * SYNOPSIS: - * - * long double x, y, logl(); - * - * y = logl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. Use of a lookup table increases the speed of the routine. - * The program uses logarithms tabulated at intervals of 1/128 to - * cover the domain from approximately 0.7 to 1.4. - * - * On the interval [-1/128, +1/128] the logarithm of 1+x is approximated by - * log(1+x) = x - 0.5 x^2 + x^3 P(x) . - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.875, 1.125 100000 1.2e-34 4.1e-35 - * IEEE 0.125, 8 100000 1.2e-34 4.1e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include - -/* log(1+x) = x - .5 x^2 + x^3 l(x) - -.0078125 <= x <= +.0078125 - peak relative error 1.2e-37 */ -static const _Float128 -l3 = L(3.333333333333333333333333333333336096926E-1), -l4 = L(-2.499999999999999999999999999486853077002E-1), -l5 = L(1.999999999999999999999999998515277861905E-1), -l6 = L(-1.666666666666666666666798448356171665678E-1), -l7 = L(1.428571428571428571428808945895490721564E-1), -l8 = L(-1.249999999999999987884655626377588149000E-1), -l9 = L(1.111111111111111093947834982832456459186E-1), -l10 = L(-1.000000000000532974938900317952530453248E-1), -l11 = L(9.090909090915566247008015301349979892689E-2), -l12 = L(-8.333333211818065121250921925397567745734E-2), -l13 = L(7.692307559897661630807048686258659316091E-2), -l14 = L(-7.144242754190814657241902218399056829264E-2), -l15 = L(6.668057591071739754844678883223432347481E-2); - -/* Lookup table of ln(t) - (t-1) - t = 0.5 + (k+26)/128) - k = 0, ..., 91 */ -static const _Float128 logtbl[92] = { -L(-5.5345593589352099112142921677820359632418E-2), -L(-5.2108257402767124761784665198737642086148E-2), -L(-4.8991686870576856279407775480686721935120E-2), -L(-4.5993270766361228596215288742353061431071E-2), -L(-4.3110481649613269682442058976885699556950E-2), -L(-4.0340872319076331310838085093194799765520E-2), -L(-3.7682072451780927439219005993827431503510E-2), -L(-3.5131785416234343803903228503274262719586E-2), -L(-3.2687785249045246292687241862699949178831E-2), -L(-3.0347913785027239068190798397055267411813E-2), -L(-2.8110077931525797884641940838507561326298E-2), -L(-2.5972247078357715036426583294246819637618E-2), -L(-2.3932450635346084858612873953407168217307E-2), -L(-2.1988775689981395152022535153795155900240E-2), -L(-2.0139364778244501615441044267387667496733E-2), -L(-1.8382413762093794819267536615342902718324E-2), -L(-1.6716169807550022358923589720001638093023E-2), -L(-1.5138929457710992616226033183958974965355E-2), -L(-1.3649036795397472900424896523305726435029E-2), -L(-1.2244881690473465543308397998034325468152E-2), -L(-1.0924898127200937840689817557742469105693E-2), -L(-9.6875626072830301572839422532631079809328E-3), -L(-8.5313926245226231463436209313499745894157E-3), -L(-7.4549452072765973384933565912143044991706E-3), -L(-6.4568155251217050991200599386801665681310E-3), -L(-5.5356355563671005131126851708522185605193E-3), -L(-4.6900728132525199028885749289712348829878E-3), -L(-3.9188291218610470766469347968659624282519E-3), -L(-3.2206394539524058873423550293617843896540E-3), -L(-2.5942708080877805657374888909297113032132E-3), -L(-2.0385211375711716729239156839929281289086E-3), -L(-1.5522183228760777967376942769773768850872E-3), -L(-1.1342191863606077520036253234446621373191E-3), -L(-7.8340854719967065861624024730268350459991E-4), -L(-4.9869831458030115699628274852562992756174E-4), -L(-2.7902661731604211834685052867305795169688E-4), -L(-1.2335696813916860754951146082826952093496E-4), -L(-3.0677461025892873184042490943581654591817E-5), -#define ZERO logtbl[38] - L(0.0000000000000000000000000000000000000000E0), -L(-3.0359557945051052537099938863236321874198E-5), -L(-1.2081346403474584914595395755316412213151E-4), -L(-2.7044071846562177120083903771008342059094E-4), -L(-4.7834133324631162897179240322783590830326E-4), -L(-7.4363569786340080624467487620270965403695E-4), -L(-1.0654639687057968333207323853366578860679E-3), -L(-1.4429854811877171341298062134712230604279E-3), -L(-1.8753781835651574193938679595797367137975E-3), -L(-2.3618380914922506054347222273705859653658E-3), -L(-2.9015787624124743013946600163375853631299E-3), -L(-3.4938307889254087318399313316921940859043E-3), -L(-4.1378413103128673800485306215154712148146E-3), -L(-4.8328735414488877044289435125365629849599E-3), -L(-5.5782063183564351739381962360253116934243E-3), -L(-6.3731336597098858051938306767880719015261E-3), -L(-7.2169643436165454612058905294782949315193E-3), -L(-8.1090214990427641365934846191367315083867E-3), -L(-9.0486422112807274112838713105168375482480E-3), -L(-1.0035177140880864314674126398350812606841E-2), -L(-1.1067990155502102718064936259435676477423E-2), -L(-1.2146457974158024928196575103115488672416E-2), -L(-1.3269969823361415906628825374158424754308E-2), -L(-1.4437927104692837124388550722759686270765E-2), -L(-1.5649743073340777659901053944852735064621E-2), -L(-1.6904842527181702880599758489058031645317E-2), -L(-1.8202661505988007336096407340750378994209E-2), -L(-1.9542647000370545390701192438691126552961E-2), -L(-2.0924256670080119637427928803038530924742E-2), -L(-2.2346958571309108496179613803760727786257E-2), -L(-2.3810230892650362330447187267648486279460E-2), -L(-2.5313561699385640380910474255652501521033E-2), -L(-2.6856448685790244233704909690165496625399E-2), -L(-2.8438398935154170008519274953860128449036E-2), -L(-3.0058928687233090922411781058956589863039E-2), -L(-3.1717563112854831855692484086486099896614E-2), -L(-3.3413836095418743219397234253475252001090E-2), -L(-3.5147290019036555862676702093393332533702E-2), -L(-3.6917475563073933027920505457688955423688E-2), -L(-3.8723951502862058660874073462456610731178E-2), -L(-4.0566284516358241168330505467000838017425E-2), -L(-4.2444048996543693813649967076598766917965E-2), -L(-4.4356826869355401653098777649745233339196E-2), -L(-4.6304207416957323121106944474331029996141E-2), -L(-4.8285787106164123613318093945035804818364E-2), -L(-5.0301169421838218987124461766244507342648E-2), -L(-5.2349964705088137924875459464622098310997E-2), -L(-5.4431789996103111613753440311680967840214E-2), -L(-5.6546268881465384189752786409400404404794E-2), -L(-5.8693031345788023909329239565012647817664E-2), -L(-6.0871713627532018185577188079210189048340E-2), -L(-6.3081958078862169742820420185833800925568E-2), -L(-6.5323413029406789694910800219643791556918E-2), -L(-6.7595732653791419081537811574227049288168E-2) -}; - -/* ln(2) = ln2a + ln2b with extended precision. */ -static const _Float128 - ln2a = L(6.93145751953125e-1), - ln2b = L(1.4286068203094172321214581765680755001344E-6); - -_Float128 -__ieee754_logl(_Float128 x) -{ - _Float128 z, y, w; - ieee854_long_double_shape_type u, t; - unsigned int m; - int k, e; - - u.value = x; - m = u.parts32.w0; - - /* Check for IEEE special cases. */ - k = m & 0x7fffffff; - /* log(0) = -infinity. */ - if ((k | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - { - return L(-0.5) / ZERO; - } - /* log ( x < 0 ) = NaN */ - if (m & 0x80000000) - { - return (x - x) / ZERO; - } - /* log (infinity or NaN) */ - if (k >= 0x7fff0000) - { - return x + x; - } - - /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625 */ - u.value = __frexpl (x, &e); - m = u.parts32.w0 & 0xffff; - m |= 0x10000; - /* Find lookup table index k from high order bits of the significand. */ - if (m < 0x16800) - { - k = (m - 0xff00) >> 9; - /* t is the argument 0.5 + (k+26)/128 - of the nearest item to u in the lookup table. */ - t.parts32.w0 = 0x3fff0000 + (k << 9); - t.parts32.w1 = 0; - t.parts32.w2 = 0; - t.parts32.w3 = 0; - u.parts32.w0 += 0x10000; - e -= 1; - k += 64; - } - else - { - k = (m - 0xfe00) >> 10; - t.parts32.w0 = 0x3ffe0000 + (k << 10); - t.parts32.w1 = 0; - t.parts32.w2 = 0; - t.parts32.w3 = 0; - } - /* On this interval the table is not used due to cancellation error. */ - if ((x <= L(1.0078125)) && (x >= L(0.9921875))) - { - if (x == 1) - return 0; - z = x - 1; - k = 64; - t.value = 1; - e = 0; - } - else - { - /* log(u) = log( t u/t ) = log(t) + log(u/t) - log(t) is tabulated in the lookup table. - Express log(u/t) = log(1+z), where z = u/t - 1 = (u-t)/t. - cf. Cody & Waite. */ - z = (u.value - t.value) / t.value; - } - /* Series expansion of log(1+z). */ - w = z * z; - y = ((((((((((((l15 * z - + l14) * z - + l13) * z - + l12) * z - + l11) * z - + l10) * z - + l9) * z - + l8) * z - + l7) * z - + l6) * z - + l5) * z - + l4) * z - + l3) * z * w; - y -= 0.5 * w; - y += e * ln2b; /* Base 2 exponent offset times ln(2). */ - y += z; - y += logtbl[k-26]; /* log(t) - (t-1) */ - y += (t.value - 1); - y += e * ln2a; - return y; -} -strong_alias (__ieee754_logl, __logl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_powl.c b/sysdeps/ieee754/ldbl-128/e_powl.c deleted file mode 100644 index a344840090..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_powl.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Expansions and modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_powl(x,y) return x**y - * - * n - * Method: Let x = 2 * (1+f) - * 1. Compute and return log2(x) in two pieces: - * log2(x) = w1 + w2, - * where w1 has 113-53 = 60 bit trailing zeros. - * 2. Perform y*log2(x) = n+y' by simulating muti-precision - * arithmetic, where |y'|<=0.5. - * 3. Return x**y = 2**n*exp(y'*log2) - * - * Special cases: - * 1. (anything) ** 0 is 1 - * 2. (anything) ** 1 is itself - * 3. (anything) ** NAN is NAN - * 4. NAN ** (anything except 0) is NAN - * 5. +-(|x| > 1) ** +INF is +INF - * 6. +-(|x| > 1) ** -INF is +0 - * 7. +-(|x| < 1) ** +INF is +0 - * 8. +-(|x| < 1) ** -INF is +INF - * 9. +-1 ** +-INF is NAN - * 10. +0 ** (+anything except 0, NAN) is +0 - * 11. -0 ** (+anything except 0, NAN, odd integer) is +0 - * 12. +0 ** (-anything except 0, NAN) is +INF - * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF - * 14. -0 ** (odd integer) = -( +0 ** (odd integer) ) - * 15. +INF ** (+anything except 0,NAN) is +INF - * 16. +INF ** (-anything except 0,NAN) is +0 - * 17. -INF ** (anything) = -0 ** (-anything) - * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) - * 19. (-anything except 0 and inf) ** (non-integer) is NAN - * - */ - -#include -#include - -static const _Float128 bp[] = { - 1, - L(1.5), -}; - -/* log_2(1.5) */ -static const _Float128 dp_h[] = { - 0.0, - L(5.8496250072115607565592654282227158546448E-1) -}; - -/* Low part of log_2(1.5) */ -static const _Float128 dp_l[] = { - 0.0, - L(1.0579781240112554492329533686862998106046E-16) -}; - -static const _Float128 zero = 0, - one = 1, - two = 2, - two113 = L(1.0384593717069655257060992658440192E34), - huge = L(1.0e3000), - tiny = L(1.0e-3000); - -/* 3/2 log x = 3 z + z^3 + z^3 (z^2 R(z^2)) - z = (x-1)/(x+1) - 1 <= x <= 1.25 - Peak relative error 2.3e-37 */ -static const _Float128 LN[] = -{ - L(-3.0779177200290054398792536829702930623200E1), - L(6.5135778082209159921251824580292116201640E1), - L(-4.6312921812152436921591152809994014413540E1), - L(1.2510208195629420304615674658258363295208E1), - L(-9.9266909031921425609179910128531667336670E-1) -}; -static const _Float128 LD[] = -{ - L(-5.129862866715009066465422805058933131960E1), - L(1.452015077564081884387441590064272782044E2), - L(-1.524043275549860505277434040464085593165E2), - L(7.236063513651544224319663428634139768808E1), - L(-1.494198912340228235853027849917095580053E1) - /* 1.0E0 */ -}; - -/* exp(x) = 1 + x - x / (1 - 2 / (x - x^2 R(x^2))) - 0 <= x <= 0.5 - Peak relative error 5.7e-38 */ -static const _Float128 PN[] = -{ - L(5.081801691915377692446852383385968225675E8), - L(9.360895299872484512023336636427675327355E6), - L(4.213701282274196030811629773097579432957E4), - L(5.201006511142748908655720086041570288182E1), - L(9.088368420359444263703202925095675982530E-3), -}; -static const _Float128 PD[] = -{ - L(3.049081015149226615468111430031590411682E9), - L(1.069833887183886839966085436512368982758E8), - L(8.259257717868875207333991924545445705394E5), - L(1.872583833284143212651746812884298360922E3), - /* 1.0E0 */ -}; - -static const _Float128 - /* ln 2 */ - lg2 = L(6.9314718055994530941723212145817656807550E-1), - lg2_h = L(6.9314718055994528622676398299518041312695E-1), - lg2_l = L(2.3190468138462996154948554638754786504121E-17), - ovt = L(8.0085662595372944372e-0017), - /* 2/(3*log(2)) */ - cp = L(9.6179669392597560490661645400126142495110E-1), - cp_h = L(9.6179669392597555432899980587535537779331E-1), - cp_l = L(5.0577616648125906047157785230014751039424E-17); - -_Float128 -__ieee754_powl (_Float128 x, _Float128 y) -{ - _Float128 z, ax, z_h, z_l, p_h, p_l; - _Float128 y1, t1, t2, r, s, sgn, t, u, v, w; - _Float128 s2, s_h, s_l, t_h, t_l, ay; - int32_t i, j, k, yisint, n; - u_int32_t ix, iy; - int32_t hx, hy; - ieee854_long_double_shape_type o, p, q; - - p.value = x; - hx = p.parts32.w0; - ix = hx & 0x7fffffff; - - q.value = y; - hy = q.parts32.w0; - iy = hy & 0x7fffffff; - - - /* y==zero: x**0 = 1 */ - if ((iy | q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0 - && !issignaling (x)) - return one; - - /* 1.0**y = 1; -1.0**+-Inf = 1 */ - if (x == one && !issignaling (y)) - return one; - if (x == -1 && iy == 0x7fff0000 - && (q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0) - return one; - - /* +-NaN return x+y */ - if ((ix > 0x7fff0000) - || ((ix == 0x7fff0000) - && ((p.parts32.w1 | p.parts32.w2 | p.parts32.w3) != 0)) - || (iy > 0x7fff0000) - || ((iy == 0x7fff0000) - && ((q.parts32.w1 | q.parts32.w2 | q.parts32.w3) != 0))) - return x + y; - - /* determine if y is an odd int when x < 0 - * yisint = 0 ... y is not an integer - * yisint = 1 ... y is an odd int - * yisint = 2 ... y is an even int - */ - yisint = 0; - if (hx < 0) - { - if (iy >= 0x40700000) /* 2^113 */ - yisint = 2; /* even integer y */ - else if (iy >= 0x3fff0000) /* 1.0 */ - { - if (__floorl (y) == y) - { - z = 0.5 * y; - if (__floorl (z) == z) - yisint = 2; - else - yisint = 1; - } - } - } - - /* special value of y */ - if ((q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0) - { - if (iy == 0x7fff0000) /* y is +-inf */ - { - if (((ix - 0x3fff0000) | p.parts32.w1 | p.parts32.w2 | p.parts32.w3) - == 0) - return y - y; /* +-1**inf is NaN */ - else if (ix >= 0x3fff0000) /* (|x|>1)**+-inf = inf,0 */ - return (hy >= 0) ? y : zero; - else /* (|x|<1)**-,+inf = inf,0 */ - return (hy < 0) ? -y : zero; - } - if (iy == 0x3fff0000) - { /* y is +-1 */ - if (hy < 0) - return one / x; - else - return x; - } - if (hy == 0x40000000) - return x * x; /* y is 2 */ - if (hy == 0x3ffe0000) - { /* y is 0.5 */ - if (hx >= 0) /* x >= +0 */ - return __ieee754_sqrtl (x); - } - } - - ax = fabsl (x); - /* special value of x */ - if ((p.parts32.w1 | p.parts32.w2 | p.parts32.w3) == 0) - { - if (ix == 0x7fff0000 || ix == 0 || ix == 0x3fff0000) - { - z = ax; /*x is +-0,+-inf,+-1 */ - if (hy < 0) - z = one / z; /* z = (1/|x|) */ - if (hx < 0) - { - if (((ix - 0x3fff0000) | yisint) == 0) - { - z = (z - z) / (z - z); /* (-1)**non-int is NaN */ - } - else if (yisint == 1) - z = -z; /* (x<0)**odd = -(|x|**odd) */ - } - return z; - } - } - - /* (x<0)**(non-int) is NaN */ - if (((((u_int32_t) hx >> 31) - 1) | yisint) == 0) - return (x - x) / (x - x); - - /* sgn (sign of result -ve**odd) = -1 else = 1 */ - sgn = one; - if (((((u_int32_t) hx >> 31) - 1) | (yisint - 1)) == 0) - sgn = -one; /* (-ve)**(odd int) */ - - /* |y| is huge. - 2^-16495 = 1/2 of smallest representable value. - If (1 - 1/131072)^y underflows, y > 1.4986e9 */ - if (iy > 0x401d654b) - { - /* if (1 - 2^-113)^y underflows, y > 1.1873e38 */ - if (iy > 0x407d654b) - { - if (ix <= 0x3ffeffff) - return (hy < 0) ? huge * huge : tiny * tiny; - if (ix >= 0x3fff0000) - return (hy > 0) ? huge * huge : tiny * tiny; - } - /* over/underflow if x is not close to one */ - if (ix < 0x3ffeffff) - return (hy < 0) ? sgn * huge * huge : sgn * tiny * tiny; - if (ix > 0x3fff0000) - return (hy > 0) ? sgn * huge * huge : sgn * tiny * tiny; - } - - ay = y > 0 ? y : -y; - if (ay < 0x1p-128) - y = y < 0 ? -0x1p-128 : 0x1p-128; - - n = 0; - /* take care subnormal number */ - if (ix < 0x00010000) - { - ax *= two113; - n -= 113; - o.value = ax; - ix = o.parts32.w0; - } - n += ((ix) >> 16) - 0x3fff; - j = ix & 0x0000ffff; - /* determine interval */ - ix = j | 0x3fff0000; /* normalize ix */ - if (j <= 0x3988) - k = 0; /* |x|= 0x400d0000) /* z >= 16384 */ - { - /* if z > 16384 */ - if (((j - 0x400d0000) | o.parts32.w1 | o.parts32.w2 | o.parts32.w3) != 0) - return sgn * huge * huge; /* overflow */ - else - { - if (p_l + ovt > z - p_h) - return sgn * huge * huge; /* overflow */ - } - } - else if ((j & 0x7fffffff) >= 0x400d01b9) /* z <= -16495 */ - { - /* z < -16495 */ - if (((j - 0xc00d01bc) | o.parts32.w1 | o.parts32.w2 | o.parts32.w3) - != 0) - return sgn * tiny * tiny; /* underflow */ - else - { - if (p_l <= z - p_h) - return sgn * tiny * tiny; /* underflow */ - } - } - /* compute 2**(p_h+p_l) */ - i = j & 0x7fffffff; - k = (i >> 16) - 0x3fff; - n = 0; - if (i > 0x3ffe0000) - { /* if |z| > 0.5, set n = [z+0.5] */ - n = __floorl (z + L(0.5)); - t = n; - p_h -= t; - } - t = p_l + p_h; - o.value = t; - o.parts32.w3 = 0; - o.parts32.w2 &= 0xf8000000; - t = o.value; - u = t * lg2_h; - v = (p_l - (t - p_h)) * lg2 + t * lg2_l; - z = u + v; - w = v - (z - u); - /* exp(z) */ - t = z * z; - u = PN[0] + t * (PN[1] + t * (PN[2] + t * (PN[3] + t * PN[4]))); - v = PD[0] + t * (PD[1] + t * (PD[2] + t * (PD[3] + t))); - t1 = z - t * u / v; - r = (z * t1) / (t1 - two) - (w + z * w); - z = one - (r - z); - o.value = z; - j = o.parts32.w0; - j += (n << 16); - if ((j >> 16) <= 0) - { - z = __scalbnl (z, n); /* subnormal output */ - _Float128 force_underflow = z * z; - math_force_eval (force_underflow); - } - else - { - o.parts32.w0 = j; - z = o.value; - } - return sgn * z; -} -strong_alias (__ieee754_powl, __powl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c deleted file mode 100644 index 21b440762f..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c +++ /dev/null @@ -1,273 +0,0 @@ -/* Quad-precision floating point argument reduction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* - * Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi - */ -static const int32_t two_over_pi[] = { -0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62, -0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a, -0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129, -0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41, -0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8, -0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf, -0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5, -0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08, -0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3, -0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880, -0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b, -0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6, -0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2, -0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35, -0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30, -0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c, -0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4, -0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770, -0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7, -0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19, -0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522, -0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16, -0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6, -0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e, -0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48, -0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3, -0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf, -0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55, -0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612, -0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929, -0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec, -0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b, -0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c, -0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4, -0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb, -0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc, -0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c, -0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f, -0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5, -0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437, -0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b, -0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea, -0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad, -0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3, -0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3, -0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717, -0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f, -0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61, -0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db, -0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51, -0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0, -0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c, -0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6, -0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc, -0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed, -0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328, -0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d, -0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0, -0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b, -0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4, -0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3, -0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f, -0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad, -0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b, -0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4, -0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761, -0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31, -0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30, -0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262, -0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e, -0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1, -0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c, -0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4, -0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08, -0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196, -0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9, -0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4, -0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc, -0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c, -0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0, -0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c, -0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0, -0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac, -0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22, -0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893, -0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7, -0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5, -0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f, -0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4, -0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf, -0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b, -0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2, -0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138, -0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e, -0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569, -0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34, -0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9, -0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d, -0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f, -0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855, -0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569, -0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b, -0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe, -0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41, -0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49, -0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f, -0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110, -0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8, -0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365, -0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a, -0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270, -0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5, -0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616, -0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b, -0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0, -0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb, -0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a, -0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e, -0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa, -0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5, -0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0, -0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2, -0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886, -0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142, -0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba, -0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4, -0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708, -0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555, -0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3, -0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55, -0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58, -0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5, -0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c, -0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe, -0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b, -0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8, -0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005, -0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7, -0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50, -0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604, -0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643, -0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485, -0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d, -0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6, -0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2, -0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02, -0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3, -0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412, -0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274, -0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755, -0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849, -0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce, -0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5, -0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba, -0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6, -0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d, -0x7b7b89, 0x483d38, -}; - -static const _Float128 c[] = { -/* 113 bits of pi/2 */ -#define PI_2_1 c[0] - L(0x1.921fb54442d18469898cc51701b8p+0), - -/* pi/2 - PI_2_1 */ -#define PI_2_1t c[1] - L(0x3.9a252049c1114cf98e804177d4c8p-116), -}; - -int32_t __ieee754_rem_pio2l(_Float128 x, _Float128 *y) -{ - _Float128 z, w, t; - double tx[8]; - int64_t exp, n, ix, hx; - u_int64_t lx; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - ix = hx & 0x7fffffffffffffffLL; - if (ix <= 0x3ffe921fb54442d1LL) /* x in <-pi/4, pi/4> */ - { - y[0] = x; - y[1] = 0; - return 0; - } - - if (ix < 0x40002d97c7f3321dLL) /* |x| in 0) - { - /* 113 + 113 bit PI is ok */ - z = x - PI_2_1; - y[0] = z - PI_2_1t; - y[1] = (z - y[0]) - PI_2_1t; - return 1; - } - else - { - /* 113 + 113 bit PI is ok */ - z = x + PI_2_1; - y[0] = z + PI_2_1t; - y[1] = (z - y[0]) + PI_2_1t; - return -1; - } - } - - if (ix >= 0x7fff000000000000LL) /* x is +=oo or NaN */ - { - y[0] = x - x; - y[1] = y[0]; - return 0; - } - - /* Handle large arguments. - We split the 113 bits of the mantissa into 5 24bit integers - stored in a double array. */ - exp = (ix >> 48) - 16383 - 23; - - /* This is faster than doing this in floating point, because we - have to convert it to integers anyway and like this we can keep - both integer and floating point units busy. */ - tx [0] = (double)(((ix >> 25) & 0x7fffff) | 0x800000); - tx [1] = (double)((ix >> 1) & 0xffffff); - tx [2] = (double)(((ix << 23) | (lx >> 41)) & 0xffffff); - tx [3] = (double)((lx >> 17) & 0xffffff); - tx [4] = (double)((lx << 7) & 0xffffff); - - n = __kernel_rem_pio2 (tx, tx + 5, exp, ((lx << 7) & 0xffffff) ? 5 : 4, - 3, two_over_pi); - - /* The result is now stored in 3 double values, we need to convert it into - two long double values. */ - t = (_Float128) tx [6] + (_Float128) tx [7]; - w = (_Float128) tx [5]; - - if (hx >= 0) - { - y[0] = w + t; - y[1] = t - (y[0] - w); - return n; - } - else - { - y[0] = -(w + t); - y[1] = -t - (y[0] + w); - return -n; - } -} diff --git a/sysdeps/ieee754/ldbl-128/e_remainderl.c b/sysdeps/ieee754/ldbl-128/e_remainderl.c deleted file mode 100644 index c1c196ca9a..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_remainderl.c +++ /dev/null @@ -1,71 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_remainderl(x,p) - * Return : - * returns x REM p = x - [x/p]*p as if in infinite - * precise arithmetic, where [x/p] is the (infinite bit) - * integer nearest x/p (in half way case choose the even one). - * Method : - * Based on fmodl() return x-[x/p]chopped*p exactlp. - */ - -#include -#include - -static const _Float128 zero = 0; - - -_Float128 -__ieee754_remainderl(_Float128 x, _Float128 p) -{ - int64_t hx,hp; - u_int64_t sx,lx,lp; - _Float128 p_half; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hp,lp,p); - sx = hx&0x8000000000000000ULL; - hp &= 0x7fffffffffffffffLL; - hx &= 0x7fffffffffffffffLL; - - /* purge off exception values */ - if((hp|lp)==0) return (x*p)/(x*p); /* p = 0 */ - if((hx>=0x7fff000000000000LL)|| /* x not finite */ - ((hp>=0x7fff000000000000LL)&& /* p is NaN */ - (((hp-0x7fff000000000000LL)|lp)!=0))) - return (x*p)/(x*p); - - - if (hp<=0x7ffdffffffffffffLL) x = __ieee754_fmodl(x,p+p); /* now x < 2p */ - if (((hx-hp)|(lx-lp))==0) return zero*x; - x = fabsl(x); - p = fabsl(p); - if (hp<0x0002000000000000LL) { - if(x+x>p) { - x-=p; - if(x+x>=p) x -= p; - } - } else { - p_half = L(0.5)*p; - if(x>p_half) { - x-=p; - if(x>=p_half) x -= p; - } - } - GET_LDOUBLE_MSW64(hx,x); - SET_LDOUBLE_MSW64(x,hx^sx); - return x; -} -strong_alias (__ieee754_remainderl, __remainderl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_sinhl.c b/sysdeps/ieee754/ldbl-128/e_sinhl.c deleted file mode 100644 index a2b30c2190..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_sinhl.c +++ /dev/null @@ -1,117 +0,0 @@ -/* e_sinhl.c -- long double version of e_sinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_sinhl(x) - * Method : - * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinhl(-x) = -sinhl(x)). - * 2. - * E + E/(E+1) - * 0 <= x <= 25 : sinhl(x) := --------------, E=expm1l(x) - * 2 - * - * 25 <= x <= lnovft : sinhl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: sinhl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : sinhl(x) := x*shuge (overflow) - * - * Special cases: - * sinhl(x) is |x| if x is +INF, -INF, or NaN. - * only sinhl(0)=0 is exact for finite x. - */ - -#include -#include -#include - -static const _Float128 one = 1.0, shuge = L(1.0e4931), -ovf_thresh = L(1.1357216553474703894801348310092223067821E4); - -_Float128 -__ieee754_sinhl (_Float128 x) -{ - _Float128 t, w, h; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - /* Words of |x|. */ - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - - /* x is INF or NaN */ - if (ix >= 0x7fff0000) - return x + x; - - h = 0.5; - if (jx & 0x80000000) - h = -h; - - /* Absolute value of x. */ - u.parts32.w0 = ix; - - /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix <= 0x40044000) - { - if (ix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (shuge + x > one) - return x; /* sinh(tiny) = tiny with inexact */ - } - t = __expm1l (u.value); - if (ix < 0x3fff0000) - return h * (2.0 * t - t * t / (t + one)); - return h * (t + t / (t + one)); - } - - /* |x| in [40, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix <= 0x400c62e3) /* 11356.375 */ - return h * __ieee754_expl (u.value); - - /* |x| in [log(maxdouble), overflowthreshold] - Overflow threshold is log(2 * maxdouble). */ - if (u.value <= ovf_thresh) - { - w = __ieee754_expl (0.5 * u.value); - t = h * w; - return t * w; - } - - /* |x| > overflowthreshold, sinhl(x) overflow */ - return x * shuge; -} -strong_alias (__ieee754_sinhl, __sinhl_finite) diff --git a/sysdeps/ieee754/ldbl-128/gamma_productl.c b/sysdeps/ieee754/ldbl-128/gamma_productl.c deleted file mode 100644 index 319a45119e..0000000000 --- a/sysdeps/ieee754/ldbl-128/gamma_productl.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -_Float128 -__gamma_productl (_Float128 x, _Float128 x_eps, int n, _Float128 *eps) -{ - SET_RESTORE_ROUNDL (FE_TONEAREST); - _Float128 ret = x; - *eps = x_eps / x; - for (int i = 1; i < n; i++) - { - *eps += x_eps / (x + i); - _Float128 lo; - mul_splitl (&ret, &lo, ret, x + i); - *eps += lo / ret; - } - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128/ieee754.h b/sysdeps/ieee754/ldbl-128/ieee754.h deleted file mode 100644 index 94662a350f..0000000000 --- a/sysdeps/ieee754/ldbl-128/ieee754.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 quad-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:16; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:16; - unsigned int exponent:15; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:15; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:15; - unsigned int quiet_nan:1; - unsigned int exponent:15; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/ieee754/ldbl-128/k_cosl.c b/sysdeps/ieee754/ldbl-128/k_cosl.c deleted file mode 100644 index b7c606379e..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_cosl.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Quad-precision floating point cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] -L(-4.99999999999999999999999999999999759E-01), /* bffdfffffffffffffffffffffffffffb */ - L(4.16666666666666666666666666651287795E-02), /* 3ffa5555555555555555555555516f30 */ -L(-1.38888888888888888888888742314300284E-03), /* bff56c16c16c16c16c16c16a463dfd0d */ - L(2.48015873015873015867694002851118210E-05), /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ -L(-2.75573192239858811636614709689300351E-07), /* bfe927e4fb7789f5aa8142a22044b51f */ - L(2.08767569877762248667431926878073669E-09), /* 3fe21eed8eff881d1e9262d7adff4373 */ -L(-1.14707451049343817400420280514614892E-11), /* bfda9397496922a9601ed3d4ca48944b */ - L(4.77810092804389587579843296923533297E-14), /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -_Float128 -__kernel_cosl(_Float128 x, _Float128 y) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16. */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - if (!((int)x)) return ONE; /* generate inexact */ - z = x * x; - return ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - l = y - (h - x); - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - return __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_sincosl.c b/sysdeps/ieee754/ldbl-128/k_sincosl.c deleted file mode 100644 index 03710f9e3a..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_sincosl.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Quad-precision floating point sine and cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] -L(-4.99999999999999999999999999999999759E-01), /* bffdfffffffffffffffffffffffffffb */ - L(4.16666666666666666666666666651287795E-02), /* 3ffa5555555555555555555555516f30 */ -L(-1.38888888888888888888888742314300284E-03), /* bff56c16c16c16c16c16c16a463dfd0d */ - L(2.48015873015873015867694002851118210E-05), /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ -L(-2.75573192239858811636614709689300351E-07), /* bfe927e4fb7789f5aa8142a22044b51f */ - L(2.08767569877762248667431926878073669E-09), /* 3fe21eed8eff881d1e9262d7adff4373 */ -L(-1.14707451049343817400420280514614892E-11), /* bfda9397496922a9601ed3d4ca48944b */ - L(4.77810092804389587579843296923533297E-14), /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[19] -#define SIN2 c[20] -#define SIN3 c[21] -#define SIN4 c[22] -#define SIN5 c[23] -#define SIN6 c[24] -#define SIN7 c[25] -#define SIN8 c[26] -L(-1.66666666666666666666666666666666538e-01), /* bffc5555555555555555555555555550 */ - L(8.33333333333333333333333333307532934e-03), /* 3ff811111111111111111111110e7340 */ -L(-1.98412698412698412698412534478712057e-04), /* bff2a01a01a01a01a01a019e7a626296 */ - L(2.75573192239858906520896496653095890e-06), /* 3fec71de3a556c7338fa38527474b8f5 */ -L(-2.50521083854417116999224301266655662e-08), /* bfe5ae64567f544e16c7de65c2ea551f */ - L(1.60590438367608957516841576404938118e-10), /* 3fde6124613a811480538a9a41957115 */ -L(-7.64716343504264506714019494041582610e-13), /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - L(2.81068754939739570236322404393398135e-15), /* 3fce9510115aabf87aceb2022a9a9180 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -void -__kernel_sincosl(_Float128 x, _Float128 y, _Float128 *sinx, _Float128 *cosx, int iy) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16(17). */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) /* generate inexact */ - { - *sinx = x; - *cosx = ONE; - return; - } - } - z = x * x; - *sinx = x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - *cosx = ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l) and - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - if (iy) - l = y - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - *sinx = (ix < 0) ? -z : z; - *cosx = __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_sinl.c b/sysdeps/ieee754/ldbl-128/k_sinl.c deleted file mode 100644 index 4107eeb9f9..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_sinl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Quad-precision floating point sine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[6] -#define SIN2 c[7] -#define SIN3 c[8] -#define SIN4 c[9] -#define SIN5 c[10] -#define SIN6 c[11] -#define SIN7 c[12] -#define SIN8 c[13] -L(-1.66666666666666666666666666666666538e-01), /* bffc5555555555555555555555555550 */ - L(8.33333333333333333333333333307532934e-03), /* 3ff811111111111111111111110e7340 */ -L(-1.98412698412698412698412534478712057e-04), /* bff2a01a01a01a01a01a019e7a626296 */ - L(2.75573192239858906520896496653095890e-06), /* 3fec71de3a556c7338fa38527474b8f5 */ -L(-2.50521083854417116999224301266655662e-08), /* bfe5ae64567f544e16c7de65c2ea551f */ - L(1.60590438367608957516841576404938118e-10), /* 3fde6124613a811480538a9a41957115 */ -L(-7.64716343504264506714019494041582610e-13), /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - L(2.81068754939739570236322404393398135e-15), /* 3fce9510115aabf87aceb2022a9a9180 */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -_Float128 -__kernel_sinl(_Float128 x, _Float128 y, int iy) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 17. */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) return x; /* generate inexact */ - } - z = x * x; - return x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - if (iy) - l = (ix < 0 ? -y : y) - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - return (ix < 0) ? -z : z; - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_tanl.c b/sysdeps/ieee754/ldbl-128/k_tanl.c deleted file mode 100644 index e79023c69a..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_tanl.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __kernel_tanl( x, y, k ) - * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k=1) or - * -1/tan (if k= -1) is returned. - * - * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. if x < 2^-57, return x with inexact if x!=0. - * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) - * on [0,0.67433]. - * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * r = x^3 * R(x^2) - * then - * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) - * - * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - -#include -#include -#include -#include - -static const _Float128 - one = 1, - pio4hi = L(7.8539816339744830961566084581987569936977E-1), - pio4lo = L(2.1679525325309452561992610065108379921906E-35), - - /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) - 0 <= x <= 0.6743316650390625 - Peak relative error 8.0e-36 */ - TH = L(3.333333333333333333333333333333333333333E-1), - T0 = L(-1.813014711743583437742363284336855889393E7), - T1 = L(1.320767960008972224312740075083259247618E6), - T2 = L(-2.626775478255838182468651821863299023956E4), - T3 = L(1.764573356488504935415411383687150199315E2), - T4 = L(-3.333267763822178690794678978979803526092E-1), - - U0 = L(-1.359761033807687578306772463253710042010E8), - U1 = L(6.494370630656893175666729313065113194784E7), - U2 = L(-4.180787672237927475505536849168729386782E6), - U3 = L(8.031643765106170040139966622980914621521E4), - U4 = L(-5.323131271912475695157127875560667378597E2); - /* 1.000000000000000000000000000000000000000E0 */ - - -_Float128 -__kernel_tanl (_Float128 x, _Float128 y, int iy) -{ - _Float128 z, r, v, w, s; - int32_t ix, sign; - ieee854_long_double_shape_type u, u1; - - u.value = x; - ix = u.parts32.w0 & 0x7fffffff; - if (ix < 0x3fc60000) /* x < 2**-57 */ - { - if ((int) x == 0) - { /* generate inexact */ - if ((ix | u.parts32.w1 | u.parts32.w2 | u.parts32.w3 - | (iy + 1)) == 0) - return one / fabsl (x); - else if (iy == 1) - { - math_check_force_underflow (x); - return x; - } - else - return -one / x; - } - } - if (ix >= 0x3ffe5942) /* |x| >= 0.6743316650390625 */ - { - if ((u.parts32.w0 & 0x80000000) != 0) - { - x = -x; - y = -y; - sign = -1; - } - else - sign = 1; - z = pio4hi - x; - w = pio4lo - y; - x = z + w; - y = 0.0; - } - z = x * x; - r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); - v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); - r = r / v; - - s = z * x; - r = y + z * (s * r + y); - r += TH * s; - w = x + r; - if (ix >= 0x3ffe5942) - { - v = (_Float128) iy; - w = (v - 2.0 * (x - (w * w / (w + v) - r))); - /* SIGN is set for arguments that reach this code, but not - otherwise, resulting in warnings that it may be used - uninitialized although in the cases where it is used it has - always been set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); - if (sign < 0) - w = -w; - DIAG_POP_NEEDS_COMMENT; - return w; - } - if (iy == 1) - return w; - else - { /* if allow error up to 2 ulp, - simply return -1.0/(x+r) here */ - /* compute -1.0/(x+r) accurately */ - u1.value = w; - u1.parts32.w2 = 0; - u1.parts32.w3 = 0; - v = r - (u1.value - x); /* u1+v = r+x */ - z = -1.0 / w; - u.value = z; - u.parts32.w2 = 0; - u.parts32.w3 = 0; - s = 1.0 + u.value * u1.value; - return u.value + z * (s + u.value * v); - } -} diff --git a/sysdeps/ieee754/ldbl-128/ldbl2mpn.c b/sysdeps/ieee754/ldbl-128/ldbl2mpn.c deleted file mode 100644 index 1c79a5dbe5..0000000000 --- a/sysdeps/ieee754/ldbl-128/ldbl2mpn.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include -#include -#include - -/* Convert a `long double' in IEEE854 quad-precision format to a - multi-precision integer representing the significand scaled up by its - number of bits (113 for long double) and an integral power of two - (MPN frexpl). */ - -mp_size_t -__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - _Float128 value) -{ - union ieee854_long_double u; - u.d = value; - - *is_neg = u.ieee.negative; - *expt = (int) u.ieee.exponent - IEEE854_LONG_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - res_ptr[0] = u.ieee.mantissa3; /* Low-order 32 bits of fraction. */ - res_ptr[1] = u.ieee.mantissa2; - res_ptr[2] = u.ieee.mantissa1; - res_ptr[3] = u.ieee.mantissa0; /* High-order 32 bits. */ - #define N 4 -#elif BITS_PER_MP_LIMB == 64 - /* Hopefully the compiler will combine the two bitfield extracts - and this composition into just the original quadword extract. */ - res_ptr[0] = ((mp_limb_t) u.ieee.mantissa2 << 32) | u.ieee.mantissa3; - res_ptr[1] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; - #define N 2 -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif -/* The format does not fill the last limb. There are some zeros. */ -#define NUM_LEADING_ZEROS (BITS_PER_MP_LIMB \ - - (LDBL_MANT_DIG - ((N - 1) * BITS_PER_MP_LIMB))) - - if (u.ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[1] == 0 - && res_ptr[N - 2] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=4. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. */ - int cnt; - -#if N == 2 - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - cnt -= NUM_LEADING_ZEROS; - res_ptr[N - 1] = res_ptr[N - 1] << cnt - | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; - *expt = LDBL_MIN_EXP - 1 - cnt; - } - else - { - count_leading_zeros (cnt, res_ptr[0]); - if (cnt >= NUM_LEADING_ZEROS) - { - res_ptr[N - 1] = res_ptr[0] << (cnt - NUM_LEADING_ZEROS); - res_ptr[0] = 0; - } - else - { - res_ptr[N - 1] = res_ptr[0] >> (NUM_LEADING_ZEROS - cnt); - res_ptr[0] <<= BITS_PER_MP_LIMB - (NUM_LEADING_ZEROS - cnt); - } - *expt = LDBL_MIN_EXP - 1 - - (BITS_PER_MP_LIMB - NUM_LEADING_ZEROS) - cnt; - } -#else - int j, k, l; - - for (j = N - 1; j > 0; j--) - if (res_ptr[j] != 0) - break; - - count_leading_zeros (cnt, res_ptr[j]); - cnt -= NUM_LEADING_ZEROS; - l = N - 1 - j; - if (cnt < 0) - { - cnt += BITS_PER_MP_LIMB; - l--; - } - if (!cnt) - for (k = N - 1; k >= l; k--) - res_ptr[k] = res_ptr[k-l]; - else - { - for (k = N - 1; k > l; k--) - res_ptr[k] = res_ptr[k-l] << cnt - | res_ptr[k-l-1] >> (BITS_PER_MP_LIMB - cnt); - res_ptr[k--] = res_ptr[0] << cnt; - } - - for (; k >= 0; k--) - res_ptr[k] = 0; - *expt = LDBL_MIN_EXP - 1 - l * BITS_PER_MP_LIMB - cnt; -#endif - } - } - else - /* Add the implicit leading one bit for a normalized number. */ - res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1 - - ((N - 1) * BITS_PER_MP_LIMB)); - - return N; -} diff --git a/sysdeps/ieee754/ldbl-128/lgamma_negl.c b/sysdeps/ieee754/ldbl-128/lgamma_negl.c deleted file mode 100644 index 17dc4f5bfe..0000000000 --- a/sysdeps/ieee754/ldbl-128/lgamma_negl.c +++ /dev/null @@ -1,551 +0,0 @@ -/* lgammal expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 lgamma_zeros[][2] = - { - { L(-0x2.74ff92c01f0d82abec9f315f1a08p+0), L(0xe.d3ccb7fb2658634a2b9f6b2ba81p-116) }, - { L(-0x2.bf6821437b20197995a4b4641eaep+0), L(-0xb.f4b00b4829f961e428533e6ad048p-116) }, - { L(-0x3.24c1b793cb35efb8be699ad3d9bap+0), L(-0x6.5454cb7fac60e3f16d9d7840c2ep-116) }, - { L(-0x3.f48e2a8f85fca170d4561291236cp+0), L(-0xc.320a4887d1cb4c711828a75d5758p-116) }, - { L(-0x4.0a139e16656030c39f0b0de18114p+0), L(0x1.53e84029416e1242006b2b3d1cfp-112) }, - { L(-0x4.fdd5de9bbabf3510d0aa40769884p+0), L(-0x1.01d7d78125286f78d1e501f14966p-112) }, - { L(-0x5.021a95fc2db6432a4c56e595394cp+0), L(-0x1.ecc6af0430d4fe5746fa7233356fp-112) }, - { L(-0x5.ffa4bd647d0357dd4ed62cbd31ecp+0), L(-0x1.f8e3f8e5deba2d67dbd70dd96ce1p-112) }, - { L(-0x6.005ac9625f233b607c2d96d16384p+0), L(-0x1.cb86ac569340cf1e5f24df7aab7bp-112) }, - { L(-0x6.fff2fddae1bbff3d626b65c23fd4p+0), L(0x1.e0bfcff5c457ebcf4d3ad9674167p-112) }, - { L(-0x7.000cff7b7f87adf4482dcdb98784p+0), L(0x1.54d99e35a74d6407b80292df199fp-112) }, - { L(-0x7.fffe5fe05673c3ca9e82b522b0ccp+0), L(0x1.62d177c832e0eb42c2faffd1b145p-112) }, - { L(-0x8.0001a01459fc9f60cb3cec1cec88p+0), L(0x2.8998835ac7277f7bcef67c47f188p-112) }, - { L(-0x8.ffffd1c425e80ffc864e95749258p+0), L(-0x1.e7e20210e7f81cf781b44e9d2b02p-112) }, - { L(-0x9.00002e3bb47d86d6d843fedc352p+0), L(0x2.14852f613a16291751d2ab751f7ep-112) }, - { L(-0x9.fffffb606bdfdcd062ae77a50548p+0), L(0x3.962d1490cc2e8f031c7007eaa1ap-116) }, - { L(-0xa.0000049f93bb9927b45d95e1544p+0), L(-0x1.e03086db9146a9287bd4f2172d5ap-112) }, - { L(-0xa.ffffff9466e9f1b36dacd2adbd18p+0), L(-0xd.05a4e458062f3f95345a4d9c9b6p-116) }, - { L(-0xb.0000006b9915315d965a6ffea41p+0), L(0x1.b415c6fff233e7b7fdc3a094246fp-112) }, - { L(-0xb.fffffff7089387387de41acc3d4p+0), L(0x3.687427c6373bd74a10306e10a28ep-112) }, - { L(-0xc.00000008f76c7731567c0f0250fp+0), L(-0x3.87920df5675833859190eb128ef6p-112) }, - { L(-0xc.ffffffff4f6dcf617f97a5ffc758p+0), L(0x2.ab72d76f32eaee2d1a42ed515d3ap-116) }, - { L(-0xd.00000000b092309c06683dd1b9p+0), L(-0x3.e3700857a15c19ac5a611de9688ap-112) }, - { L(-0xd.fffffffff36345ab9e184a3e09dp+0), L(-0x1.176dc48e47f62d917973dd44e553p-112) }, - { L(-0xe.000000000c9cba545e94e75ec57p+0), L(-0x1.8f753e2501e757a17cf2ecbeeb89p-112) }, - { L(-0xe.ffffffffff28c060c6604ef3037p+0), L(-0x1.f89d37357c9e3dc17c6c6e63becap-112) }, - { L(-0xf.0000000000d73f9f399bd0e420f8p+0), L(-0x5.e9ee31b0b890744fc0e3fbc01048p-116) }, - { L(-0xf.fffffffffff28c060c6621f512e8p+0), L(0xd.1b2eec9d960bd9adc5be5f5fa5p-116) }, - { L(-0x1.000000000000d73f9f399da1424cp+4), L(0x6.c46e0e88305d2800f0e414c506a8p-116) }, - { L(-0x1.0ffffffffffff3569c47e7a93e1cp+4), L(-0x4.6a08a2e008a998ebabb8087efa2cp-112) }, - { L(-0x1.1000000000000ca963b818568887p+4), L(-0x6.ca5a3a64ec15db0a95caf2c9ffb4p-112) }, - { L(-0x1.1fffffffffffff4bec3ce234132dp+4), L(-0x8.b2b726187c841cb92cd5221e444p-116) }, - { L(-0x1.20000000000000b413c31dcbeca5p+4), L(0x3.c4d005344b6cd0e7231120294abcp-112) }, - { L(-0x1.2ffffffffffffff685b25cbf5f54p+4), L(-0x5.ced932e38485f7dd296b8fa41448p-112) }, - { L(-0x1.30000000000000097a4da340a0acp+4), L(0x7.e484e0e0ffe38d406ebebe112f88p-112) }, - { L(-0x1.3fffffffffffffff86af516ff7f7p+4), L(-0x6.bd67e720d57854502b7db75e1718p-112) }, - { L(-0x1.40000000000000007950ae900809p+4), L(0x6.bec33375cac025d9c073168c5d9p-112) }, - { L(-0x1.4ffffffffffffffffa391c4248c3p+4), L(0x5.c63022b62b5484ba346524db607p-112) }, - { L(-0x1.500000000000000005c6e3bdb73dp+4), L(-0x5.c62f55ed5322b2685c5e9a51e6a8p-112) }, - { L(-0x1.5fffffffffffffffffbcc71a492p+4), L(-0x1.eb5aeb96c74d7ad25e060528fb5p-112) }, - { L(-0x1.6000000000000000004338e5b6ep+4), L(0x1.eb5aec04b2f2eb663e4e3d8a018cp-112) }, - { L(-0x1.6ffffffffffffffffffd13c97d9dp+4), L(-0x3.8fcc4d08d6fe5aa56ab04307ce7ep-112) }, - { L(-0x1.70000000000000000002ec368263p+4), L(0x3.8fcc4d090cee2f5d0b69a99c353cp-112) }, - { L(-0x1.7fffffffffffffffffffe0d30fe7p+4), L(0x7.2f577cca4b4c8cb1dc14001ac5ecp-112) }, - { L(-0x1.800000000000000000001f2cf019p+4), L(-0x7.2f577cca4b3442e35f0040b3b9e8p-112) }, - { L(-0x1.8ffffffffffffffffffffec0c332p+4), L(-0x2.e9a0572b1bb5b95f346a92d67a6p-112) }, - { L(-0x1.90000000000000000000013f3ccep+4), L(0x2.e9a0572b1bb5c371ddb3561705ap-112) }, - { L(-0x1.9ffffffffffffffffffffff3b8bdp+4), L(-0x1.cad8d32e386fd783e97296d63dcbp-116) }, - { L(-0x1.a0000000000000000000000c4743p+4), L(0x1.cad8d32e386fd7c1ab8c1fe34c0ep-116) }, - { L(-0x1.afffffffffffffffffffffff8b95p+4), L(-0x3.8f48cc5737d5979c39db806c5406p-112) }, - { L(-0x1.b00000000000000000000000746bp+4), L(0x3.8f48cc5737d5979c3b3a6bda06f6p-112) }, - { L(-0x1.bffffffffffffffffffffffffbd8p+4), L(0x6.2898d42174dcf171470d8c8c6028p-112) }, - { L(-0x1.c000000000000000000000000428p+4), L(-0x6.2898d42174dcf171470d18ba412cp-112) }, - { L(-0x1.cfffffffffffffffffffffffffdbp+4), L(-0x4.c0ce9794ea50a839e311320bde94p-112) }, - { L(-0x1.d000000000000000000000000025p+4), L(0x4.c0ce9794ea50a839e311322f7cf8p-112) }, - { L(-0x1.dfffffffffffffffffffffffffffp+4), L(0x3.932c5047d60e60caded4c298a174p-112) }, - { L(-0x1.e000000000000000000000000001p+4), L(-0x3.932c5047d60e60caded4c298973ap-112) }, - { L(-0x1.fp+4), L(0xa.1a6973c1fade2170f7237d35fe3p-116) }, - { L(-0x1.fp+4), L(-0xa.1a6973c1fade2170f7237d35fe08p-116) }, - { L(-0x2p+4), L(0x5.0d34b9e0fd6f10b87b91be9aff1p-120) }, - { L(-0x2p+4), L(-0x5.0d34b9e0fd6f10b87b91be9aff0cp-120) }, - { L(-0x2.1p+4), L(0x2.73024a9ba1aa36a7059bff52e844p-124) }, - { L(-0x2.1p+4), L(-0x2.73024a9ba1aa36a7059bff52e844p-124) }, - { L(-0x2.2p+4), L(0x1.2710231c0fd7a13f8a2b4af9d6b7p-128) }, - { L(-0x2.2p+4), L(-0x1.2710231c0fd7a13f8a2b4af9d6b7p-128) }, - { L(-0x2.3p+4), L(0x8.6e2ce38b6c8f9419e3fad3f0312p-136) }, - { L(-0x2.3p+4), L(-0x8.6e2ce38b6c8f9419e3fad3f0312p-136) }, - { L(-0x2.4p+4), L(0x3.bf30652185952560d71a254e4eb8p-140) }, - { L(-0x2.4p+4), L(-0x3.bf30652185952560d71a254e4eb8p-140) }, - { L(-0x2.5p+4), L(0x1.9ec8d1c94e85af4c78b15c3d89d3p-144) }, - { L(-0x2.5p+4), L(-0x1.9ec8d1c94e85af4c78b15c3d89d3p-144) }, - { L(-0x2.6p+4), L(0xa.ea565ce061d57489e9b85276274p-152) }, - { L(-0x2.6p+4), L(-0xa.ea565ce061d57489e9b85276274p-152) }, - { L(-0x2.7p+4), L(0x4.7a6512692eb37804111dabad30ecp-156) }, - { L(-0x2.7p+4), L(-0x4.7a6512692eb37804111dabad30ecp-156) }, - { L(-0x2.8p+4), L(0x1.ca8ed42a12ae3001a07244abad2bp-160) }, - { L(-0x2.8p+4), L(-0x1.ca8ed42a12ae3001a07244abad2bp-160) }, - { L(-0x2.9p+4), L(0xb.2f30e1ce812063f12e7e8d8d96e8p-168) }, - { L(-0x2.9p+4), L(-0xb.2f30e1ce812063f12e7e8d8d96e8p-168) }, - { L(-0x2.ap+4), L(0x4.42bd49d4c37a0db136489772e428p-172) }, - { L(-0x2.ap+4), L(-0x4.42bd49d4c37a0db136489772e428p-172) }, - { L(-0x2.bp+4), L(0x1.95db45257e5122dcbae56def372p-176) }, - { L(-0x2.bp+4), L(-0x1.95db45257e5122dcbae56def372p-176) }, - { L(-0x2.cp+4), L(0x9.3958d81ff63527ecf993f3fb6f48p-184) }, - { L(-0x2.cp+4), L(-0x9.3958d81ff63527ecf993f3fb6f48p-184) }, - { L(-0x2.dp+4), L(0x3.47970e4440c8f1c058bd238c9958p-188) }, - { L(-0x2.dp+4), L(-0x3.47970e4440c8f1c058bd238c9958p-188) }, - { L(-0x2.ep+4), L(0x1.240804f65951062ca46e4f25c608p-192) }, - { L(-0x2.ep+4), L(-0x1.240804f65951062ca46e4f25c608p-192) }, - { L(-0x2.fp+4), L(0x6.36a382849fae6de2d15362d8a394p-200) }, - { L(-0x2.fp+4), L(-0x6.36a382849fae6de2d15362d8a394p-200) }, - { L(-0x3p+4), L(0x2.123680d6dfe4cf4b9b1bcb9d8bdcp-204) }, - { L(-0x3p+4), L(-0x2.123680d6dfe4cf4b9b1bcb9d8bdcp-204) }, - { L(-0x3.1p+4), L(0xa.d21786ff5842eca51fea0870919p-212) }, - { L(-0x3.1p+4), L(-0xa.d21786ff5842eca51fea0870919p-212) }, - { L(-0x3.2p+4), L(0x3.766dedc259af040be140a68a6c04p-216) }, - }; - -static const _Float128 e_hi = L(0x2.b7e151628aed2a6abf7158809cf4p+0); -static const _Float128 e_lo = L(0xf.3c762e7160f38b4da56a784d9048p-116); - - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const _Float128 lgamma_coeff[] = - { - L(0x1.5555555555555555555555555555p-4), - L(-0xb.60b60b60b60b60b60b60b60b60b8p-12), - L(0x3.4034034034034034034034034034p-12), - L(-0x2.7027027027027027027027027028p-12), - L(0x3.72a3c5631fe46ae1d4e700dca8f2p-12), - L(-0x7.daac36664f1f207daac36664f1f4p-12), - L(0x1.a41a41a41a41a41a41a41a41a41ap-8), - L(-0x7.90a1b2c3d4e5f708192a3b4c5d7p-8), - L(0x2.dfd2c703c0cfff430edfd2c703cp-4), - L(-0x1.6476701181f39edbdb9ce625987dp+0), - L(0xd.672219167002d3a7a9c886459cp+0), - L(-0x9.cd9292e6660d55b3f712eb9e07c8p+4), - L(0x8.911a740da740da740da740da741p+8), - L(-0x8.d0cc570e255bf59ff6eec24b49p+12), - L(0xa.8d1044d3708d1c219ee4fdc446ap+16), - L(-0xe.8844d8a169abbc406169abbc406p+20), - L(0x1.6d29a0f6433b79890cede62433b8p+28), - L(-0x2.88a233b3c8cddaba9809357125d8p+32), - L(0x5.0dde6f27500939a85c40939a85c4p+36), - L(-0xb.4005bde03d4642a243581714af68p+40), - L(0x1.bc8cd6f8f1f755c78753cdb5d5c9p+48), - L(-0x4.bbebb143bb94de5a0284fa7ec424p+52), - L(0xe.2e1337f5af0bed90b6b0a352d4fp+56), - L(-0x2.e78250162b62405ad3e4bfe61b38p+64), - L(0xa.5f7eef9e71ac7c80326ab4cc8bfp+68), - L(-0x2.83be0395e550213369924971b21ap+76), - L(0xa.8ebfe48da17dd999790760b0cep+80), - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const _Float128 poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 23). */ - L(-0x1.0b71c5c54d42eb6c17f30b7aa8f5p+0), - L(-0xc.73a1dc05f34951602554c6d7506p-4), - L(-0x1.ec841408528b51473e6c425ee5ffp-4), - L(-0xe.37c9da26fc3c9a3c1844c8c7f1cp-4), - L(-0x1.03cd87c519305703b021fa33f827p-4), - L(-0xe.ae9ada65e09aa7f1c75216128f58p-4), - L(0x9.b11855a4864b5731cf85736015a8p-8), - L(-0xe.f28c133e697a95c28607c9701dep-4), - L(0x2.6ec14a1c586a72a7cc33ee569d6ap-4), - L(-0xf.57cab973e14464a262fc24723c38p-4), - L(0x4.5b0fc25f16e52997b2886bbae808p-4), - L(-0xf.f50e59f1a9b56e76e988dac9ccf8p-4), - L(0x6.5f5eae15e9a93369e1d85146c6fcp-4), - L(-0x1.0d2422daac459e33e0994325ed23p+0), - L(0x8.82000a0e7401fb1117a0e6606928p-4), - L(-0x1.1f492f178a3f1b19f58a2ca68e55p+0), - L(0xa.cb545f949899a04c160b19389abp-4), - L(-0x1.36165a1b155ba3db3d1b77caf498p+0), - L(0xd.44c5d5576f74302e5cf79e183eep-4), - L(-0x1.51f22e0cdd33d3d481e326c02f3ep+0), - L(0xf.f73a349c08244ac389c007779bfp-4), - L(-0x1.73317bf626156ba716747c4ca866p+0), - L(0x1.379c3c97b9bc71e1c1c4802dd657p+0), - L(-0x1.a72a351c54f902d483052000f5dfp+0), - /* Interval [-2.25, -2.125] (polynomial degree 24). */ - L(-0xf.2930890d7d675a80c36afb0fd5e8p-4), - L(-0xc.a5cfde054eab5c6770daeca577f8p-4), - L(0x3.9c9e0fdebb07cdf89c61d41c9238p-4), - L(-0x1.02a5ad35605fcf4af65a6dbacb84p+0), - L(0x9.6e9b1185bb48be9de1918e00a2e8p-4), - L(-0x1.4d8332f3cfbfa116fd611e9ce90dp+0), - L(0x1.1c0c8cb4d9f4b1d490e1a41fae4dp+0), - L(-0x1.c9a6f5ae9130cd0299e293a42714p+0), - L(0x1.d7e9307fd58a2ea997f29573a112p+0), - L(-0x2.921cb3473d96178ca2a11d2a8d46p+0), - L(0x2.e8d59113b6f3409ff8db226e9988p+0), - L(-0x3.cbab931625a1ae2b26756817f264p+0), - L(0x4.7d9f0f05d5296d18663ca003912p+0), - L(-0x5.ade9cba12a14ea485667b7135bbp+0), - L(0x6.dc983a5da74fb48e767b7fec0a3p+0), - L(-0x8.8d9ed454ae31d9e138dd8ee0d1a8p+0), - L(0xa.6fa099d4e7c202e0c0fd6ed8492p+0), - L(-0xc.ebc552a8090a0f0115e92d4ebbc8p+0), - L(0xf.d695e4772c0d829b53fba9ca5568p+0), - L(-0x1.38c32ae38e5e9eb79b2a4c5570a9p+4), - L(0x1.8035145646cfab49306d0999a51bp+4), - L(-0x1.d930adbb03dd342a4c2a8c4e1af6p+4), - L(0x2.45c2edb1b4943ddb3686cd9c6524p+4), - L(-0x2.e818ebbfafe2f916fa21abf7756p+4), - L(0x3.9804ce51d0fb9a430a711fd7307p+4), - /* Interval [-2.375, -2.25] (polynomial degree 25). */ - L(-0xd.7d28d505d6181218a25f31d5e45p-4), - L(-0xe.69649a3040985140cdf946829fap-4), - L(0xb.0d74a2827d053a8d44595012484p-4), - L(-0x1.924b0922853617cac181afbc08ddp+0), - L(0x1.d49b12bccf0a568582e2d3c410f3p+0), - L(-0x3.0898bb7d8c4093e636279c791244p+0), - L(0x4.207a6cac711cb53868e8a5057eep+0), - L(-0x6.39ee63ea4fb1dcab0c9144bf3ddcp+0), - L(0x8.e2e2556a797b649bf3f53bd26718p+0), - L(-0xd.0e83ac82552ef12af508589e7a8p+0), - L(0x1.2e4525e0ce6670563c6484a82b05p+4), - L(-0x1.b8e350d6a8f2b222fa390a57c23dp+4), - L(0x2.805cd69b919087d8a80295892c2cp+4), - L(-0x3.a42585424a1b7e64c71743ab014p+4), - L(0x5.4b4f409f98de49f7bfb03c05f984p+4), - L(-0x7.b3c5827fbe934bc820d6832fb9fcp+4), - L(0xb.33b7b90cc96c425526e0d0866e7p+4), - L(-0x1.04b77047ac4f59ee3775ca10df0dp+8), - L(0x1.7b366f5e94a34f41386eac086313p+8), - L(-0x2.2797338429385c9849ca6355bfc2p+8), - L(0x3.225273cf92a27c9aac1b35511256p+8), - L(-0x4.8f078aa48afe6cb3a4e89690f898p+8), - L(0x6.9f311d7b6654fc1d0b5195141d04p+8), - L(-0x9.a0c297b6b4621619ca9bacc48ed8p+8), - L(0xe.ce1f06b6f90d92138232a76e4cap+8), - L(-0x1.5b0e6806fa064daf011613e43b17p+12), - /* Interval [-2.5, -2.375] (polynomial degree 27). */ - L(-0xb.74ea1bcfff94b2c01afba9daa7d8p-4), - L(-0x1.2a82bd590c37538cab143308de4dp+0), - L(0x1.88020f828b966fec66b8649fd6fcp+0), - L(-0x3.32279f040eb694970e9db24863dcp+0), - L(0x5.57ac82517767e68a721005853864p+0), - L(-0x9.c2aedcfe22833de43834a0a6cc4p+0), - L(0x1.12c132f1f5577f99e1a0ed3538e1p+4), - L(-0x1.ea94e26628a3de3597f7bb55a948p+4), - L(0x3.66b4ac4fa582f58b59f96b2f7c7p+4), - L(-0x6.0cf746a9cf4cba8c39afcc73fc84p+4), - L(0xa.c102ef2c20d75a342197df7fedf8p+4), - L(-0x1.31ebff06e8f14626782df58db3b6p+8), - L(0x2.1fd6f0c0e710994e059b9dbdb1fep+8), - L(-0x3.c6d76040407f447f8b5074f07706p+8), - L(0x6.b6d18e0d8feb4c2ef5af6a40ed18p+8), - L(-0xb.efaf542c529f91e34217f24ae6a8p+8), - L(0x1.53852d873210e7070f5d9eb2296p+12), - L(-0x2.5b977c0ddc6d540717173ac29fc8p+12), - L(0x4.310d452ae05100eff1e02343a724p+12), - L(-0x7.73a5d8f20c4f986a7dd1912b2968p+12), - L(0xd.3f5ea2484f3fca15eab1f4d1a218p+12), - L(-0x1.78d18aac156d1d93a2ffe7e08d3fp+16), - L(0x2.9df49ca75e5b567f5ea3e47106cp+16), - L(-0x4.a7149af8961a08aa7c3233b5bb94p+16), - L(0x8.3db10ffa742c707c25197d989798p+16), - L(-0xe.a26d6dd023cadd02041a049ec368p+16), - L(0x1.c825d90514e7c57c7fa5316f947cp+20), - L(-0x3.34bb81e5a0952df8ca1abdc6684cp+20), - /* Interval [-2.625, -2.5] (polynomial degree 28). */ - L(-0x3.d10108c27ebafad533c20eac32bp-4), - L(0x1.cd557caff7d2b2085f41dbec5106p+0), - L(0x3.819b4856d399520dad9776ea2cacp+0), - L(0x6.8505cbad03dc34c5e42e8b12eb78p+0), - L(0xb.c1b2e653a9e38f82b399c94e7f08p+0), - L(0x1.50a53a38f148138105124df65419p+4), - L(0x2.57ae00cbe5232cbeeed34d89727ap+4), - L(0x4.2b156301b8604db85a601544bfp+4), - L(0x7.6989ed23ca3ca7579b3462592b5cp+4), - L(0xd.2dd2976557939517f831f5552cc8p+4), - L(0x1.76e1c3430eb860969bce40cd494p+8), - L(0x2.9a77bf5488742466db3a2c7c1ec6p+8), - L(0x4.a0d62ed7266e8eb36f725a8ebcep+8), - L(0x8.3a6184dd3021067df2f8b91e99c8p+8), - L(0xe.a0ade1538245bf55d39d7e436b1p+8), - L(0x1.a01359fae8617b5826dd74428e9p+12), - L(0x2.e3b0a32caae77251169acaca1ad4p+12), - L(0x5.2301257c81589f62b38fb5993ee8p+12), - L(0x9.21c9275db253d4e719b73b18cb9p+12), - L(0x1.03c104bc96141cda3f3fa4b112bcp+16), - L(0x1.cdc8ed65119196a08b0c78f1445p+16), - L(0x3.34f31d2eaacf34382cdb0073572ap+16), - L(0x5.b37628cadf12bf0000907d0ef294p+16), - L(0xa.22d8b332c0b1e6a616f425dfe5ap+16), - L(0x1.205b01444804c3ff922cd78b4c42p+20), - L(0x1.fe8f0cea9d1e0ff25be2470b4318p+20), - L(0x3.8872aebeb368399aee02b39340aep+20), - L(0x6.ebd560d351e84e26a4381f5b293cp+20), - L(0xc.c3644d094b0dae2fbcbf682cd428p+20), - /* Interval [-2.75, -2.625] (polynomial degree 26). */ - L(-0x6.b5d252a56e8a75458a27ed1c2dd4p-4), - L(0x1.28d60383da3ac721aed3c5794da9p+0), - L(0x1.db6513ada8a66ea77d87d9a8827bp+0), - L(0x2.e217118f9d348a27f7506a707e6ep+0), - L(0x4.450112c5cbf725a0fb9802396c9p+0), - L(0x6.4af99151eae7810a75df2a0303c4p+0), - L(0x9.2db598b4a97a7f69aeef32aec758p+0), - L(0xd.62bef9c22471f5ee47ea1b9c0b5p+0), - L(0x1.379f294e412bd62328326d4222f9p+4), - L(0x1.c5827349d8865f1e8825c37c31c6p+4), - L(0x2.93a7e7a75b7568cc8cbe8c016c12p+4), - L(0x3.bf9bb882afe57edb383d41879d3ap+4), - L(0x5.73c737828cee095c43a5566731c8p+4), - L(0x7.ee4653493a7f81e0442062b3823cp+4), - L(0xb.891c6b83fc8b55bd973b5d962d6p+4), - L(0x1.0c775d7de3bf9b246c0208e0207ep+8), - L(0x1.867ee43ec4bd4f4fd56abc05110ap+8), - L(0x2.37fe9ba6695821e9822d8c8af0a6p+8), - L(0x3.3a2c667e37c942f182cd3223a936p+8), - L(0x4.b1b500eb59f3f782c7ccec88754p+8), - L(0x6.d3efd3b65b3d0d8488d30b79fa4cp+8), - L(0x9.ee8224e65bed5ced8b75eaec609p+8), - L(0xe.72416e510cca77d53fc615c1f3dp+8), - L(0x1.4fb538b0a2dfe567a8904b7e0445p+12), - L(0x1.e7f56a9266cf525a5b8cf4cb76cep+12), - L(0x2.f0365c983f68c597ee49d099cce8p+12), - L(0x4.53aa229e1b9f5b5e59625265951p+12), - /* Interval [-2.875, -2.75] (polynomial degree 24). */ - L(-0x8.a41b1e4f36ff88dc820815607d68p-4), - L(0xc.da87d3b69dc0f2f9c6f368b8ca1p-4), - L(0x1.1474ad5c36158a7bea04fd2f98c6p+0), - L(0x1.761ecb90c555df6555b7dba955b6p+0), - L(0x1.d279bff9ae291caf6c4b4bcb3202p+0), - L(0x2.4e5d00559a6e2b9b5d7fe1f6689cp+0), - L(0x2.d57545a75cee8743ae2b17bc8d24p+0), - L(0x3.8514eee3aac88b89bec2307021bap+0), - L(0x4.5235e3b6e1891ffeb87fed9f8a24p+0), - L(0x5.562acdb10eef3c9a773b3e27a864p+0), - L(0x6.8ec8965c76efe03c26bff60b1194p+0), - L(0x8.15251aca144877af32658399f9b8p+0), - L(0x9.f08d56aba174d844138af782c0f8p+0), - L(0xc.3dbbeda2679e8a1346ccc3f6da88p+0), - L(0xf.0f5bfd5eacc26db308ffa0556fa8p+0), - L(0x1.28a6ccd84476fbc713d6bab49ac9p+4), - L(0x1.6d0a3ae2a3b1c8ff400641a3a21fp+4), - L(0x1.c15701b28637f87acfb6a91d33b5p+4), - L(0x2.28fbe0eccf472089b017651ca55ep+4), - L(0x2.a8a453004f6e8ffaacd1603bc3dp+4), - L(0x3.45ae4d9e1e7cd1a5dba0e4ec7f6cp+4), - L(0x4.065fbfacb7fad3e473cb577a61e8p+4), - L(0x4.f3d1473020927acac1944734a39p+4), - L(0x6.54bb091245815a36fb74e314dd18p+4), - L(0x7.d7f445129f7fb6c055e582d3f6ep+4), - /* Interval [-3, -2.875] (polynomial degree 23). */ - L(-0xa.046d667e468f3e44dcae1afcc648p-4), - L(0x9.70b88dcc006c214d8d996fdf5ccp-4), - L(0xa.a8a39421c86d3ff24931a0929fp-4), - L(0xd.2f4d1363f324da2b357c8b6ec94p-4), - L(0xd.ca9aa1a3a5c00de11bf60499a97p-4), - L(0xf.cf09c31eeb52a45dfa7ebe3778dp-4), - L(0x1.04b133a39ed8a09691205660468bp+0), - L(0x1.22b547a06edda944fcb12fd9b5ecp+0), - L(0x1.2c57fce7db86a91df09602d344b3p+0), - L(0x1.4aade4894708f84795212fe257eep+0), - L(0x1.579c8b7b67ec4afed5b28c8bf787p+0), - L(0x1.776820e7fc80ae5284239733078ap+0), - L(0x1.883ab28c7301fde4ca6b8ec26ec8p+0), - L(0x1.aa2ef6e1ae52eb42c9ee83b206e3p+0), - L(0x1.bf4ad50f0a9a9311300cf0c51ee7p+0), - L(0x1.e40206e0e96b1da463814dde0d09p+0), - L(0x1.fdcbcffef3a21b29719c2bd9feb1p+0), - L(0x2.25e2e8948939c4d42cf108fae4bep+0), - L(0x2.44ce14d2b59c1c0e6bf2cfa81018p+0), - L(0x2.70ee80bbd0387162be4861c43622p+0), - L(0x2.954b64d2c2ebf3489b949c74476p+0), - L(0x2.c616e133a811c1c9446105208656p+0), - L(0x3.05a69dfe1a9ba1079f90fcf26bd4p+0), - L(0x3.410d2ad16a0506de29736e6aafdap+0), - }; - -static const size_t poly_deg[] = - { - 23, - 24, - 25, - 27, - 28, - 26, - 24, - 23, - }; - -static const size_t poly_end[] = - { - 23, - 48, - 74, - 102, - 131, - 158, - 183, - 207, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_sinpi (_Float128 x) -{ - if (x <= L(0.25)) - return __sinl (M_PIl * x); - else - return __cosl (M_PIl * (L(0.5) - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_cospi (_Float128 x) -{ - if (x <= L(0.25)) - return __cosl (M_PIl * x); - else - return __sinl (M_PIl * (L(0.5) - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_cotpi (_Float128 x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -50 < X < -2, setting - *SIGNGAMP accordingly. */ - -_Float128 -__lgamma_negl (_Float128 x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floorl (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return L(1.0) / L(0.0); - _Float128 xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUNDL (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - _Float128 x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - _Float128 xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floorl (-8 * x) - 16; - _Float128 xm = (-33 - 2 * j) * L(0.0625); - _Float128 x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - _Float128 g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1pl (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - _Float128 x_idiff = fabsl (xn - x), x0_idiff = fabsl (xn - x0_hi - x0_lo); - _Float128 log_sinpi_ratio; - if (x0_idiff < x_idiff * L(0.5)) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_logl (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - _Float128 x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * L(0.5); - _Float128 sx0d2 = lg_sinpi (x0diff2); - _Float128 cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1pl (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - _Float128 log_gamma_ratio; - _Float128 y0 = 1 - x0_hi; - _Float128 y0_eps = -x0_hi + (1 - y0) - x0_lo; - _Float128 y = 1 - x; - _Float128 y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. First, we may need to - adjust into the range where Stirling's approximation is - sufficiently accurate. */ - _Float128 log_gamma_adj = 0; - if (i < 20) - { - int n_up = (21 - i) / 2; - _Float128 ny0, ny0_eps, ny, ny_eps; - ny0 = y0 + n_up; - ny0_eps = y0 - (ny0 - n_up) + y0_eps; - y0 = ny0; - y0_eps = ny0_eps; - ny = y + n_up; - ny_eps = y - (ny - n_up) + y_eps; - y = ny; - y_eps = ny_eps; - _Float128 prodm1 = __lgamma_productl (xdiff, y - n_up, y_eps, n_up); - log_gamma_adj = -__log1pl (prodm1); - } - _Float128 log_gamma_high - = (xdiff * __log1pl ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - L(0.5) + y_eps) * __log1pl (xdiff / y) + log_gamma_adj); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - _Float128 y0r = 1 / y0, yr = 1 / y; - _Float128 y0r2 = y0r * y0r, yr2 = yr * yr; - _Float128 rdiff = -xdiff / (y * y0); - _Float128 bterm[NCOEFF]; - _Float128 dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - _Float128 dnext = dlast * y0r2 + elast; - _Float128 enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - _Float128 log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/ldbl-128/lgamma_productl.c b/sysdeps/ieee754/ldbl-128/lgamma_productl.c deleted file mode 100644 index 212c26a960..0000000000 --- a/sysdeps/ieee754/ldbl-128/lgamma_productl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -_Float128 -__lgamma_productl (_Float128 t, _Float128 x, _Float128 x_eps, int n) -{ - _Float128 ret = 0, ret_eps = 0; - for (int i = 0; i < n; i++) - { - _Float128 xi = x + i; - _Float128 quot = t / xi; - _Float128 mhi, mlo; - mul_splitl (&mhi, &mlo, quot, xi); - _Float128 quot_lo = (t - mhi - mlo) / xi - t * x_eps / (xi * xi); - /* We want (1 + RET + RET_EPS) * (1 + QUOT + QUOT_LO) - 1. */ - _Float128 rhi, rlo; - mul_splitl (&rhi, &rlo, ret, quot); - _Float128 rpq = ret + quot; - _Float128 rpq_eps = (ret - rpq) + quot; - _Float128 nret = rpq + rhi; - _Float128 nret_eps = (rpq - nret) + rhi; - ret_eps += (rpq_eps + nret_eps + rlo + ret_eps * quot - + quot_lo + quot_lo * (ret + ret_eps)); - ret = nret; - } - return ret + ret_eps; -} diff --git a/sysdeps/ieee754/ldbl-128/math_ldbl.h b/sysdeps/ieee754/ldbl-128/math_ldbl.h deleted file mode 100644 index bb5cce2a36..0000000000 --- a/sysdeps/ieee754/ldbl-128/math_ldbl.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include -#include - -/* A union which permits us to convert between a long double and - four 32 bit ints or two 64 bit ints. */ - -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN - -typedef union -{ - long double value; - struct - { - uint64_t msw; - uint64_t lsw; - } parts64; - struct - { - uint32_t w0, w1, w2, w3; - } parts32; -} ieee854_long_double_shape_type; - -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN - -typedef union -{ - long double value; - struct - { - uint64_t lsw; - uint64_t msw; - } parts64; - struct - { - uint32_t w3, w2, w1, w0; - } parts32; -} ieee854_long_double_shape_type; - -#endif - -/* Get two 64 bit ints from a long double. */ - -#define GET_LDOUBLE_WORDS64(ix0,ix1,d) \ -do { \ - ieee854_long_double_shape_type qw_u; \ - qw_u.value = (d); \ - (ix0) = qw_u.parts64.msw; \ - (ix1) = qw_u.parts64.lsw; \ -} while (0) - -/* Set a long double from two 64 bit ints. */ - -#define SET_LDOUBLE_WORDS64(d,ix0,ix1) \ -do { \ - ieee854_long_double_shape_type qw_u; \ - qw_u.parts64.msw = (ix0); \ - qw_u.parts64.lsw = (ix1); \ - (d) = qw_u.value; \ -} while (0) - -/* Get the more significant 64 bits of a long double mantissa. */ - -#define GET_LDOUBLE_MSW64(v,d) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.msw; \ -} while (0) - -/* Set the more significant 64 bits of a long double mantissa from an int. */ - -#define SET_LDOUBLE_MSW64(d,v) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts64.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get the least significant 64 bits of a long double mantissa. */ - -#define GET_LDOUBLE_LSW64(v,d) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.lsw; \ -} while (0) - -/* - On a platform already supporting a binary128 long double, - _Float128 will alias to long double. This transformation - makes aliasing *l functions to *f128 trivial. -*/ -#define _Float128 long double -#define L(x) x##L - -#endif /* math_ldbl.h */ diff --git a/sysdeps/ieee754/ldbl-128/mpn2ldbl.c b/sysdeps/ieee754/ldbl-128/mpn2ldbl.c deleted file mode 100644 index 625186fdc2..0000000000 --- a/sysdeps/ieee754/ldbl-128/mpn2ldbl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include -#include -#include - -/* Convert a multi-precision integer of the needed number of bits (113 for - long double) and an integral power of two to a `long double' in IEEE854 - quad-precision format. */ - -long double -__mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) -{ - union ieee854_long_double u; - - u.ieee.negative = sign; - u.ieee.exponent = expt + IEEE854_LONG_DOUBLE_BIAS; -#if BITS_PER_MP_LIMB == 32 - u.ieee.mantissa3 = frac_ptr[0]; - u.ieee.mantissa2 = frac_ptr[1]; - u.ieee.mantissa1 = frac_ptr[2]; - u.ieee.mantissa0 = frac_ptr[3] & (((mp_limb_t) 1 - << (LDBL_MANT_DIG - 96)) - 1); -#elif BITS_PER_MP_LIMB == 64 - u.ieee.mantissa3 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa2 = frac_ptr[0] >> 32; - u.ieee.mantissa1 = frac_ptr[1] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa0 = (frac_ptr[1] >> 32) & (((mp_limb_t) 1 - << (LDBL_MANT_DIG - 96)) - 1); -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - return u.d; -} diff --git a/sysdeps/ieee754/ldbl-128/printf_fphex.c b/sysdeps/ieee754/ldbl-128/printf_fphex.c deleted file mode 100644 index 294464ecff..0000000000 --- a/sysdeps/ieee754/ldbl-128/printf_fphex.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Print floating point number in hexadecimal notation according to - ISO C99. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define PRINT_FPHEX_LONG_DOUBLE \ - PRINT_FPHEX (long double, fpnum.ldbl, ieee854_long_double, \ - IEEE854_LONG_DOUBLE_BIAS) - -#include diff --git a/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h b/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h deleted file mode 100644 index 86681c4c1e..0000000000 --- a/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Macro to print floating point numbers in hexadecimal notation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define PRINT_FPHEX(FLOAT, VAR, IEEE854_UNION, IEEE854_BIAS) \ -do { \ - /* We have 112 bits of mantissa plus one implicit digit. Since \ - 112 bits are representable without rest using hexadecimal \ - digits we use only the implicit digits for the number before \ - the decimal point. */ \ - unsigned long long int num0, num1; \ - union IEEE854_UNION u; \ - u.d = VAR; \ - \ - assert (sizeof (FLOAT) == 16); \ - \ - num0 = (((unsigned long long int) u.ieee.mantissa0) << 32 \ - | u.ieee.mantissa1); \ - num1 = (((unsigned long long int) u.ieee.mantissa2) << 32 \ - | u.ieee.mantissa3); \ - \ - zero_mantissa = (num0|num1) == 0; \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\ - 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - } \ - \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa_word (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 112 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - leading = u.ieee.exponent == 0 ? '0' : '1'; \ - \ - exponent = u.ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - exponent = IEEE854_BIAS - 1; \ - } \ - } \ - else if (exponent >= IEEE854_BIAS) \ - { \ - expnegative = 0; \ - exponent -= IEEE854_BIAS; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - IEEE854_BIAS); \ - } \ -} while (0) diff --git a/sysdeps/ieee754/ldbl-128/s_asinhl.c b/sysdeps/ieee754/ldbl-128/s_asinhl.c deleted file mode 100644 index 83efb34447..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_asinhl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_asinhl.c -- long double version of s_asinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* asinhl(x) - * Method : - * Based on - * asinhl(x) = signl(x) * logl [ |x| + sqrtl(x*x+1) ] - * we have - * asinhl(x) := x if 1+x*x=1, - * := signl(x)*(logl(x)+ln2)) for large |x|, else - * := signl(x)*logl(2|x|+1/(|x|+sqrtl(x*x+1))) if|x|>2, else - * := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2))) - */ - -#include -#include -#include - -static const _Float128 - one = 1, - ln2 = L(6.931471805599453094172321214581765681e-1), - huge = L(1.0e+4900); - -_Float128 -__asinhl (_Float128 x) -{ - _Float128 t, w; - int32_t ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - if (ix == 0x7fff0000) - return x + x; /* x is inf or NaN */ - if (ix < 0x3fc70000) - { /* |x| < 2^ -56 */ - math_check_force_underflow (x); - if (huge + x > one) - return x; /* return x inexact except 0 */ - } - u.parts32.w0 = ix; - if (ix > 0x40350000) - { /* |x| > 2 ^ 54 */ - w = __ieee754_logl (u.value) + ln2; - } - else if (ix >0x40000000) - { /* 2^ 54 > |x| > 2.0 */ - t = u.value; - w = __ieee754_logl (2.0 * t + one / (__ieee754_sqrtl (x * x + one) + t)); - } - else - { /* 2.0 > |x| > 2 ^ -56 */ - t = x * x; - w = __log1pl (u.value + t / (one + __ieee754_sqrtl (one + t))); - } - if (sign & 0x80000000) - return -w; - else - return w; -} -weak_alias (__asinhl, asinhl) diff --git a/sysdeps/ieee754/ldbl-128/s_atanl.c b/sysdeps/ieee754/ldbl-128/s_atanl.c deleted file mode 100644 index 6f2cd549ec..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_atanl.c +++ /dev/null @@ -1,253 +0,0 @@ -/* s_atanl.c - * - * Inverse circular tangent for 128-bit long double precision - * (arctangent) - * - * - * - * SYNOPSIS: - * - * long double x, y, atanl(); - * - * y = atanl( x ); - * - * - * - * DESCRIPTION: - * - * Returns radian angle between -pi/2 and +pi/2 whose tangent is x. - * - * The function uses a rational approximation of the form - * t + t^3 P(t^2)/Q(t^2), optimized for |t| < 0.09375. - * - * The argument is reduced using the identity - * arctan x - arctan u = arctan ((x-u)/(1 + ux)) - * and an 83-entry lookup table for arctan u, with u = 0, 1/8, ..., 10.25. - * Use of the table improves the execution speed of the routine. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -19, 19 4e5 1.7e-34 5.4e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include - -/* arctan(k/8), k = 0, ..., 82 */ -static const _Float128 atantbl[84] = { - L(0.0000000000000000000000000000000000000000E0), - L(1.2435499454676143503135484916387102557317E-1), /* arctan(0.125) */ - L(2.4497866312686415417208248121127581091414E-1), - L(3.5877067027057222039592006392646049977698E-1), - L(4.6364760900080611621425623146121440202854E-1), - L(5.5859931534356243597150821640166127034645E-1), - L(6.4350110879328438680280922871732263804151E-1), - L(7.1882999962162450541701415152590465395142E-1), - L(7.8539816339744830961566084581987572104929E-1), - L(8.4415398611317100251784414827164750652594E-1), - L(8.9605538457134395617480071802993782702458E-1), - L(9.4200004037946366473793717053459358607166E-1), - L(9.8279372324732906798571061101466601449688E-1), - L(1.0191413442663497346383429170230636487744E0), - L(1.0516502125483736674598673120862998296302E0), - L(1.0808390005411683108871567292171998202703E0), - L(1.1071487177940905030170654601785370400700E0), - L(1.1309537439791604464709335155363278047493E0), - L(1.1525719972156675180401498626127513797495E0), - L(1.1722738811284763866005949441337046149712E0), - L(1.1902899496825317329277337748293183376012E0), - L(1.2068173702852525303955115800565576303133E0), - L(1.2220253232109896370417417439225704908830E0), - L(1.2360594894780819419094519711090786987027E0), - L(1.2490457723982544258299170772810901230778E0), - L(1.2610933822524404193139408812473357720101E0), - L(1.2722973952087173412961937498224804940684E0), - L(1.2827408797442707473628852511364955306249E0), - L(1.2924966677897852679030914214070816845853E0), - L(1.3016288340091961438047858503666855921414E0), - L(1.3101939350475556342564376891719053122733E0), - L(1.3182420510168370498593302023271362531155E0), - L(1.3258176636680324650592392104284756311844E0), - L(1.3329603993374458675538498697331558093700E0), - L(1.3397056595989995393283037525895557411039E0), - L(1.3460851583802539310489409282517796256512E0), - L(1.3521273809209546571891479413898128509842E0), - L(1.3578579772154994751124898859640585287459E0), - L(1.3633001003596939542892985278250991189943E0), - L(1.3684746984165928776366381936948529556191E0), - L(1.3734007669450158608612719264449611486510E0), - L(1.3780955681325110444536609641291551522494E0), - L(1.3825748214901258580599674177685685125566E0), - L(1.3868528702577214543289381097042486034883E0), - L(1.3909428270024183486427686943836432060856E0), - L(1.3948567013423687823948122092044222644895E0), - L(1.3986055122719575950126700816114282335732E0), - L(1.4021993871854670105330304794336492676944E0), - L(1.4056476493802697809521934019958079881002E0), - L(1.4089588955564736949699075250792569287156E0), - L(1.4121410646084952153676136718584891599630E0), - L(1.4152014988178669079462550975833894394929E0), - L(1.4181469983996314594038603039700989523716E0), - L(1.4209838702219992566633046424614466661176E0), - L(1.4237179714064941189018190466107297503086E0), - L(1.4263547484202526397918060597281265695725E0), - L(1.4288992721907326964184700745371983590908E0), - L(1.4313562697035588982240194668401779312122E0), - L(1.4337301524847089866404719096698873648610E0), - L(1.4360250423171655234964275337155008780675E0), - L(1.4382447944982225979614042479354815855386E0), - L(1.4403930189057632173997301031392126865694E0), - L(1.4424730991091018200252920599377292525125E0), - L(1.4444882097316563655148453598508037025938E0), - L(1.4464413322481351841999668424758804165254E0), - L(1.4483352693775551917970437843145232637695E0), - L(1.4501726582147939000905940595923466567576E0), - L(1.4519559822271314199339700039142990228105E0), - L(1.4536875822280323362423034480994649820285E0), - L(1.4553696664279718992423082296859928222270E0), - L(1.4570043196511885530074841089245667532358E0), - L(1.4585935117976422128825857356750737658039E0), - L(1.4601391056210009726721818194296893361233E0), - L(1.4616428638860188872060496086383008594310E0), - L(1.4631064559620759326975975316301202111560E0), - L(1.4645314639038178118428450961503371619177E0), - L(1.4659193880646627234129855241049975398470E0), - L(1.4672716522843522691530527207287398276197E0), - L(1.4685896086876430842559640450619880951144E0), - L(1.4698745421276027686510391411132998919794E0), - L(1.4711276743037345918528755717617308518553E0), - L(1.4723501675822635384916444186631899205983E0), - L(1.4735431285433308455179928682541563973416E0), /* arctan(10.25) */ - L(1.5707963267948966192313216916397514420986E0) /* pi/2 */ -}; - - -/* arctan t = t + t^3 p(t^2) / q(t^2) - |t| <= 0.09375 - peak relative error 5.3e-37 */ - -static const _Float128 - p0 = L(-4.283708356338736809269381409828726405572E1), - p1 = L(-8.636132499244548540964557273544599863825E1), - p2 = L(-5.713554848244551350855604111031839613216E1), - p3 = L(-1.371405711877433266573835355036413750118E1), - p4 = L(-8.638214309119210906997318946650189640184E-1), - q0 = L(1.285112506901621042780814422948906537959E2), - q1 = L(3.361907253914337187957855834229672347089E2), - q2 = L(3.180448303864130128268191635189365331680E2), - q3 = L(1.307244136980865800160844625025280344686E2), - q4 = L(2.173623741810414221251136181221172551416E1); - /* q5 = 1.000000000000000000000000000000000000000E0 */ - -static const _Float128 huge = L(1.0e4930); - -_Float128 -__atanl (_Float128 x) -{ - int k, sign; - _Float128 t, u, p, q; - ieee854_long_double_shape_type s; - - s.value = x; - k = s.parts32.w0; - if (k & 0x80000000) - sign = 1; - else - sign = 0; - - /* Check for IEEE special cases. */ - k &= 0x7fffffff; - if (k >= 0x7fff0000) - { - /* NaN. */ - if ((k & 0xffff) | s.parts32.w1 | s.parts32.w2 | s.parts32.w3) - return (x + x); - - /* Infinity. */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (k <= 0x3fc50000) /* |x| < 2**-58 */ - { - math_check_force_underflow (x); - /* Raise inexact. */ - if (huge + x > 0.0) - return x; - } - - if (k >= 0x40720000) /* |x| > 2**115 */ - { - /* Saturate result to {-,+}pi/2 */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (sign) - x = -x; - - if (k >= 0x40024800) /* 10.25 */ - { - k = 83; - t = -1.0/x; - } - else - { - /* Index of nearest table element. - Roundoff to integer is asymmetrical to avoid cancellation when t < 0 - (cf. fdlibm). */ - k = 8.0 * x + 0.25; - u = L(0.125) * k; - /* Small arctan argument. */ - t = (x - u) / (1.0 + x * u); - } - - /* Arctan of small argument t. */ - u = t * t; - p = ((((p4 * u) + p3) * u + p2) * u + p1) * u + p0; - q = ((((u + q4) * u + q3) * u + q2) * u + q1) * u + q0; - u = t * u * p / q + t; - - /* arctan x = arctan u + arctan t */ - u = atantbl[k] + u; - if (sign) - return (-u); - else - return u; -} - -weak_alias (__atanl, atanl) diff --git a/sysdeps/ieee754/ldbl-128/s_cbrtl.c b/sysdeps/ieee754/ldbl-128/s_cbrtl.c deleted file mode 100644 index eb88d29fc9..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_cbrtl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* cbrtl.c - * - * Cube root, long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, cbrtl(); - * - * y = cbrtl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the cube root of the argument, which may be negative. - * - * Range reduction involves determining the power of 2 of - * the argument. A polynomial of degree 2 applied to the - * mantissa, and multiplication by the cube root of 1, 2, or 4 - * approximates the root to within about 0.1%. Then Newton's - * iteration is used three times to converge to an accurate - * result. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -8,8 100000 1.3e-34 3.9e-35 - * IEEE exp(+-707) 100000 1.3e-34 4.3e-35 - * - */ - -/* -Cephes Math Library Release 2.2: January, 1991 -Copyright 1984, 1991 by Stephen L. Moshier -Adapted for glibc October, 2001. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include - -static const _Float128 CBRT2 = L(1.259921049894873164767210607278228350570251); -static const _Float128 CBRT4 = L(1.587401051968199474751705639272308260391493); -static const _Float128 CBRT2I = L(0.7937005259840997373758528196361541301957467); -static const _Float128 CBRT4I = L(0.6299605249474365823836053036391141752851257); - - -_Float128 -__cbrtl (_Float128 x) -{ - int e, rem, sign; - _Float128 z; - - if (!isfinite (x)) - return x + x; - - if (x == 0) - return (x); - - if (x > 0) - sign = 1; - else - { - sign = -1; - x = -x; - } - - z = x; - /* extract power of 2, leaving mantissa between 0.5 and 1 */ - x = __frexpl (x, &e); - - /* Approximate cube root of number between .5 and 1, - peak relative error = 1.2e-6 */ - x = ((((L(1.3584464340920900529734e-1) * x - - L(6.3986917220457538402318e-1)) * x - + L(1.2875551670318751538055e0)) * x - - L(1.4897083391357284957891e0)) * x - + L(1.3304961236013647092521e0)) * x + L(3.7568280825958912391243e-1); - - /* exponent divided by 3 */ - if (e >= 0) - { - rem = e; - e /= 3; - rem -= 3 * e; - if (rem == 1) - x *= CBRT2; - else if (rem == 2) - x *= CBRT4; - } - else - { /* argument less than 1 */ - e = -e; - rem = e; - e /= 3; - rem -= 3 * e; - if (rem == 1) - x *= CBRT2I; - else if (rem == 2) - x *= CBRT4I; - e = -e; - } - - /* multiply by power of 2 */ - x = __ldexpl (x, e); - - /* Newton iteration */ - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - - if (sign < 0) - x = -x; - return (x); -} - -weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/ieee754/ldbl-128/s_ceill.c b/sysdeps/ieee754/ldbl-128/s_ceill.c deleted file mode 100644 index 8034795072..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ceill.c +++ /dev/null @@ -1,66 +0,0 @@ -/* s_ceill.c -- long double version of s_ceil.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * ceill(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -_Float128 __ceill(_Float128 x) -{ - int64_t i0,i1,j0; - u_int64_t i,j; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<48) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0<0) {i0=0x8000000000000000ULL;i1=0;} - else if((i0|i1)!=0) { i0=0x3fff000000000000ULL;i1=0;} - } else { - i = (0x0000ffffffffffffULL)>>j0; - if(((i0&i)|i1)==0) return x; /* x is integral */ - if(i0>0) i0 += (0x0001000000000000LL)>>j0; - i0 &= (~i); i1=0; - } - } else if (j0>111) { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } else { - i = -1ULL>>(j0-48); - if((i1&i)==0) return x; /* x is integral */ - if(i0>0) { - if(j0==48) i0+=1; - else { - j = i1+(1LL<<(112-j0)); - if(j -#include - -_Float128 __copysignl(_Float128 x, _Float128 y) -{ - u_int64_t hx,hy; - GET_LDOUBLE_MSW64(hx,x); - GET_LDOUBLE_MSW64(hy,y); - SET_LDOUBLE_MSW64(x,(hx&0x7fffffffffffffffULL) - |(hy&0x8000000000000000ULL)); - return x; -} -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/ieee754/ldbl-128/s_cosl.c b/sysdeps/ieee754/ldbl-128/s_cosl.c deleted file mode 100644 index ed3e77d0db..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_cosl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_cosl.c -- long double version of s_cos.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* cosl(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __cosl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) - return __kernel_cosl(x,z); - - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_cosl(y[0],y[1]); - case 1: return -__kernel_sinl(y[0],y[1],1); - case 2: return -__kernel_cosl(y[0],y[1]); - default: - return __kernel_sinl(y[0],y[1],1); - } - } -} -weak_alias (__cosl, cosl) diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c deleted file mode 100644 index e5dfae9636..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_erfl.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications and expansions for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* double erf(double x) - * double erfc(double x) - * x - * 2 |\ - * erf(x) = --------- | exp(-t*t)dt - * sqrt(pi) \| - * 0 - * - * erfc(x) = 1-erf(x) - * Note that - * erf(-x) = -erf(x) - * erfc(-x) = 2 - erfc(x) - * - * Method: - * 1. erf(x) = x + x*R(x^2) for |x| in [0, 7/8] - * Remark. The formula is derived by noting - * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) - * and that - * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 - * is close to one. - * - * 1a. erf(x) = 1 - erfc(x), for |x| > 1.0 - * erfc(x) = 1 - erf(x) if |x| < 1/4 - * - * 2. For |x| in [7/8, 1], let s = |x| - 1, and - * c = 0.84506291151 rounded to single (24 bits) - * erf(s + c) = sign(x) * (c + P1(s)/Q1(s)) - * Remark: here we use the taylor series expansion at x=1. - * erf(1+s) = erf(1) + s*Poly(s) - * = 0.845.. + P1(s)/Q1(s) - * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] - * - * 3. For x in [1/4, 5/4], - * erfc(s + const) = erfc(const) + s P1(s)/Q1(s) - * for const = 1/4, 3/8, ..., 9/8 - * and 0 <= s <= 1/8 . - * - * 4. For x in [5/4, 107], - * erfc(x) = (1/x)*exp(-x*x-0.5625 + R(z)) - * z=1/x^2 - * The interval is partitioned into several segments - * of width 1/8 in 1/x. - * - * Note1: - * To compute exp(-x*x-0.5625+R/S), let s be a single - * precision number and s := x; then - * -x*x = -s*s + (s-x)*(s+x) - * exp(-x*x-0.5626+R/S) = - * exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S); - * Note2: - * Here 4 and 5 make use of the asymptotic series - * exp(-x*x) - * erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) ) - * x*sqrt(pi) - * - * 5. For inf > x >= 107 - * erf(x) = sign(x) *(1 - tiny) (raise inexact) - * erfc(x) = tiny*tiny (raise underflow) if x > 0 - * = 2 - tiny if x<0 - * - * 7. Special case: - * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, - * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, - * erfc/erf(NaN) is NaN - */ - -#include -#include -#include -#include - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -static const _Float128 -tiny = L(1e-4931), - one = 1, - two = 2, - /* 2/sqrt(pi) - 1 */ - efx = L(1.2837916709551257389615890312154517168810E-1); - - -/* erf(x) = x + x R(x^2) - 0 <= x <= 7/8 - Peak relative error 1.8e-35 */ -#define NTN1 8 -static const _Float128 TN1[NTN1 + 1] = -{ - L(-3.858252324254637124543172907442106422373E10), - L(9.580319248590464682316366876952214879858E10), - L(1.302170519734879977595901236693040544854E10), - L(2.922956950426397417800321486727032845006E9), - L(1.764317520783319397868923218385468729799E8), - L(1.573436014601118630105796794840834145120E7), - L(4.028077380105721388745632295157816229289E5), - L(1.644056806467289066852135096352853491530E4), - L(3.390868480059991640235675479463287886081E1) -}; -#define NTD1 8 -static const _Float128 TD1[NTD1 + 1] = -{ - L(-3.005357030696532927149885530689529032152E11), - L(-1.342602283126282827411658673839982164042E11), - L(-2.777153893355340961288511024443668743399E10), - L(-3.483826391033531996955620074072768276974E9), - L(-2.906321047071299585682722511260895227921E8), - L(-1.653347985722154162439387878512427542691E7), - L(-6.245520581562848778466500301865173123136E5), - L(-1.402124304177498828590239373389110545142E4), - L(-1.209368072473510674493129989468348633579E2) -/* 1.0E0 */ -}; - - -/* erf(z+1) = erf_const + P(z)/Q(z) - -.125 <= z <= 0 - Peak relative error 7.3e-36 */ -static const _Float128 erf_const = L(0.845062911510467529296875); -#define NTN2 8 -static const _Float128 TN2[NTN2 + 1] = -{ - L(-4.088889697077485301010486931817357000235E1), - L(7.157046430681808553842307502826960051036E3), - L(-2.191561912574409865550015485451373731780E3), - L(2.180174916555316874988981177654057337219E3), - L(2.848578658049670668231333682379720943455E2), - L(1.630362490952512836762810462174798925274E2), - L(6.317712353961866974143739396865293596895E0), - L(2.450441034183492434655586496522857578066E1), - L(5.127662277706787664956025545897050896203E-1) -}; -#define NTD2 8 -static const _Float128 TD2[NTD2 + 1] = -{ - L(1.731026445926834008273768924015161048885E4), - L(1.209682239007990370796112604286048173750E4), - L(1.160950290217993641320602282462976163857E4), - L(5.394294645127126577825507169061355698157E3), - L(2.791239340533632669442158497532521776093E3), - L(8.989365571337319032943005387378993827684E2), - L(2.974016493766349409725385710897298069677E2), - L(6.148192754590376378740261072533527271947E1), - L(1.178502892490738445655468927408440847480E1) - /* 1.0E0 */ -}; - - -/* erfc(x + 0.25) = erfc(0.25) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.4e-35 */ -#define NRNr13 8 -static const _Float128 RNr13[NRNr13 + 1] = -{ - L(-2.353707097641280550282633036456457014829E3), - L(3.871159656228743599994116143079870279866E2), - L(-3.888105134258266192210485617504098426679E2), - L(-2.129998539120061668038806696199343094971E1), - L(-8.125462263594034672468446317145384108734E1), - L(8.151549093983505810118308635926270319660E0), - L(-5.033362032729207310462422357772568553670E0), - L(-4.253956621135136090295893547735851168471E-2), - L(-8.098602878463854789780108161581050357814E-2) -}; -#define NRDr13 7 -static const _Float128 RDr13[NRDr13 + 1] = -{ - L(2.220448796306693503549505450626652881752E3), - L(1.899133258779578688791041599040951431383E2), - L(1.061906712284961110196427571557149268454E3), - L(7.497086072306967965180978101974566760042E1), - L(2.146796115662672795876463568170441327274E2), - L(1.120156008362573736664338015952284925592E1), - L(2.211014952075052616409845051695042741074E1), - L(6.469655675326150785692908453094054988938E-1) - /* 1.0E0 */ -}; -/* erfc(0.25) = C13a + C13b to extra precision. */ -static const _Float128 C13a = L(0.723663330078125); -static const _Float128 C13b = L(1.0279753638067014931732235184287934646022E-5); - - -/* erfc(x + 0.375) = erfc(0.375) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.2e-35 */ -#define NRNr14 8 -static const _Float128 RNr14[NRNr14 + 1] = -{ - L(-2.446164016404426277577283038988918202456E3), - L(6.718753324496563913392217011618096698140E2), - L(-4.581631138049836157425391886957389240794E2), - L(-2.382844088987092233033215402335026078208E1), - L(-7.119237852400600507927038680970936336458E1), - L(1.313609646108420136332418282286454287146E1), - L(-6.188608702082264389155862490056401365834E0), - L(-2.787116601106678287277373011101132659279E-2), - L(-2.230395570574153963203348263549700967918E-2) -}; -#define NRDr14 7 -static const _Float128 RDr14[NRDr14 + 1] = -{ - L(2.495187439241869732696223349840963702875E3), - L(2.503549449872925580011284635695738412162E2), - L(1.159033560988895481698051531263861842461E3), - L(9.493751466542304491261487998684383688622E1), - L(2.276214929562354328261422263078480321204E2), - L(1.367697521219069280358984081407807931847E1), - L(2.276988395995528495055594829206582732682E1), - L(7.647745753648996559837591812375456641163E-1) - /* 1.0E0 */ -}; -/* erfc(0.375) = C14a + C14b to extra precision. */ -static const _Float128 C14a = L(0.5958709716796875); -static const _Float128 C14b = L(1.2118885490201676174914080878232469565953E-5); - -/* erfc(x + 0.5) = erfc(0.5) + x R(x) - 0 <= x < 0.125 - Peak relative error 4.7e-36 */ -#define NRNr15 8 -static const _Float128 RNr15[NRNr15 + 1] = -{ - L(-2.624212418011181487924855581955853461925E3), - L(8.473828904647825181073831556439301342756E2), - L(-5.286207458628380765099405359607331669027E2), - L(-3.895781234155315729088407259045269652318E1), - L(-6.200857908065163618041240848728398496256E1), - L(1.469324610346924001393137895116129204737E1), - L(-6.961356525370658572800674953305625578903E0), - L(5.145724386641163809595512876629030548495E-3), - L(1.990253655948179713415957791776180406812E-2) -}; -#define NRDr15 7 -static const _Float128 RDr15[NRDr15 + 1] = -{ - L(2.986190760847974943034021764693341524962E3), - L(5.288262758961073066335410218650047725985E2), - L(1.363649178071006978355113026427856008978E3), - L(1.921707975649915894241864988942255320833E2), - L(2.588651100651029023069013885900085533226E2), - L(2.628752920321455606558942309396855629459E1), - L(2.455649035885114308978333741080991380610E1), - L(1.378826653595128464383127836412100939126E0) - /* 1.0E0 */ -}; -/* erfc(0.5) = C15a + C15b to extra precision. */ -static const _Float128 C15a = L(0.4794921875); -static const _Float128 C15b = L(7.9346869534623172533461080354712635484242E-6); - -/* erfc(x + 0.625) = erfc(0.625) + x R(x) - 0 <= x < 0.125 - Peak relative error 5.1e-36 */ -#define NRNr16 8 -static const _Float128 RNr16[NRNr16 + 1] = -{ - L(-2.347887943200680563784690094002722906820E3), - L(8.008590660692105004780722726421020136482E2), - L(-5.257363310384119728760181252132311447963E2), - L(-4.471737717857801230450290232600243795637E1), - L(-4.849540386452573306708795324759300320304E1), - L(1.140885264677134679275986782978655952843E1), - L(-6.731591085460269447926746876983786152300E0), - L(1.370831653033047440345050025876085121231E-1), - L(2.022958279982138755020825717073966576670E-2), -}; -#define NRDr16 7 -static const _Float128 RDr16[NRDr16 + 1] = -{ - L(3.075166170024837215399323264868308087281E3), - L(8.730468942160798031608053127270430036627E2), - L(1.458472799166340479742581949088453244767E3), - L(3.230423687568019709453130785873540386217E2), - L(2.804009872719893612081109617983169474655E2), - L(4.465334221323222943418085830026979293091E1), - L(2.612723259683205928103787842214809134746E1), - L(2.341526751185244109722204018543276124997E0), - /* 1.0E0 */ -}; -/* erfc(0.625) = C16a + C16b to extra precision. */ -static const _Float128 C16a = L(0.3767547607421875); -static const _Float128 C16b = L(4.3570693945275513594941232097252997287766E-6); - -/* erfc(x + 0.75) = erfc(0.75) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.7e-35 */ -#define NRNr17 8 -static const _Float128 RNr17[NRNr17 + 1] = -{ - L(-1.767068734220277728233364375724380366826E3), - L(6.693746645665242832426891888805363898707E2), - L(-4.746224241837275958126060307406616817753E2), - L(-2.274160637728782675145666064841883803196E1), - L(-3.541232266140939050094370552538987982637E1), - L(6.988950514747052676394491563585179503865E0), - L(-5.807687216836540830881352383529281215100E0), - L(3.631915988567346438830283503729569443642E-1), - L(-1.488945487149634820537348176770282391202E-2) -}; -#define NRDr17 7 -static const _Float128 RDr17[NRDr17 + 1] = -{ - L(2.748457523498150741964464942246913394647E3), - L(1.020213390713477686776037331757871252652E3), - L(1.388857635935432621972601695296561952738E3), - L(3.903363681143817750895999579637315491087E2), - L(2.784568344378139499217928969529219886578E2), - L(5.555800830216764702779238020065345401144E1), - L(2.646215470959050279430447295801291168941E1), - L(2.984905282103517497081766758550112011265E0), - /* 1.0E0 */ -}; -/* erfc(0.75) = C17a + C17b to extra precision. */ -static const _Float128 C17a = L(0.2888336181640625); -static const _Float128 C17b = L(1.0748182422368401062165408589222625794046E-5); - - -/* erfc(x + 0.875) = erfc(0.875) + x R(x) - 0 <= x < 0.125 - Peak relative error 2.2e-35 */ -#define NRNr18 8 -static const _Float128 RNr18[NRNr18 + 1] = -{ - L(-1.342044899087593397419622771847219619588E3), - L(6.127221294229172997509252330961641850598E2), - L(-4.519821356522291185621206350470820610727E2), - L(1.223275177825128732497510264197915160235E1), - L(-2.730789571382971355625020710543532867692E1), - L(4.045181204921538886880171727755445395862E0), - L(-4.925146477876592723401384464691452700539E0), - L(5.933878036611279244654299924101068088582E-1), - L(-5.557645435858916025452563379795159124753E-2) -}; -#define NRDr18 7 -static const _Float128 RDr18[NRDr18 + 1] = -{ - L(2.557518000661700588758505116291983092951E3), - L(1.070171433382888994954602511991940418588E3), - L(1.344842834423493081054489613250688918709E3), - L(4.161144478449381901208660598266288188426E2), - L(2.763670252219855198052378138756906980422E2), - L(5.998153487868943708236273854747564557632E1), - L(2.657695108438628847733050476209037025318E1), - L(3.252140524394421868923289114410336976512E0), - /* 1.0E0 */ -}; -/* erfc(0.875) = C18a + C18b to extra precision. */ -static const _Float128 C18a = L(0.215911865234375); -static const _Float128 C18b = L(1.3073705765341685464282101150637224028267E-5); - -/* erfc(x + 1.0) = erfc(1.0) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.6e-35 */ -#define NRNr19 8 -static const _Float128 RNr19[NRNr19 + 1] = -{ - L(-1.139180936454157193495882956565663294826E3), - L(6.134903129086899737514712477207945973616E2), - L(-4.628909024715329562325555164720732868263E2), - L(4.165702387210732352564932347500364010833E1), - L(-2.286979913515229747204101330405771801610E1), - L(1.870695256449872743066783202326943667722E0), - L(-4.177486601273105752879868187237000032364E0), - L(7.533980372789646140112424811291782526263E-1), - L(-8.629945436917752003058064731308767664446E-2) -}; -#define NRDr19 7 -static const _Float128 RDr19[NRDr19 + 1] = -{ - L(2.744303447981132701432716278363418643778E3), - L(1.266396359526187065222528050591302171471E3), - L(1.466739461422073351497972255511919814273E3), - L(4.868710570759693955597496520298058147162E2), - L(2.993694301559756046478189634131722579643E2), - L(6.868976819510254139741559102693828237440E1), - L(2.801505816247677193480190483913753613630E1), - L(3.604439909194350263552750347742663954481E0), - /* 1.0E0 */ -}; -/* erfc(1.0) = C19a + C19b to extra precision. */ -static const _Float128 C19a = L(0.15728759765625); -static const _Float128 C19b = L(1.1609394035130658779364917390740703933002E-5); - -/* erfc(x + 1.125) = erfc(1.125) + x R(x) - 0 <= x < 0.125 - Peak relative error 3.6e-36 */ -#define NRNr20 8 -static const _Float128 RNr20[NRNr20 + 1] = -{ - L(-9.652706916457973956366721379612508047640E2), - L(5.577066396050932776683469951773643880634E2), - L(-4.406335508848496713572223098693575485978E2), - L(5.202893466490242733570232680736966655434E1), - L(-1.931311847665757913322495948705563937159E1), - L(-9.364318268748287664267341457164918090611E-2), - L(-3.306390351286352764891355375882586201069E0), - L(7.573806045289044647727613003096916516475E-1), - L(-9.611744011489092894027478899545635991213E-2) -}; -#define NRDr20 7 -static const _Float128 RDr20[NRDr20 + 1] = -{ - L(3.032829629520142564106649167182428189014E3), - L(1.659648470721967719961167083684972196891E3), - L(1.703545128657284619402511356932569292535E3), - L(6.393465677731598872500200253155257708763E2), - L(3.489131397281030947405287112726059221934E2), - L(8.848641738570783406484348434387611713070E1), - L(3.132269062552392974833215844236160958502E1), - L(4.430131663290563523933419966185230513168E0) - /* 1.0E0 */ -}; -/* erfc(1.125) = C20a + C20b to extra precision. */ -static const _Float128 C20a = L(0.111602783203125); -static const _Float128 C20b = L(8.9850951672359304215530728365232161564636E-6); - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 7/8 <= 1/x < 1 - Peak relative error 1.4e-35 */ -#define NRNr8 9 -static const _Float128 RNr8[NRNr8 + 1] = -{ - L(3.587451489255356250759834295199296936784E1), - L(5.406249749087340431871378009874875889602E2), - L(2.931301290625250886238822286506381194157E3), - L(7.359254185241795584113047248898753470923E3), - L(9.201031849810636104112101947312492532314E3), - L(5.749697096193191467751650366613289284777E3), - L(1.710415234419860825710780802678697889231E3), - L(2.150753982543378580859546706243022719599E2), - L(8.740953582272147335100537849981160931197E0), - L(4.876422978828717219629814794707963640913E-2) -}; -#define NRDr8 8 -static const _Float128 RDr8[NRDr8 + 1] = -{ - L(6.358593134096908350929496535931630140282E1), - L(9.900253816552450073757174323424051765523E2), - L(5.642928777856801020545245437089490805186E3), - L(1.524195375199570868195152698617273739609E4), - L(2.113829644500006749947332935305800887345E4), - L(1.526438562626465706267943737310282977138E4), - L(5.561370922149241457131421914140039411782E3), - L(9.394035530179705051609070428036834496942E2), - L(6.147019596150394577984175188032707343615E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 0.75 <= 1/x <= 0.875 - Peak relative error 2.0e-36 */ -#define NRNr7 9 -static const _Float128 RNr7[NRNr7 + 1] = -{ - L(1.686222193385987690785945787708644476545E1), - L(1.178224543567604215602418571310612066594E3), - L(1.764550584290149466653899886088166091093E4), - L(1.073758321890334822002849369898232811561E5), - L(3.132840749205943137619839114451290324371E5), - L(4.607864939974100224615527007793867585915E5), - L(3.389781820105852303125270837910972384510E5), - L(1.174042187110565202875011358512564753399E5), - L(1.660013606011167144046604892622504338313E4), - L(6.700393957480661937695573729183733234400E2) -}; -#define NRDr7 9 -static const _Float128 RDr7[NRDr7 + 1] = -{ -L(-1.709305024718358874701575813642933561169E3), -L(-3.280033887481333199580464617020514788369E4), -L(-2.345284228022521885093072363418750835214E5), -L(-8.086758123097763971926711729242327554917E5), -L(-1.456900414510108718402423999575992450138E6), -L(-1.391654264881255068392389037292702041855E6), -L(-6.842360801869939983674527468509852583855E5), -L(-1.597430214446573566179675395199807533371E5), -L(-1.488876130609876681421645314851760773480E4), -L(-3.511762950935060301403599443436465645703E2) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 5/8 <= 1/x < 3/4 - Peak relative error 1.9e-35 */ -#define NRNr6 9 -static const _Float128 RNr6[NRNr6 + 1] = -{ - L(1.642076876176834390623842732352935761108E0), - L(1.207150003611117689000664385596211076662E2), - L(2.119260779316389904742873816462800103939E3), - L(1.562942227734663441801452930916044224174E4), - L(5.656779189549710079988084081145693580479E4), - L(1.052166241021481691922831746350942786299E5), - L(9.949798524786000595621602790068349165758E4), - L(4.491790734080265043407035220188849562856E4), - L(8.377074098301530326270432059434791287601E3), - L(4.506934806567986810091824791963991057083E2) -}; -#define NRDr6 9 -static const _Float128 RDr6[NRDr6 + 1] = -{ -L(-1.664557643928263091879301304019826629067E2), -L(-3.800035902507656624590531122291160668452E3), -L(-3.277028191591734928360050685359277076056E4), -L(-1.381359471502885446400589109566587443987E5), -L(-3.082204287382581873532528989283748656546E5), -L(-3.691071488256738343008271448234631037095E5), -L(-2.300482443038349815750714219117566715043E5), -L(-6.873955300927636236692803579555752171530E4), -L(-8.262158817978334142081581542749986845399E3), -L(-2.517122254384430859629423488157361983661E2) - /* 1.00 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/2 <= 1/x < 5/8 - Peak relative error 4.6e-36 */ -#define NRNr5 10 -static const _Float128 RNr5[NRNr5 + 1] = -{ -L(-3.332258927455285458355550878136506961608E-3), -L(-2.697100758900280402659586595884478660721E-1), -L(-6.083328551139621521416618424949137195536E0), -L(-6.119863528983308012970821226810162441263E1), -L(-3.176535282475593173248810678636522589861E2), -L(-8.933395175080560925809992467187963260693E2), -L(-1.360019508488475978060917477620199499560E3), -L(-1.075075579828188621541398761300910213280E3), -L(-4.017346561586014822824459436695197089916E2), -L(-5.857581368145266249509589726077645791341E1), -L(-2.077715925587834606379119585995758954399E0) -}; -#define NRDr5 9 -static const _Float128 RDr5[NRDr5 + 1] = -{ - L(3.377879570417399341550710467744693125385E-1), - L(1.021963322742390735430008860602594456187E1), - L(1.200847646592942095192766255154827011939E2), - L(7.118915528142927104078182863387116942836E2), - L(2.318159380062066469386544552429625026238E3), - L(4.238729853534009221025582008928765281620E3), - L(4.279114907284825886266493994833515580782E3), - L(2.257277186663261531053293222591851737504E3), - L(5.570475501285054293371908382916063822957E2), - L(5.142189243856288981145786492585432443560E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 3/8 <= 1/x < 1/2 - Peak relative error 2.0e-36 */ -#define NRNr4 10 -static const _Float128 RNr4[NRNr4 + 1] = -{ - L(3.258530712024527835089319075288494524465E-3), - L(2.987056016877277929720231688689431056567E-1), - L(8.738729089340199750734409156830371528862E0), - L(1.207211160148647782396337792426311125923E2), - L(8.997558632489032902250523945248208224445E2), - L(3.798025197699757225978410230530640879762E3), - L(9.113203668683080975637043118209210146846E3), - L(1.203285891339933238608683715194034900149E4), - L(8.100647057919140328536743641735339740855E3), - L(2.383888249907144945837976899822927411769E3), - L(2.127493573166454249221983582495245662319E2) -}; -#define NRDr4 10 -static const _Float128 RDr4[NRDr4 + 1] = -{ -L(-3.303141981514540274165450687270180479586E-1), -L(-1.353768629363605300707949368917687066724E1), -L(-2.206127630303621521950193783894598987033E2), -L(-1.861800338758066696514480386180875607204E3), -L(-8.889048775872605708249140016201753255599E3), -L(-2.465888106627948210478692168261494857089E4), -L(-3.934642211710774494879042116768390014289E4), -L(-3.455077258242252974937480623730228841003E4), -L(-1.524083977439690284820586063729912653196E4), -L(-2.810541887397984804237552337349093953857E3), -L(-1.343929553541159933824901621702567066156E2) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/4 <= 1/x < 3/8 - Peak relative error 8.4e-37 */ -#define NRNr3 11 -static const _Float128 RNr3[NRNr3 + 1] = -{ -L(-1.952401126551202208698629992497306292987E-6), -L(-2.130881743066372952515162564941682716125E-4), -L(-8.376493958090190943737529486107282224387E-3), -L(-1.650592646560987700661598877522831234791E-1), -L(-1.839290818933317338111364667708678163199E0), -L(-1.216278715570882422410442318517814388470E1), -L(-4.818759344462360427612133632533779091386E1), -L(-1.120994661297476876804405329172164436784E2), -L(-1.452850765662319264191141091859300126931E2), -L(-9.485207851128957108648038238656777241333E1), -L(-2.563663855025796641216191848818620020073E1), -L(-1.787995944187565676837847610706317833247E0) -}; -#define NRDr3 10 -static const _Float128 RDr3[NRDr3 + 1] = -{ - L(1.979130686770349481460559711878399476903E-4), - L(1.156941716128488266238105813374635099057E-2), - L(2.752657634309886336431266395637285974292E-1), - L(3.482245457248318787349778336603569327521E0), - L(2.569347069372696358578399521203959253162E1), - L(1.142279000180457419740314694631879921561E2), - L(3.056503977190564294341422623108332700840E2), - L(4.780844020923794821656358157128719184422E2), - L(4.105972727212554277496256802312730410518E2), - L(1.724072188063746970865027817017067646246E2), - L(2.815939183464818198705278118326590370435E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/8 <= 1/x < 1/4 - Peak relative error 1.5e-36 */ -#define NRNr2 11 -static const _Float128 RNr2[NRNr2 + 1] = -{ -L(-2.638914383420287212401687401284326363787E-8), -L(-3.479198370260633977258201271399116766619E-6), -L(-1.783985295335697686382487087502222519983E-4), -L(-4.777876933122576014266349277217559356276E-3), -L(-7.450634738987325004070761301045014986520E-2), -L(-7.068318854874733315971973707247467326619E-1), -L(-4.113919921935944795764071670806867038732E0), -L(-1.440447573226906222417767283691888875082E1), -L(-2.883484031530718428417168042141288943905E1), -L(-2.990886974328476387277797361464279931446E1), -L(-1.325283914915104866248279787536128997331E1), -L(-1.572436106228070195510230310658206154374E0) -}; -#define NRDr2 10 -static const _Float128 RDr2[NRDr2 + 1] = -{ - L(2.675042728136731923554119302571867799673E-6), - L(2.170997868451812708585443282998329996268E-4), - L(7.249969752687540289422684951196241427445E-3), - L(1.302040375859768674620410563307838448508E-1), - L(1.380202483082910888897654537144485285549E0), - L(8.926594113174165352623847870299170069350E0), - L(3.521089584782616472372909095331572607185E1), - L(8.233547427533181375185259050330809105570E1), - L(1.072971579885803033079469639073292840135E2), - L(6.943803113337964469736022094105143158033E1), - L(1.775695341031607738233608307835017282662E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/128 <= 1/x < 1/8 - Peak relative error 2.2e-36 */ -#define NRNr1 9 -static const _Float128 RNr1[NRNr1 + 1] = -{ -L(-4.250780883202361946697751475473042685782E-8), -L(-5.375777053288612282487696975623206383019E-6), -L(-2.573645949220896816208565944117382460452E-4), -L(-6.199032928113542080263152610799113086319E-3), -L(-8.262721198693404060380104048479916247786E-2), -L(-6.242615227257324746371284637695778043982E-1), -L(-2.609874739199595400225113299437099626386E0), -L(-5.581967563336676737146358534602770006970E0), -L(-5.124398923356022609707490956634280573882E0), -L(-1.290865243944292370661544030414667556649E0) -}; -#define NRDr1 8 -static const _Float128 RDr1[NRDr1 + 1] = -{ - L(4.308976661749509034845251315983612976224E-6), - L(3.265390126432780184125233455960049294580E-4), - L(9.811328839187040701901866531796570418691E-3), - L(1.511222515036021033410078631914783519649E-1), - L(1.289264341917429958858379585970225092274E0), - L(6.147640356182230769548007536914983522270E0), - L(1.573966871337739784518246317003956180750E1), - L(1.955534123435095067199574045529218238263E1), - L(9.472613121363135472247929109615785855865E0) - /* 1.0E0 */ -}; - - -_Float128 -__erfl (_Float128 x) -{ - _Float128 a, y, z; - int32_t i, ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - - if (ix >= 0x7fff0000) - { /* erf(nan)=nan */ - i = ((sign & 0xffff0000) >> 31) << 1; - return (_Float128) (1 - i) + one / x; /* erf(+-inf)=+-1 */ - } - - if (ix >= 0x3fff0000) /* |x| >= 1.0 */ - { - if (ix >= 0x40030000 && sign > 0) - return one; /* x >= 16, avoid spurious underflow from erfc. */ - y = __erfcl (x); - return (one - y); - /* return (one - __erfcl (x)); */ - } - u.parts32.w0 = ix; - a = u.value; - z = x * x; - if (ix < 0x3ffec000) /* a < 0.875 */ - { - if (ix < 0x3fc60000) /* |x|<2**-57 */ - { - if (ix < 0x00080000) - { - /* Avoid spurious underflow. */ - _Float128 ret = 0.0625 * (16.0 * x + (16.0 * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx * x; - } - y = a + a * neval (z, TN1, NTN1) / deval (z, TD1, NTD1); - } - else - { - a = a - one; - y = erf_const + neval (a, TN2, NTN2) / deval (a, TD2, NTD2); - } - - if (sign & 0x80000000) /* x < 0 */ - y = -y; - return( y ); -} - -weak_alias (__erfl, erfl) -_Float128 -__erfcl (_Float128 x) -{ - _Float128 y, z, p, r; - int32_t i, ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; - - if (ix >= 0x7fff0000) - { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - return (_Float128) (((u_int32_t) sign >> 31) << 1) + one / x; - } - - if (ix < 0x3ffd0000) /* |x| <1/4 */ - { - if (ix < 0x3f8d0000) /* |x|<2**-114 */ - return one - x; - return one - __erfl (x); - } - if (ix < 0x3fff4000) /* 1.25 */ - { - x = u.value; - i = 8.0 * x; - switch (i) - { - case 2: - z = x - L(0.25); - y = C13b + z * neval (z, RNr13, NRNr13) / deval (z, RDr13, NRDr13); - y += C13a; - break; - case 3: - z = x - L(0.375); - y = C14b + z * neval (z, RNr14, NRNr14) / deval (z, RDr14, NRDr14); - y += C14a; - break; - case 4: - z = x - L(0.5); - y = C15b + z * neval (z, RNr15, NRNr15) / deval (z, RDr15, NRDr15); - y += C15a; - break; - case 5: - z = x - L(0.625); - y = C16b + z * neval (z, RNr16, NRNr16) / deval (z, RDr16, NRDr16); - y += C16a; - break; - case 6: - z = x - L(0.75); - y = C17b + z * neval (z, RNr17, NRNr17) / deval (z, RDr17, NRDr17); - y += C17a; - break; - case 7: - z = x - L(0.875); - y = C18b + z * neval (z, RNr18, NRNr18) / deval (z, RDr18, NRDr18); - y += C18a; - break; - case 8: - z = x - 1; - y = C19b + z * neval (z, RNr19, NRNr19) / deval (z, RDr19, NRDr19); - y += C19a; - break; - default: /* i == 9. */ - z = x - L(1.125); - y = C20b + z * neval (z, RNr20, NRNr20) / deval (z, RDr20, NRDr20); - y += C20a; - break; - } - if (sign & 0x80000000) - y = 2 - y; - return y; - } - /* 1.25 < |x| < 107 */ - if (ix < 0x4005ac00) - { - /* x < -9 */ - if ((ix >= 0x40022000) && (sign & 0x80000000)) - return two - tiny; - - x = fabsl (x); - z = one / (x * x); - i = 8.0 / x; - switch (i) - { - default: - case 0: - p = neval (z, RNr1, NRNr1) / deval (z, RDr1, NRDr1); - break; - case 1: - p = neval (z, RNr2, NRNr2) / deval (z, RDr2, NRDr2); - break; - case 2: - p = neval (z, RNr3, NRNr3) / deval (z, RDr3, NRDr3); - break; - case 3: - p = neval (z, RNr4, NRNr4) / deval (z, RDr4, NRDr4); - break; - case 4: - p = neval (z, RNr5, NRNr5) / deval (z, RDr5, NRDr5); - break; - case 5: - p = neval (z, RNr6, NRNr6) / deval (z, RDr6, NRDr6); - break; - case 6: - p = neval (z, RNr7, NRNr7) / deval (z, RDr7, NRDr7); - break; - case 7: - p = neval (z, RNr8, NRNr8) / deval (z, RDr8, NRDr8); - break; - } - u.value = x; - u.parts32.w3 = 0; - u.parts32.w2 &= 0xfe000000; - z = u.value; - r = __ieee754_expl (-z * z - 0.5625) * - __ieee754_expl ((z - x) * (z + x) + p); - if ((sign & 0x80000000) == 0) - { - _Float128 ret = r / x; - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - else - return two - r / x; - } - else - { - if ((sign & 0x80000000) == 0) - { - __set_errno (ERANGE); - return tiny * tiny; - } - else - return two - tiny; - } -} - -weak_alias (__erfcl, erfcl) diff --git a/sysdeps/ieee754/ldbl-128/s_expm1l.c b/sysdeps/ieee754/ldbl-128/s_expm1l.c deleted file mode 100644 index 46d078b77b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_expm1l.c +++ /dev/null @@ -1,166 +0,0 @@ -/* expm1l.c - * - * Exponential function, minus 1 - * 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, expm1l(); - * - * y = expm1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns e (2.71828...) raised to the x power, minus one. - * - * Range reduction is accomplished by separating the argument - * into an integer k and fraction f such that - * - * x k f - * e = 2 e. - * - * An expansion x + .5 x^2 + x^3 R(x) approximates exp(f) - 1 - * in the basic range [-0.5 ln 2, 0.5 ln 2]. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -79,+MAXLOG 100,000 1.7e-34 4.5e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - - -#include -#include -#include -#include - -/* exp(x) - 1 = x + 0.5 x^2 + x^3 P(x)/Q(x) - -.5 ln 2 < x < .5 ln 2 - Theoretical peak relative error = 8.1e-36 */ - -static const _Float128 - P0 = L(2.943520915569954073888921213330863757240E8), - P1 = L(-5.722847283900608941516165725053359168840E7), - P2 = L(8.944630806357575461578107295909719817253E6), - P3 = L(-7.212432713558031519943281748462837065308E5), - P4 = L(4.578962475841642634225390068461943438441E4), - P5 = L(-1.716772506388927649032068540558788106762E3), - P6 = L(4.401308817383362136048032038528753151144E1), - P7 = L(-4.888737542888633647784737721812546636240E-1), - Q0 = L(1.766112549341972444333352727998584753865E9), - Q1 = L(-7.848989743695296475743081255027098295771E8), - Q2 = L(1.615869009634292424463780387327037251069E8), - Q3 = L(-2.019684072836541751428967854947019415698E7), - Q4 = L(1.682912729190313538934190635536631941751E6), - Q5 = L(-9.615511549171441430850103489315371768998E4), - Q6 = L(3.697714952261803935521187272204485251835E3), - Q7 = L(-8.802340681794263968892934703309274564037E1), - /* Q8 = 1.000000000000000000000000000000000000000E0 */ -/* C1 + C2 = ln 2 */ - - C1 = L(6.93145751953125E-1), - C2 = L(1.428606820309417232121458176568075500134E-6), -/* ln 2^-114 */ - minarg = L(-7.9018778583833765273564461846232128760607E1), big = L(1e4932); - - -_Float128 -__expm1l (_Float128 x) -{ - _Float128 px, qx, xx; - int32_t ix, sign; - ieee854_long_double_shape_type u; - int k; - - /* Detect infinity and NaN. */ - u.value = x; - ix = u.parts32.w0; - sign = ix & 0x80000000; - ix &= 0x7fffffff; - if (!sign && ix >= 0x40060000) - { - /* If num is positive and exp >= 6 use plain exp. */ - return __expl (x); - } - if (ix >= 0x7fff0000) - { - /* Infinity (which must be negative infinity). */ - if (((ix & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return -1; - /* NaN. Invalid exception if signaling. */ - return x + x; - } - - /* expm1(+- 0) = +- 0. */ - if ((ix == 0) && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return x; - - /* Minimum value. */ - if (x < minarg) - return (4.0/big - 1); - - /* Avoid internal underflow when result does not underflow, while - ensuring underflow (without returning a zero of the wrong sign) - when the result does underflow. */ - if (fabsl (x) < L(0x1p-113)) - { - math_check_force_underflow (x); - return x; - } - - /* Express x = ln 2 (k + remainder), remainder not exceeding 1/2. */ - xx = C1 + C2; /* ln 2. */ - px = __floorl (0.5 + x / xx); - k = px; - /* remainder times ln 2 */ - x -= px * C1; - x -= px * C2; - - /* Approximate exp(remainder ln 2). */ - px = (((((((P7 * x - + P6) * x - + P5) * x + P4) * x + P3) * x + P2) * x + P1) * x + P0) * x; - - qx = (((((((x - + Q7) * x - + Q6) * x + Q5) * x + Q4) * x + Q3) * x + Q2) * x + Q1) * x + Q0; - - xx = x * x; - qx = x + (0.5 * xx + xx * px / qx); - - /* exp(x) = exp(k ln 2) exp(remainder ln 2) = 2^k exp(remainder ln 2). - - We have qx = exp(remainder ln 2) - 1, so - exp(x) - 1 = 2^k (qx + 1) - 1 - = 2^k qx + 2^k - 1. */ - - px = __ldexpl (1, k); - x = px * qx + (px - 1.0); - return x; -} -libm_hidden_def (__expm1l) -weak_alias (__expm1l, expm1l) diff --git a/sysdeps/ieee754/ldbl-128/s_fabsl.c b/sysdeps/ieee754/ldbl-128/s_fabsl.c deleted file mode 100644 index 0ce6f734cf..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fabsl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* s_fabsl.c -- long double version of s_fabs.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * fabsl(x) returns the absolute value of x. - */ - -#include -#include - -_Float128 __fabsl(_Float128 x) -{ - u_int64_t hx; - GET_LDOUBLE_MSW64(hx,x); - SET_LDOUBLE_MSW64(x,hx&0x7fffffffffffffffLL); - return x; -} -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/ieee754/ldbl-128/s_finitel.c b/sysdeps/ieee754/ldbl-128/s_finitel.c deleted file mode 100644 index 7c699688fe..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_finitel.c +++ /dev/null @@ -1,36 +0,0 @@ -/* s_finitel.c -- long double version of s_finite.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * finitel(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include - -int __finitel(_Float128 x) -{ - int64_t hx; - GET_LDOUBLE_MSW64(hx,x); - return (int)((u_int64_t)((hx&0x7fff000000000000LL) - -0x7fff000000000000LL)>>63); -} -mathx_hidden_def (__finitel) -weak_alias (__finitel, finitel) diff --git a/sysdeps/ieee754/ldbl-128/s_floorl.c b/sysdeps/ieee754/ldbl-128/s_floorl.c deleted file mode 100644 index 13ad0848a4..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_floorl.c +++ /dev/null @@ -1,67 +0,0 @@ -/* s_floorl.c -- long double version of s_floor.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * floorl(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -_Float128 __floorl(_Float128 x) -{ - int64_t i0,i1,j0; - u_int64_t i,j; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<48) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=i1=0;} - else if(((i0&0x7fffffffffffffffLL)|i1)!=0) - { i0=0xbfff000000000000ULL;i1=0;} - } else { - i = (0x0000ffffffffffffULL)>>j0; - if(((i0&i)|i1)==0) return x; /* x is integral */ - if(i0<0) i0 += (0x0001000000000000LL)>>j0; - i0 &= (~i); i1=0; - } - } else if (j0>111) { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } else { - i = -1ULL>>(j0-48); - if((i1&i)==0) return x; /* x is integral */ - if(i0<0) { - if(j0==48) i0+=1; - else { - j = i1+(1LL<<(112-j0)); - if(j, 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This implementation relies on long double being more than twice as - precise as double and uses rounding to odd in order to avoid problems - with double rounding. - See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -double -__fma (double x, double y, double z) -{ - fenv_t env; - /* Multiplication is always exact. */ - long double temp = (long double) x * (long double) y; - - /* Ensure correct sign of an exact zero result by performing the - addition in the original rounding mode in that case. */ - if (temp == -z) - return (double) temp + z; - - union ieee854_long_double u; - feholdexcept (&env); - fesetround (FE_TOWARDZERO); - /* Perform addition with round to odd. */ - u.d = temp + (long double) z; - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* And finally truncation with round to nearest. */ - return (double) u.d; -} -#ifndef __fma -weak_alias (__fma, fma) -#endif diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c deleted file mode 100644 index 40c4e73d2b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fmal.c +++ /dev/null @@ -1,298 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* This implementation uses rounding to odd to avoid problems with - double rounding. See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -_Float128 -__fmal (_Float128 x, _Float128 y, _Float128 z) -{ - union ieee854_long_double u, v, w; - int adjust = 0; - u.d = x; - v.d = y; - w.d = z; - if (__builtin_expect (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG, 0)) - { - /* If z is Inf, but x and y are finite, the result should be - z rather than NaN. */ - if (w.ieee.exponent == 0x7fff - && u.ieee.exponent != 0x7fff - && v.ieee.exponent != 0x7fff) - return (z + x) + y; - /* If z is zero and x are y are nonzero, compute the result - as x * y to avoid the wrong sign of a zero result if x * y - underflows to 0. */ - if (z == 0 && x != 0 && y != 0) - return x * y; - /* If x or y or z is Inf/NaN, or if x * y is zero, compute as - x * y + z. */ - if (u.ieee.exponent == 0x7fff - || v.ieee.exponent == 0x7fff - || w.ieee.exponent == 0x7fff - || x == 0 - || y == 0) - return x * y + z; - /* If fma will certainly overflow, compute as x * y. */ - if (u.ieee.exponent + v.ieee.exponent - > 0x7fff + IEEE854_LONG_DOUBLE_BIAS) - return x * y; - /* If x * y is less than 1/4 of LDBL_TRUE_MIN, neither the - result nor whether there is underflow depends on its exact - value, only on its sign. */ - if (u.ieee.exponent + v.ieee.exponent - < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2) - { - int neg = u.ieee.negative ^ v.ieee.negative; - _Float128 tiny = neg ? L(-0x1p-16494) : L(0x1p-16494); - if (w.ieee.exponent >= 3) - return tiny + z; - /* Scaling up, adding TINY and scaling down produces the - correct result, because in round-to-nearest mode adding - TINY has no effect and in other modes double rounding is - harmless. But it may not produce required underflow - exceptions. */ - v.d = z * L(0x1p114) + tiny; - if (TININESS_AFTER_ROUNDING - ? v.ieee.exponent < 115 - : (w.ieee.exponent == 0 - || (w.ieee.exponent == 1 - && w.ieee.negative != neg - && w.ieee.mantissa3 == 0 - && w.ieee.mantissa2 == 0 - && w.ieee.mantissa1 == 0 - && w.ieee.mantissa0 == 0))) - { - _Float128 force_underflow = x * y; - math_force_eval (force_underflow); - } - return v.d * L(0x1p-114); - } - if (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG) - { - /* Compute 1p-113 times smaller result and multiply - at the end. */ - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent -= LDBL_MANT_DIG; - else - v.ieee.exponent -= LDBL_MANT_DIG; - /* If x + y exponent is very large and z exponent is very small, - it doesn't matter if we don't adjust it. */ - if (w.ieee.exponent > LDBL_MANT_DIG) - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - /* Similarly. - If z exponent is very large and x and y exponents are - very small, adjust them up to avoid spurious underflows, - rather than down. */ - if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + 2 * LDBL_MANT_DIG) - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - } - else if (u.ieee.exponent > v.ieee.exponent) - { - if (u.ieee.exponent > LDBL_MANT_DIG) - u.ieee.exponent -= LDBL_MANT_DIG; - } - else if (v.ieee.exponent > LDBL_MANT_DIG) - v.ieee.exponent -= LDBL_MANT_DIG; - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - u.ieee.exponent -= LDBL_MANT_DIG; - if (v.ieee.exponent) - v.ieee.exponent += LDBL_MANT_DIG; - else - v.d *= L(0x1p113); - } - else if (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - v.ieee.exponent -= LDBL_MANT_DIG; - if (u.ieee.exponent) - u.ieee.exponent += LDBL_MANT_DIG; - else - u.d *= L(0x1p113); - } - else /* if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG) */ - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 6) - { - if (w.ieee.exponent) - w.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - w.d *= L(0x1p228); - adjust = -1; - } - /* Otherwise x * y should just affect inexact - and nothing else. */ - } - x = u.d; - y = v.d; - z = w.d; - } - - /* Ensure correct sign of exact 0 + 0. */ - if (__glibc_unlikely ((x == 0 || y == 0) && z == 0)) - { - x = math_opt_barrier (x); - return x * y + z; - } - - fenv_t env; - feholdexcept (&env); - fesetround (FE_TONEAREST); - - /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ -#define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1) - _Float128 x1 = x * C; - _Float128 y1 = y * C; - _Float128 m1 = x * y; - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - _Float128 x2 = x - x1; - _Float128 y2 = y - y1; - _Float128 m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; - - /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - _Float128 a1 = z + m1; - _Float128 t1 = a1 - z; - _Float128 t2 = a1 - t1; - t1 = m1 - t1; - t2 = z - t2; - _Float128 a2 = t1 + t2; - /* Ensure the arithmetic is not scheduled after feclearexcept call. */ - math_force_eval (m2); - math_force_eval (a2); - feclearexcept (FE_INEXACT); - - /* If the result is an exact zero, ensure it has the correct sign. */ - if (a1 == 0 && m2 == 0) - { - feupdateenv (&env); - /* Ensure that round-to-nearest value of z + m1 is not reused. */ - z = math_opt_barrier (z); - return z + m1; - } - - fesetround (FE_TOWARDZERO); - /* Perform m2 + a2 addition with round to odd. */ - u.d = a2 + m2; - - if (__glibc_likely (adjust == 0)) - { - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d. */ - return a1 + u.d; - } - else if (__glibc_likely (adjust > 0)) - { - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d, scaled up. */ - return (a1 + u.d) * L(0x1p113); - } - else - { - if ((u.ieee.mantissa3 & 1) == 0) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - v.d = a1 + u.d; - /* Ensure the addition is not scheduled after fetestexcept call. */ - math_force_eval (v.d); - int j = fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Ensure the following computations are performed in default rounding - mode instead of just reusing the round to zero computation. */ - asm volatile ("" : "=m" (u) : "m" (u)); - /* If a1 + u.d is exact, the only rounding happens during - scaling down. */ - if (j == 0) - return v.d * L(0x1p-228); - /* If result rounded to zero is not subnormal, no double - rounding will occur. */ - if (v.ieee.exponent > 228) - return (a1 + u.d) * L(0x1p-228); - /* If v.d * 0x1p-228L with round to zero is a subnormal above - or equal to LDBL_MIN / 2, then v.d * 0x1p-228L shifts mantissa - down just by 1 bit, which means v.ieee.mantissa3 |= j would - change the round bit, not sticky or guard bit. - v.d * 0x1p-228L never normalizes by shifting up, - so round bit plus sticky bit should be already enough - for proper rounding. */ - if (v.ieee.exponent == 228) - { - /* If the exponent would be in the normal range when - rounding to normal precision with unbounded exponent - range, the exact result is known and spurious underflows - must be avoided on systems detecting tininess after - rounding. */ - if (TININESS_AFTER_ROUNDING) - { - w.d = a1 + u.d; - if (w.ieee.exponent == 229) - return w.d * L(0x1p-228); - } - /* v.ieee.mantissa3 & 2 is LSB bit of the result before rounding, - v.ieee.mantissa3 & 1 is the round bit and j is our sticky - bit. */ - w.d = 0; - w.ieee.mantissa3 = ((v.ieee.mantissa3 & 3) << 1) | j; - w.ieee.negative = v.ieee.negative; - v.ieee.mantissa3 &= ~3U; - v.d *= L(0x1p-228); - w.d *= L(0x1p-2); - return v.d + w.d; - } - v.ieee.mantissa3 |= j; - return v.d * L(0x1p-228); - } -} -weak_alias (__fmal, fmal) diff --git a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c deleted file mode 100644 index daa7d79ec2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -__fpclassifyl (_Float128 x) -{ - u_int64_t hx, lx; - int retval = FP_NORMAL; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - lx |= (hx & 0x0000ffffffffffffLL); - hx &= 0x7fff000000000000LL; - if ((hx | lx) == 0) - retval = FP_ZERO; - else if (hx == 0) - retval = FP_SUBNORMAL; - else if (hx == 0x7fff000000000000LL) - retval = lx != 0 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassifyl) diff --git a/sysdeps/ieee754/ldbl-128/s_frexpl.c b/sysdeps/ieee754/ldbl-128/s_frexpl.c deleted file mode 100644 index 47a171f551..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_frexpl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_frexpl.c -- long double version of s_frexp.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34); /* 0x4071000000000000, 0 */ - -_Float128 __frexpl(_Float128 x, int *eptr) -{ - u_int64_t hx, lx, ix; - GET_LDOUBLE_WORDS64(hx,lx,x); - ix = 0x7fffffffffffffffULL&hx; - *eptr = 0; - if(ix>=0x7fff000000000000ULL||((ix|lx)==0)) return x + x;/* 0,inf,nan */ - if (ix<0x0001000000000000ULL) { /* subnormal */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - ix = hx&0x7fffffffffffffffULL; - *eptr = -114; - } - *eptr += (ix>>48)-16382; - hx = (hx&0x8000ffffffffffffULL) | 0x3ffe000000000000ULL; - SET_LDOUBLE_MSW64(x,hx); - return x; -} -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpl.c b/sysdeps/ieee754/ldbl-128/s_fromfpl.c deleted file mode 100644 index e323b4c25b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c b/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c deleted file mode 100644 index 7dc507111b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Round to integer type. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 113 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (_Float128 x, int round, unsigned int width) -{ - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, x); - bool negative = (hx & 0x8000000000000000ULL) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - hx &= 0x7fffffffffffffffULL; - if ((hx | lx) == 0) - return 0; - int exponent = hx >> (MANT_DIG - 1 - 64); - exponent -= BIAS; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - - hx &= ((1ULL << (MANT_DIG - 1 - 64)) - 1); - hx |= 1ULL << (MANT_DIG - 1 - 64); - uintmax_t uret; - bool half_bit, more_bits; - /* The exponent is at most 63, so we are shifting right by at least - 49 bits. */ - if (exponent >= -1) - { - int shift = MANT_DIG - 1 - exponent; - if (shift <= 64) - { - uint64_t h = 1ULL << (shift - 1); - half_bit = (lx & h) != 0; - more_bits = (lx & (h - 1)) != 0; - uret = hx << (64 - shift); - if (shift != 64) - uret |= lx >> shift; - } - else - { - uint64_t h = 1ULL << (shift - 1 - 64); - half_bit = (hx & h) != 0; - more_bits = ((hx & (h - 1)) | lx) != 0; - uret = hx >> (shift - 64); - } - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpxl.c b/sysdeps/ieee754/ldbl-128/s_fromfpxl.c deleted file mode 100644 index 2f3189d7de..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_getpayloadl.c b/sysdeps/ieee754/ldbl-128/s_getpayloadl.c deleted file mode 100644 index d384645532..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_getpayloadl.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Get NaN payload. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -_Float128 -getpayloadl (const _Float128 *x) -{ - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, *x); - hx &= 0x7fffffffffffULL; - /* Construct the representation of the return value directly, since - 128-bit integers may not be available. */ - int lz; - if (hx == 0) - { - if (lx == 0) - return 0.0L; - else - lz = __builtin_clzll (lx) + 64; - } - else - lz = __builtin_clzll (hx); - int shift = lz - 15; - if (shift >= 64) - { - hx = lx << (shift - 64); - lx = 0; - } - else - { - /* 2 <= SHIFT <= 63. */ - hx = (hx << shift) | (lx >> (64 - shift)); - lx <<= shift; - } - hx = (hx & 0xffffffffffffULL) | ((0x3fffULL + 127 - lz) << 48); - _Float128 ret; - SET_LDOUBLE_WORDS64 (ret, hx, lx); - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128/s_isinfl.c b/sysdeps/ieee754/ldbl-128/s_isinfl.c deleted file mode 100644 index a41e8cf44b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_isinfl.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Written by J.T. Conklin . - * Change for long double by Jakub Jelinek - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include - -int -__isinfl (_Float128 x) -{ - int64_t hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - lx |= (hx & 0x7fffffffffffffffLL) ^ 0x7fff000000000000LL; - lx |= -lx; - return ~(lx >> 63) & (hx >> 62); -} -mathx_hidden_def (__isinfl) -weak_alias (__isinfl, isinfl) diff --git a/sysdeps/ieee754/ldbl-128/s_isnanl.c b/sysdeps/ieee754/ldbl-128/s_isnanl.c deleted file mode 100644 index 80f97fea4c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_isnanl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* s_isnanl.c -- long double version of s_isnan.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isnanl(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include - -int __isnanl(_Float128 x) -{ - int64_t hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - hx &= 0x7fffffffffffffffLL; - hx |= (u_int64_t)(lx|(-lx))>>63; - hx = 0x7fff000000000000LL - hx; - return (int)((u_int64_t)hx>>63); -} -mathx_hidden_def (__isnanl) -weak_alias (__isnanl, isnanl) diff --git a/sysdeps/ieee754/ldbl-128/s_issignalingl.c b/sysdeps/ieee754/ldbl-128/s_issignalingl.c deleted file mode 100644 index 02d6a0ae07..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_issignalingl.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignalingl (_Float128 x) -{ - u_int64_t hxi, lxi __attribute__ ((unused)); - GET_LDOUBLE_WORDS64 (hxi, lxi, x); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return ((hxi & UINT64_C (0x7fff800000000000)) - == UINT64_C (0x7fff800000000000)); -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - hxi ^= UINT64_C (0x0000800000000000); - /* If lxi != 0, then set any suitable bit of the significand in hxi. */ - hxi |= (lxi | -lxi) >> 63; - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (hxi & UINT64_C (0x7fffffffffffffff)) > UINT64_C (0x7fff800000000000); -#endif -} -libm_hidden_def (__issignalingl) diff --git a/sysdeps/ieee754/ldbl-128/s_llrintl.c b/sysdeps/ieee754/ldbl-128/s_llrintl.c deleted file mode 100644 index d08a90a1b3..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_llrintl.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const _Float128 two112[2] = -{ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -long long int -__llrintl (_Float128 x) -{ - int32_t j0; - u_int64_t i0,i1; - _Float128 w; - _Float128 t; - long long int result; - int sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sx = i0 >> 63; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LLONG_MAX + 1 implied by J0 < 63. */ - if (x > (_Float128) LLONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LLONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < 0) - result = 0; - else if (j0 <= 48) - result = i0 >> (48 - j0); - else - result = ((long long int) i0 << (j0 - 48)) | (i1 >> (112 - j0)); - } - else - { - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (x < (_Float128) LLONG_MIN - && x > (_Float128) LLONG_MIN - 1) - { - /* If truncation produces LLONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LLONG_MIN ? FE_INEXACT : FE_INVALID); - return LLONG_MIN; - } - else if (FIX_LDBL_LLONG_CONVERT_OVERFLOW && x != (_Float128) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LLONG_MAX : LLONG_MIN; - } - -#endif - return (long long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__llrintl, llrintl) diff --git a/sysdeps/ieee754/ldbl-128/s_llroundl.c b/sysdeps/ieee754/ldbl-128/s_llroundl.c deleted file mode 100644 index bb0b5bcf4b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_llroundl.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Round long double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -long long int -__llroundl (_Float128 x) -{ - int64_t j0; - u_int64_t i1, i0; - long long int result; - int sign; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sign = (i0 & 0x8000000000000000ULL) != 0 ? -1 : 1; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < 48) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x0000800000000000LL >> j0; - result = i0 >> (48 - j0); - } - } - else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 112) - result = ((long long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { - u_int64_t j = i1 + (0x8000000000000000ULL >> (j0 - 48)); - if (j < i1) - ++i0; - - if (j0 == 48) - result = (long long int) i0; - else - { - result = ((long long int) i0 << (j0 - 48)) | (j >> (112 - j0)); -#ifdef FE_INVALID - if (sign == 1 && result == LLONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (FIX_LDBL_LLONG_CONVERT_OVERFLOW - && !(sign == -1 && x > (_Float128) LLONG_MIN - L(0.5))) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LLONG_MAX : LLONG_MIN; - } - else if (!FIX_LDBL_LLONG_CONVERT_OVERFLOW - && x <= (_Float128) LLONG_MIN - L(0.5)) - { - /* If truncation produces LLONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llroundl, llroundl) diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c deleted file mode 100644 index b8b2ffeba1..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_log1pl.c +++ /dev/null @@ -1,256 +0,0 @@ -/* log1pl.c - * - * Relative error logarithm - * Natural logarithm of 1+x, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log1pl(); - * - * y = log1pl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of 1+x. - * - * The argument 1+x is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(w-1)/(w+1), - * - * log(w) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -1, 8 100000 1.9e-34 4.3e-35 - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include - -/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x) - * 1/sqrt(2) <= 1+x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 - P12 = L(1.538612243596254322971797716843006400388E-6), - P11 = L(4.998469661968096229986658302195402690910E-1), - P10 = L(2.321125933898420063925789532045674660756E1), - P9 = L(4.114517881637811823002128927449878962058E2), - P8 = L(3.824952356185897735160588078446136783779E3), - P7 = L(2.128857716871515081352991964243375186031E4), - P6 = L(7.594356839258970405033155585486712125861E4), - P5 = L(1.797628303815655343403735250238293741397E5), - P4 = L(2.854829159639697837788887080758954924001E5), - P3 = L(3.007007295140399532324943111654767187848E5), - P2 = L(2.014652742082537582487669938141683759923E5), - P1 = L(7.771154681358524243729929227226708890930E4), - P0 = L(1.313572404063446165910279910527789794488E4), - /* Q12 = 1.000000000000000000000000000000000000000E0L, */ - Q11 = L(4.839208193348159620282142911143429644326E1), - Q10 = L(9.104928120962988414618126155557301584078E2), - Q9 = L(9.147150349299596453976674231612674085381E3), - Q8 = L(5.605842085972455027590989944010492125825E4), - Q7 = L(2.248234257620569139969141618556349415120E5), - Q6 = L(6.132189329546557743179177159925690841200E5), - Q5 = L(1.158019977462989115839826904108208787040E6), - Q4 = L(1.514882452993549494932585972882995548426E6), - Q3 = L(1.347518538384329112529391120390701166528E6), - Q2 = L(7.777690340007566932935753241556479363645E5), - Q1 = L(2.626900195321832660448791748036714883242E5), - Q0 = L(3.940717212190338497730839731583397586124E4); - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 - R5 = L(-8.828896441624934385266096344596648080902E-1), - R4 = L(8.057002716646055371965756206836056074715E1), - R3 = L(-2.024301798136027039250415126250455056397E3), - R2 = L(2.048819892795278657810231591630928516206E4), - R1 = L(-8.977257995689735303686582344659576526998E4), - R0 = L(1.418134209872192732479751274970992665513E5), - /* S6 = 1.000000000000000000000000000000000000000E0L, */ - S5 = L(-1.186359407982897997337150403816839480438E2), - S4 = L(3.998526750980007367835804959888064681098E3), - S3 = L(-5.748542087379434595104154610899551484314E4), - S2 = L(4.001557694070773974936904547424676279307E5), - S1 = L(-1.332535117259762928288745111081235577029E6), - S0 = L(1.701761051846631278975701529965589676574E6); - -/* C1 + C2 = ln 2 */ -static const _Float128 C1 = L(6.93145751953125E-1); -static const _Float128 C2 = L(1.428606820309417232121458176568075500134E-6); - -static const _Float128 sqrth = L(0.7071067811865475244008443621048490392848); -/* ln (2^16384 * (1 - 2^-113)) */ -static const _Float128 zero = 0; - -_Float128 -__log1pl (_Float128 xm1) -{ - _Float128 x, y, z, r, s; - ieee854_long_double_shape_type u; - int32_t hx; - int e; - - /* Test for NaN or infinity input. */ - u.value = xm1; - hx = u.parts32.w0; - if ((hx & 0x7fffffff) >= 0x7fff0000) - return xm1 + fabsl (xm1); - - /* log1p(+- 0) = +- 0. */ - if (((hx & 0x7fffffff) == 0) - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return xm1; - - if ((hx & 0x7fffffff) < 0x3f8e0000) - { - math_check_force_underflow (xm1); - if ((int) xm1 == 0) - return xm1; - } - - if (xm1 >= L(0x1p113)) - x = xm1; - else - x = xm1 + 1; - - /* log1p(-1) = -inf */ - if (x <= 0) - { - if (x == 0) - return (-1 / zero); /* log1p(-1) = -inf */ - else - return (zero / (x - x)); - } - - /* Separate mantissa from exponent. */ - - /* Use frexp used so that denormal numbers will be handled properly. */ - x = __frexpl (x, &e); - - /* Logarithm using log(x) = z + z^3 P(z^2)/Q(z^2), - where z = 2(x-1)/x+1). */ - if ((e > 2) || (e < -2)) - { - if (x < sqrth) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - r = ((((R5 * z - + R4) * z - + R3) * z - + R2) * z - + R1) * z - + R0; - s = (((((z - + S5) * z - + S4) * z - + S3) * z - + S2) * z - + S1) * z - + S0; - z = x * (z * r / s); - z = z + e * C2; - z = z + x; - z = z + e * C1; - return (z); - } - - - /* Logarithm using log(1+x) = x - .5x^2 + x^3 P(x)/Q(x). */ - - if (x < sqrth) - { - e -= 1; - if (e != 0) - x = 2 * x - 1; /* 2x - 1 */ - else - x = xm1; - } - else - { - if (e != 0) - x = x - 1; - else - x = xm1; - } - z = x * x; - r = (((((((((((P12 * x - + P11) * x - + P10) * x - + P9) * x - + P8) * x - + P7) * x - + P6) * x - + P5) * x - + P4) * x - + P3) * x - + P2) * x - + P1) * x - + P0; - s = (((((((((((x - + Q11) * x - + Q10) * x - + Q9) * x - + Q8) * x - + Q7) * x - + Q6) * x - + Q5) * x - + Q4) * x - + Q3) * x - + Q2) * x - + Q1) * x - + Q0; - y = x * (z * r / s); - y = y + e * C2; - z = y - L(0.5) * z; - z = z + x; - z = z + e * C1; - return (z); -} diff --git a/sysdeps/ieee754/ldbl-128/s_logbl.c b/sysdeps/ieee754/ldbl-128/s_logbl.c deleted file mode 100644 index 24baae64fa..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_logbl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_logbl.c -- long double version of s_logb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * long double logbl(x) - * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. - * Use ilogb instead. - */ - -#include -#include - -_Float128 -__logbl (_Float128 x) -{ - int64_t lx, hx, ex; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - hx &= 0x7fffffffffffffffLL; /* high |x| */ - if ((hx | lx) == 0) - return -1.0 / fabsl (x); - if (hx >= 0x7fff000000000000LL) - return x * x; - if ((ex = hx >> 48) == 0) /* IEEE 754 logb */ - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - int ma; - if (hx == 0) - ma = __builtin_clzll (lx) + 64; - else - ma = __builtin_clzll (hx); - ex -= ma - 16; - } - return (_Float128) (ex - 16383); -} - -weak_alias (__logbl, logbl) diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c deleted file mode 100644 index c690ddc8b8..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_lrintl.c +++ /dev/null @@ -1,137 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const _Float128 two112[2] = -{ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -long int -__lrintl (_Float128 x) -{ - int32_t j0; - u_int64_t i0,i1; - _Float128 w; - _Float128 t; - long int result; - int sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sx = i0 >> 63; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 48) - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 31. */ - if (sizeof (long int) == 4 - && x > (_Float128) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - result = (j0 < 0 ? 0 : i0 >> (48 - j0)); - } - else if (j0 >= 112) - result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 63. */ - if (sizeof (long int) == 8 - && x > (_Float128) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 == 48) - result = (long int) i0; - else - result = ((long int) i0 << (j0 - 48)) | (i1 >> (112 - j0)); - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (x < (_Float128) LONG_MIN - && x > (_Float128) LONG_MIN - 1) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MIN ? FE_INEXACT : FE_INVALID); - return LONG_MIN; - } - else if (FIX_LDBL_LONG_CONVERT_OVERFLOW && x != (_Float128) LONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LONG_MAX : LONG_MIN; - } - -#endif - return (long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__lrintl, lrintl) diff --git a/sysdeps/ieee754/ldbl-128/s_lroundl.c b/sysdeps/ieee754/ldbl-128/s_lroundl.c deleted file mode 100644 index 419112519d..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_lroundl.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Round long double value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -long int -__lroundl (_Float128 x) -{ - int64_t j0; - u_int64_t i1, i0; - long int result; - int sign; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sign = (i0 & 0x8000000000000000ULL) != 0 ? -1 : 1; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 48) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x0000800000000000LL >> j0; - result = i0 >> (48 - j0); -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - else if (j0 >= 112) - result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { - u_int64_t j = i1 + (0x8000000000000000ULL >> (j0 - 48)); - if (j < i1) - ++i0; - - if (j0 == 48) - result = (long int) i0; - else - { - result = ((long int) i0 << (j0 - 48)) | (j >> (112 - j0)); -#ifdef FE_INVALID - if (sizeof (long int) == 8 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (FIX_LDBL_LONG_CONVERT_OVERFLOW - && !(sign == -1 && x > (_Float128) LONG_MIN - L(0.5))) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LONG_MAX : LONG_MIN; - } - else if (!FIX_LDBL_LONG_CONVERT_OVERFLOW - && x <= (_Float128) LONG_MIN - L(0.5)) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LONG_MIN; - } -#endif - /* The number is too large. It is left implementation defined - what happens. */ - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lroundl, lroundl) diff --git a/sysdeps/ieee754/ldbl-128/s_modfl.c b/sysdeps/ieee754/ldbl-128/s_modfl.c deleted file mode 100644 index 01e150b24f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_modfl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_modfl.c -- long double version of s_modf.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * modfl(long double x, long double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include - -static const _Float128 one = 1.0; - -_Float128 __modfl(_Float128 x, _Float128 *iptr) -{ - int64_t i0,i1,j0; - u_int64_t i; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; /* exponent of x */ - if(j0<48) { /* integer part in high x */ - if(j0<0) { /* |x|<1 */ - /* *iptr = +-0 */ - SET_LDOUBLE_WORDS64(*iptr,i0&0x8000000000000000ULL,0); - return x; - } else { - i = (0x0000ffffffffffffLL)>>j0; - if(((i0&i)|i1)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { - SET_LDOUBLE_WORDS64(*iptr,i0&(~i),0); - return x - *iptr; - } - } - } else if (j0>111) { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if (j0 == 0x4000 && ((i0 & 0x0000ffffffffffffLL) | i1)) - return x*one; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { /* fraction part in low x */ - i = -1ULL>>(j0-48); - if((i1&i)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { - SET_LDOUBLE_WORDS64(*iptr,i0,i1&(~i)); - return x - *iptr; - } - } -} -weak_alias (__modfl, modfl) diff --git a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c deleted file mode 100644 index 1565a8183f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c +++ /dev/null @@ -1,67 +0,0 @@ -/* s_nearbyintl.c -- long double version of s_nearbyint.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * nearbyintl(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rintl(x). - */ - -#include -#include -#include - -static const _Float128 -TWO112[2]={ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -_Float128 __nearbyintl(_Float128 x) -{ - fenv_t env; - int64_t i0,j0,sx; - u_int64_t i1 __attribute__ ((unused)); - _Float128 w,t; - GET_LDOUBLE_WORDS64(i0,i1,x); - sx = (((u_int64_t)i0)>>63); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<112) { - if(j0<0) { - feholdexcept (&env); - w = TWO112[sx]+x; - t = w-TWO112[sx]; - math_force_eval (t); - fesetenv (&env); - GET_LDOUBLE_MSW64(i0,t); - SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63)); - return t; - } - } else { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - feholdexcept (&env); - w = TWO112[sx]+x; - t = w-TWO112[sx]; - math_force_eval (t); - fesetenv (&env); - return t; -} -weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/ieee754/ldbl-128/s_nextafterl.c b/sysdeps/ieee754/ldbl-128/s_nextafterl.c deleted file mode 100644 index d29f58a7e0..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nextafterl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_nextafterl.c -- long double version of s_nextafter.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nextafterl(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include - -_Float128 __nextafterl(_Float128 x, _Float128 y) -{ - int64_t hx,hy,ix,iy; - u_int64_t lx,ly; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffffffffffffLL; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if(((ix>=0x7fff000000000000LL)&&((ix-0x7fff000000000000LL)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - _Float128 u; - SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */ - if(lx==0) hx--; - lx--; - } else { /* x < y, x += ulp */ - lx++; - if(lx==0) hx++; - } - } else { /* x < 0 */ - if(hy>=0||hx>hy||((hx==hy)&&(lx>ly))){/* x < y, x -= ulp */ - if(lx==0) hx--; - lx--; - } else { /* x > y, x += ulp */ - lx++; - if(lx==0) hx++; - } - } - hy = hx&0x7fff000000000000LL; - if(hy==0x7fff000000000000LL) { - _Float128 u = x + x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy==0) { - _Float128 u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_LDOUBLE_WORDS64(x,hx,lx); - return x; -} -weak_alias (__nextafterl, nextafterl) -strong_alias (__nextafterl, __nexttowardl) -weak_alias (__nextafterl, nexttowardl) diff --git a/sysdeps/ieee754/ldbl-128/s_nexttoward.c b/sysdeps/ieee754/ldbl-128/s_nexttoward.c deleted file mode 100644 index 4343fe83f8..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nexttoward.c +++ /dev/null @@ -1,89 +0,0 @@ -/* s_nexttoward.c - * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support, - * drepper@cygnus.com and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nexttoward(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include - -double __nexttoward(double x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - u_int32_t lx; - u_int64_t ly; - - EXTRACT_WORDS(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) - /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - double u; - INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if (x > y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } else { /* x < 0 */ - if (x < y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } - hy = hx&0x7ff00000; - if(hy>=0x7ff00000) { - double u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00100000) { - double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - INSERT_WORDS(x,hx,lx); - return x; -} -weak_alias (__nexttoward, nexttoward) diff --git a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128/s_nexttowardf.c deleted file mode 100644 index 8703359d4f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c +++ /dev/null @@ -1,76 +0,0 @@ -/* s_nexttowardf.c -- float version of s_nextafter.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com - * and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -#include -#include -#include - -float __nexttowardf(float x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - u_int64_t ly; - - GET_FLOAT_WORD(hx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) - /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) { /* x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(x < y) { /* x < y, x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__nexttowardf, nexttowardf) diff --git a/sysdeps/ieee754/ldbl-128/s_nextupl.c b/sysdeps/ieee754/ldbl-128/s_nextupl.c deleted file mode 100644 index 85f43b4eb0..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nextupl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the least floating-point number greater than X. */ -_Float128 -__nextupl (_Float128 x) -{ - int64_t hx, ix; - u_int64_t lx; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - ix = hx & 0x7fffffffffffffffLL; - - /* x is nan. */ - if (((ix >= 0x7fff000000000000LL) - && ((ix - 0x7fff000000000000LL) | lx) != 0)) - return x + x; - if ((ix | lx) == 0) - return LDBL_TRUE_MIN; - if (hx >= 0) - { /* x > 0. */ - if (isinf (x)) - return x; - lx++; - if (lx == 0) - hx++; - } - else - { /* x < 0. */ - if (lx == 0) - hx--; - lx--; - } - SET_LDOUBLE_WORDS64 (x, hx, lx); - return x; -} - -weak_alias (__nextupl, nextupl) diff --git a/sysdeps/ieee754/ldbl-128/s_remquol.c b/sysdeps/ieee754/ldbl-128/s_remquol.c deleted file mode 100644 index d360f82dba..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_remquol.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -static const _Float128 zero = 0.0; - - -_Float128 -__remquol (_Float128 x, _Float128 y, int *quo) -{ - int64_t hx,hy; - u_int64_t sx,lx,ly,qs; - int cquo; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); - sx = hx & 0x8000000000000000ULL; - qs = sx ^ (hy & 0x8000000000000000ULL); - hy &= 0x7fffffffffffffffLL; - hx &= 0x7fffffffffffffffLL; - - /* Purge off exception values. */ - if ((hy | ly) == 0) - return (x * y) / (x * y); /* y = 0 */ - if ((hx >= 0x7fff000000000000LL) /* x not finite */ - || ((hy >= 0x7fff000000000000LL) /* y is NaN */ - && (((hy - 0x7fff000000000000LL) | ly) != 0))) - return (x * y) / (x * y); - - if (hy <= 0x7ffbffffffffffffLL) - x = __ieee754_fmodl (x, 8 * y); /* now x < 8y */ - - if (((hx - hy) | (lx - ly)) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabsl (x); - y = fabsl (y); - cquo = 0; - - if (hy <= 0x7ffcffffffffffffLL && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= 0x7ffdffffffffffffLL && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < 0x0002000000000000LL) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - _Float128 y_half = L(0.5) * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0) - x = 0; - if (sx) - x = -x; - return x; -} -weak_alias (__remquol, remquol) diff --git a/sysdeps/ieee754/ldbl-128/s_rintl.c b/sysdeps/ieee754/ldbl-128/s_rintl.c deleted file mode 100644 index 410951626b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_rintl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_rintl.c -- long double version of s_rint.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * rintl(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rintl(x). - */ - -#include -#include - -static const _Float128 -TWO112[2]={ - 5.19229685853482762853049632922009600E+33L, /* 0x406F000000000000, 0 */ - -5.19229685853482762853049632922009600E+33L /* 0xC06F000000000000, 0 */ -}; - -_Float128 __rintl(_Float128 x) -{ - int64_t i0,j0,sx; - u_int64_t i1 __attribute__ ((unused)); - _Float128 w,t; - GET_LDOUBLE_WORDS64(i0,i1,x); - sx = (((u_int64_t)i0)>>63); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<112) { - if(j0<0) { - w = TWO112[sx]+x; - t = w-TWO112[sx]; - GET_LDOUBLE_MSW64(i0,t); - SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63)); - return t; - } - } else { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - w = TWO112[sx]+x; - return w-TWO112[sx]; -} -weak_alias (__rintl, rintl) diff --git a/sysdeps/ieee754/ldbl-128/s_roundevenl.c b/sysdeps/ieee754/ldbl-128/s_roundevenl.c deleted file mode 100644 index 93b895546a..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_roundevenl.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 113 -#define MAX_EXP (2 * BIAS + 1) - -_Float128 -roundevenl (_Float128 x) -{ - uint64_t hx, lx, uhx; - GET_LDOUBLE_WORDS64 (hx, lx, x); - uhx = hx & 0x7fffffffffffffffULL; - int exponent = uhx >> (MANT_DIG - 1 - 64); - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS + MANT_DIG - 64) - { - /* Not necessarily an integer; integer bit is in low word. - Locate the bits with exponents 0 and -1. */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint64_t half_bit = 1ULL << half_pos; - uint64_t int_bit = 1ULL << int_pos; - if ((lx & (int_bit | (half_bit - 1))) != 0) - { - /* Carry into the exponent works correctly. No need to test - whether HALF_BIT is set. */ - lx += half_bit; - hx += lx < half_bit; - } - lx &= ~(int_bit - 1); - } - else if (exponent == BIAS + MANT_DIG - 65) - { - /* Not necessarily an integer; integer bit is bottom of high - word, half bit is top of low word. */ - if (((hx & 1) | (lx & 0x7fffffffffffffffULL)) != 0) - { - lx += 0x8000000000000000ULL; - hx += lx < 0x8000000000000000ULL; - } - lx = 0; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer, integer bit and half - bit are in the high word. Locate the bits with exponents 0 - and -1 (when the unbiased exponent is 0, the bit with - exponent 0 is implicit, but as the bias is odd it is OK to - take it from the low bit of the exponent). */ - int int_pos = (BIAS + MANT_DIG - 65) - exponent; - int half_pos = int_pos - 1; - uint64_t half_bit = 1ULL << half_pos; - uint64_t int_bit = 1ULL << int_pos; - if (((hx & (int_bit | (half_bit - 1))) | lx) != 0) - hx += half_bit; - hx &= ~(int_bit - 1); - lx = 0; - } - else if (exponent == BIAS - 1 && (uhx > 0x3ffe000000000000ULL || lx != 0)) - { - /* Interval (0.5, 1). */ - hx = (hx & 0x8000000000000000ULL) | 0x3fff000000000000ULL; - lx = 0; - } - else - { - /* Rounds to 0. */ - hx &= 0x8000000000000000ULL; - lx = 0; - } - SET_LDOUBLE_WORDS64 (x, hx, lx); - return x; -} diff --git a/sysdeps/ieee754/ldbl-128/s_roundl.c b/sysdeps/ieee754/ldbl-128/s_roundl.c deleted file mode 100644 index 078d9b9c45..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_roundl.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Round long double to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -_Float128 -__roundl (_Float128 x) -{ - int32_t j0; - u_int64_t i1, i0; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - if (j0 < 48) - { - if (j0 < 0) - { - i0 &= 0x8000000000000000ULL; - if (j0 == -1) - i0 |= 0x3fff000000000000LL; - i1 = 0; - } - else - { - u_int64_t i = 0x0000ffffffffffffLL >> j0; - if (((i0 & i) | i1) == 0) - /* X is integral. */ - return x; - - i0 += 0x0000800000000000LL >> j0; - i0 &= ~i; - i1 = 0; - } - } - else if (j0 > 111) - { - if (j0 == 0x4000) - /* Inf or NaN. */ - return x + x; - else - return x; - } - else - { - u_int64_t i = -1ULL >> (j0 - 48); - if ((i1 & i) == 0) - /* X is integral. */ - return x; - - u_int64_t j = i1 + (1LL << (111 - j0)); - if (j < i1) - i0 += 1; - i1 = j; - i1 &= ~i; - } - - SET_LDOUBLE_WORDS64 (x, i0, i1); - return x; -} -weak_alias (__roundl, roundl) diff --git a/sysdeps/ieee754/ldbl-128/s_scalblnl.c b/sysdeps/ieee754/ldbl-128/s_scalblnl.c deleted file mode 100644 index 5864eaf93c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_scalblnl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_scalblnl.c -- long double version of s_scalbn.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalblnl (long double x, long int n) - * scalblnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34), /* 0x4071000000000000, 0 */ -twom114 = L(4.8148248609680896326399448564623183E-35), /* 0x3F8D000000000000, 0 */ -huge = L(1.0E+4900), -tiny = L(1.0E-4900); - -_Float128 __scalblnl (_Float128 x, long int n) -{ - int64_t k,hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - k = (hx>>48)&0x7fff; /* extract exponent */ - if (k==0) { /* 0 or subnormal x */ - if ((lx|(hx&0x7fffffffffffffffULL))==0) return x; /* +-0 */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - k = ((hx>>48)&0x7fff) - 114; - } - if (k==0x7fff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/ - if (n> 50000 || k+n > 0x7ffe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) /* normal result */ - {SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;} - if (k <= -114) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 114; /* subnormal result */ - SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); - return x*twom114; -} diff --git a/sysdeps/ieee754/ldbl-128/s_scalbnl.c b/sysdeps/ieee754/ldbl-128/s_scalbnl.c deleted file mode 100644 index e6fe796079..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_scalbnl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_scalbnl.c -- long double version of s_scalbn.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34), /* 0x4071000000000000, 0 */ -twom114 = L(4.8148248609680896326399448564623183E-35), /* 0x3F8D000000000000, 0 */ -huge = L(1.0E+4900), -tiny = L(1.0E-4900); - -_Float128 __scalbnl (_Float128 x, int n) -{ - int64_t k,hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - k = (hx>>48)&0x7fff; /* extract exponent */ - if (k==0) { /* 0 or subnormal x */ - if ((lx|(hx&0x7fffffffffffffffULL))==0) return x; /* +-0 */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - k = ((hx>>48)&0x7fff) - 114; - } - if (k==0x7fff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/ - if (n> 50000 || k+n > 0x7ffe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) /* normal result */ - {SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;} - if (k <= -114) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 114; /* subnormal result */ - SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); - return x*twom114; -} diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadl.c b/sysdeps/ieee754/ldbl-128/s_setpayloadl.c deleted file mode 100644 index 1aba33e6e2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 0 -#define FUNC setpayloadl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c b/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c deleted file mode 100644 index 5646634db2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Set NaN payload. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3fff -#define PAYLOAD_DIG 111 -#define EXPLICIT_MANT_DIG 112 - -int -FUNC (_Float128 *x, _Float128 payload) -{ - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, payload); - int exponent = hx >> (EXPLICIT_MANT_DIG - 64); - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && hx == 0 && lx == 0))) - { - SET_LDOUBLE_WORDS64 (*x, 0, 0); - return 1; - } - int shift = BIAS + EXPLICIT_MANT_DIG - exponent; - if (shift < 64 - ? (lx & ((1ULL << shift) - 1)) != 0 - : (lx != 0 || (hx & ((1ULL << (shift - 64)) - 1)) != 0)) - { - SET_LDOUBLE_WORDS64 (*x, 0, 0); - return 1; - } - if (exponent != 0) - { - hx &= (1ULL << (EXPLICIT_MANT_DIG - 64)) - 1; - hx |= 1ULL << (EXPLICIT_MANT_DIG - 64); - if (shift >= 64) - { - lx = hx >> (shift - 64); - hx = 0; - } - else if (shift != 0) - { - lx = (lx >> shift) | (hx << (64 - shift)); - hx >>= shift; - } - } - hx |= 0x7fff000000000000ULL | (SET_HIGH_BIT ? 0x800000000000ULL : 0); - SET_LDOUBLE_WORDS64 (*x, hx, lx); - return 0; -} diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c b/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c deleted file mode 100644 index d97e2c8206..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsigl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_signbitl.c b/sysdeps/ieee754/ldbl-128/s_signbitl.c deleted file mode 100644 index 062b47f55b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_signbitl.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__signbitl (_Float128 x) -{ - return __builtin_signbitl (x); -} diff --git a/sysdeps/ieee754/ldbl-128/s_sincosl.c b/sysdeps/ieee754/ldbl-128/s_sincosl.c deleted file mode 100644 index 34ca6ee03b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_sincosl.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -void -__sincosl (_Float128 x, _Float128 *sinx, _Float128 *cosx) -{ - int64_t ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64 (ix, x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if (ix <= 0x3ffe921fb54442d1LL) - __kernel_sincosl (x, 0, sinx, cosx, 0); - else if (ix >= 0x7fff000000000000LL) - { - /* sin(Inf or NaN) is NaN */ - *sinx = *cosx = x - x; - if (isinf (x)) - __set_errno (EDOM); - } - else - { - /* Argument reduction needed. */ - _Float128 y[2]; - int n; - - n = __ieee754_rem_pio2l (x, y); - switch (n & 3) - { - case 0: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - break; - case 1: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *cosx = -*cosx; - break; - case 2: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - *sinx = -*sinx; - *cosx = -*cosx; - break; - default: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *sinx = -*sinx; - break; - } - } -} -weak_alias (__sincosl, sincosl) diff --git a/sysdeps/ieee754/ldbl-128/s_sinl.c b/sysdeps/ieee754/ldbl-128/s_sinl.c deleted file mode 100644 index 887e45dbfa..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_sinl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_sinl.c -- long double version of s_sin.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* sinl(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __sinl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) - return __kernel_sinl(x,z,0); - - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_sinl(y[0],y[1],1); - case 1: return __kernel_cosl(y[0],y[1]); - case 2: return -__kernel_sinl(y[0],y[1],1); - default: - return -__kernel_cosl(y[0],y[1]); - } - } -} -weak_alias (__sinl, sinl) diff --git a/sysdeps/ieee754/ldbl-128/s_tanhl.c b/sysdeps/ieee754/ldbl-128/s_tanhl.c deleted file mode 100644 index 0db8f5f775..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_tanhl.c +++ /dev/null @@ -1,100 +0,0 @@ -/* s_tanhl.c -- long double version of s_tanh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double contributed by - Stephen L. Moshier */ - -/* tanhl(x) - * Return the Hyperbolic Tangent of x - * - * Method : - * x -x - * e - e - * 0. tanhl(x) is defined to be ----------- - * x -x - * e + e - * 1. reduce x to non-negative by tanhl(-x) = -tanhl(x). - * 2. 0 <= x <= 2**-57 : tanhl(x) := x*(one+x) - * -t - * 2**-57 < x <= 1 : tanhl(x) := -----; t = expm1l(-2x) - * t + 2 - * 2 - * 1 <= x <= 40.0 : tanhl(x) := 1- ----- ; t=expm1l(2x) - * t + 2 - * 40.0 < x <= INF : tanhl(x) := 1. - * - * Special cases: - * tanhl(NaN) is NaN; - * only tanhl(0)=0 is exact for finite argument. - */ - -#include -#include -#include - -static const _Float128 one = 1.0, two = 2.0, tiny = L(1.0e-4900); - -_Float128 -__tanhl (_Float128 x) -{ - _Float128 t, z; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - /* Words of |x|. */ - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - /* x is INF or NaN */ - if (ix >= 0x7fff0000) - { - /* for NaN it's not important which branch: tanhl(NaN) = NaN */ - if (jx & 0x80000000) - return one / x - one; /* tanhl(-inf)= -1; */ - else - return one / x + one; /* tanhl(+inf)=+1 */ - } - - /* |x| < 40 */ - if (ix < 0x40044000) - { - if (u.value == 0) - return x; /* x == +- 0 */ - if (ix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - return x * (one + tiny); /* tanh(small) = small */ - } - u.parts32.w0 = ix; /* Absolute value of x. */ - if (ix >= 0x3fff0000) - { /* |x| >= 1 */ - t = __expm1l (two * u.value); - z = one - two / (t + two); - } - else - { - t = __expm1l (-two * u.value); - z = -t / (t + two); - } - /* |x| > 40, return +-1 */ - } - else - { - z = one - tiny; /* raised inexact flag */ - } - return (jx & 0x80000000) ? -z : z; -} -weak_alias (__tanhl, tanhl) diff --git a/sysdeps/ieee754/ldbl-128/s_tanl.c b/sysdeps/ieee754/ldbl-128/s_tanl.c deleted file mode 100644 index cd7b258616..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_tanl.c +++ /dev/null @@ -1,80 +0,0 @@ -/* s_tanl.c -- long double version of s_tan.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_tan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* tanl(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tanl ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __tanl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) return __kernel_tanl(x,z,1); - - /* tanl(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; /* NaN */ - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - return __kernel_tanl(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} -weak_alias (__tanl, tanl) diff --git a/sysdeps/ieee754/ldbl-128/s_totalorderl.c b/sysdeps/ieee754/ldbl-128/s_totalorderl.c deleted file mode 100644 index ca7b3102e1..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_totalorderl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Total order operation. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorderl (_Float128 x, _Float128 y) -{ - int64_t hx, hy; - uint64_t lx, ly; - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - uint64_t uhx = hx & 0x7fffffffffffffffULL; - uint64_t uhy = hy & 0x7fffffffffffffffULL; - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the arguments interpreted as - sign-magnitude integers. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((uhx > 0x7fff000000000000ULL || (uhx == 0x7fff000000000000ULL - && lx != 0)) - && (uhy > 0x7fff000000000000ULL || (uhy == 0x7fff000000000000ULL - && ly != 0))) - { - hx ^= 0x0000800000000000ULL; - hy ^= 0x0000800000000000ULL; - } -#endif - uint64_t hx_sign = hx >> 63; - uint64_t hy_sign = hy >> 63; - hx ^= hx_sign >> 1; - lx ^= hx_sign; - hy ^= hy_sign >> 1; - ly ^= hy_sign; - return hx < hy || (hx == hy && lx <= ly); -} diff --git a/sysdeps/ieee754/ldbl-128/s_totalordermagl.c b/sysdeps/ieee754/ldbl-128/s_totalordermagl.c deleted file mode 100644 index 41b969d811..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_totalordermagl.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Total order operation on absolute values. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermagl (_Float128 x, _Float128 y) -{ - uint64_t hx, hy; - uint64_t lx, ly; - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); - hx &= 0x7fffffffffffffffULL; - hy &= 0x7fffffffffffffffULL; -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the absolute values of the - arguments. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((hx > 0x7fff000000000000ULL || (hx == 0x7fff000000000000ULL - && lx != 0)) - && (hy > 0x7fff000000000000ULL || (hy == 0x7fff000000000000ULL - && ly != 0))) - { - hx ^= 0x0000800000000000ULL; - hy ^= 0x0000800000000000ULL; - } -#endif - return hx < hy || (hx == hy && lx <= ly); -} diff --git a/sysdeps/ieee754/ldbl-128/s_truncl.c b/sysdeps/ieee754/ldbl-128/s_truncl.c deleted file mode 100644 index 6d1a11e7c4..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_truncl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -_Float128 -__truncl (_Float128 x) -{ - int32_t j0; - u_int64_t i0, i1, sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - sx = i0 & 0x8000000000000000ULL; - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - if (j0 < 48) - { - if (j0 < 0) - /* The magnitude of the number is < 1 so the result is +-0. */ - SET_LDOUBLE_WORDS64 (x, sx, 0); - else - SET_LDOUBLE_WORDS64 (x, i0 & ~(0x0000ffffffffffffLL >> j0), 0); - } - else if (j0 > 111) - { - if (j0 == 0x4000) - /* x is inf or NaN. */ - return x + x; - } - else - { - SET_LDOUBLE_WORDS64 (x, i0, i1 & ~(0xffffffffffffffffULL >> (j0 - 48))); - } - - return x; -} -weak_alias (__truncl, truncl) diff --git a/sysdeps/ieee754/ldbl-128/s_ufromfpl.c b/sysdeps/ieee754/ldbl-128/s_ufromfpl.c deleted file mode 100644 index c686daa4a7..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ufromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c b/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c deleted file mode 100644 index 906066c83c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h b/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h deleted file mode 100644 index 142393d787..0000000000 --- a/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Convert string for NaN payload to corresponding NaN. For ldbl-128. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FLOAT long double -#define SET_MANTISSA(flt, mant) \ - do \ - { \ - union ieee854_long_double u; \ - u.d = (flt); \ - u.ieee_nan.mantissa0 = 0; \ - u.ieee_nan.mantissa1 = 0; \ - u.ieee_nan.mantissa2 = (mant) >> 32; \ - u.ieee_nan.mantissa3 = (mant); \ - if ((u.ieee.mantissa0 | u.ieee.mantissa1 \ - | u.ieee.mantissa2 | u.ieee.mantissa3) != 0) \ - (flt) = u.d; \ - } \ - while (0) diff --git a/sysdeps/ieee754/ldbl-128/strtold_l.c b/sysdeps/ieee754/ldbl-128/strtold_l.c deleted file mode 100644 index 4a8b14c4bb..0000000000 --- a/sysdeps/ieee754/ldbl-128/strtold_l.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The actual implementation for all floating point sizes is in strtod.c. - These macros tell it to produce the `long double' version, `strtold'. */ - -#define FLOAT long double -#define FLT LDBL -#ifdef USE_WIDE_CHAR -# define STRTOF wcstold_l -# define __STRTOF __wcstold_l -# define STRTOF_NAN __wcstold_nan -#else -# define STRTOF strtold_l -# define __STRTOF __strtold_l -# define STRTOF_NAN __strtold_nan -#endif -#define MPN2FLOAT __mpn_construct_long_double -#define FLOAT_HUGE_VAL HUGE_VALL - -#include diff --git a/sysdeps/ieee754/ldbl-128/t_expl.h b/sysdeps/ieee754/ldbl-128/t_expl.h deleted file mode 100644 index 2b1b647db9..0000000000 --- a/sysdeps/ieee754/ldbl-128/t_expl.h +++ /dev/null @@ -1,970 +0,0 @@ -/* Accurate table for expl(). - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __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 _Float128 __expl_table [] = { - L(-3.47656250000000000584188889839535373E-01), /* bffd640000000000002b1b04213cf000 */ - L(6.90417668990715641167244540876988960E-32), /* 3f97667c3fdb588a6ae1af8748357a17 */ - L(-3.43749999999999981853132895957607418E-01), /* bffd5ffffffffffffac4ff5f4050b000 */ - L(-7.16021898043268093462818380603370350E-33), /* bf94296c8219427edc1431ac2498583e */ - L(-3.39843750000000013418643523138766329E-01), /* bffd5c000000000003de1f027a30e000 */ - L(8.16920774283317801641347327589583265E-32), /* 3f97a82b65774bdca1b4440d749ed8d3 */ - L(-3.35937500000000014998092453039303051E-01), /* bffd5800000000000452a9f4d8857000 */ - L(-6.55865578425428447938248396879359670E-32), /* bf97548b7d240f3d034b395e6eecfac8 */ - L(-3.32031250000000000981984049529998541E-01), /* bffd540000000000004875277cda5000 */ - L(6.91213046334032232108944519541512737E-32), /* 3f9766e5f925338a19045c94443b66e1 */ - L(-3.28124999999999986646017645350399708E-01), /* bffd4ffffffffffffc26a667bf44d000 */ - L(-6.16281060996110316602421505683742661E-32), /* bf973ffdcdcffb6fbffc86b2b8d42f5d */ - L(-3.24218749999999991645717430645867963E-01), /* bffd4bfffffffffffd97901063e48000 */ - L(-7.90797211087760527593856542417304137E-32), /* bf979a9afaaca1ada6a8ed1c80584d60 */ - L(-3.20312499999999998918211610690789652E-01), /* bffd47ffffffffffffb02d9856d71000 */ - L(8.64024799457616856987630373786503376E-32), /* 3f97c0a098623f95579d5d9b2b67342d */ - L(-3.16406249999999998153974811017181883E-01), /* bffd43ffffffffffff77c991f1076000 */ - L(-2.73176610180696076418536105483668404E-32), /* bf961baeccb32f9b1fcbb8e60468e95a */ - L(-3.12500000000000011420976192575972779E-01), /* bffd400000000000034ab8240483d000 */ - L(7.16573502812389453744433792609989420E-32), /* 3f977410f4c2cfc4335f28446c0fb363 */ - L(-3.08593750000000001735496343854851414E-01), /* bffd3c000000000000800e995c176000 */ - L(-1.56292999645122272621237565671593071E-32), /* bf95449b9cbdaff6ac1246adb2c826ac */ - L(-3.04687499999999982592401295899221626E-01), /* bffd37fffffffffffafb8bc1e061a000 */ - L(6.48993208584888904958594509625158417E-32), /* 3f9750f9fe8366d82d77afa0031a92e1 */ - L(-3.00781249999999999230616898937763959E-01), /* bffd33ffffffffffffc73ac39da54000 */ - L(6.57082437496961397305801409357792029E-32), /* 3f97552d3cb598ea80135cf3feb27ec4 */ - L(-2.96874999999999998788769281703245722E-01), /* bffd2fffffffffffffa6a07fa5021000 */ - L(-3.26588297198283968096426564544269170E-32), /* bf9653260fc1802f46b629aee171809b */ - L(-2.92968750000000015318089182805941695E-01), /* bffd2c0000000000046a468614bd6000 */ - L(-1.73291974845198589684358727559290718E-32), /* bf9567e9d158f52e483c8d8dcb5961dd */ - L(-2.89062500000000007736778942676309681E-01), /* bffd280000000000023adf9f4c3d3000 */ - L(-6.83629745986675744404029225571026236E-32), /* bf9762f5face6281c1daf1c6aedbdb45 */ - L(-2.85156250000000001367091555763661937E-01), /* bffd2400000000000064dfa11e3fb000 */ - L(-5.44898442619766878281110054067026237E-32), /* bf971aed6d2db9f542986a785edae072 */ - L(-2.81249999999999986958718100227029406E-01), /* bffd1ffffffffffffc3db9265ca9d000 */ - L(1.13007318374506125723591889451107046E-32), /* 3f94d569fe387f456a97902907ac3856 */ - L(-2.77343750000000000356078829380495179E-01), /* bffd1c0000000000001a462390083000 */ - L(-4.98979365468978332358409063436543102E-32), /* bf970315bbf3e0d14b5c94c900702d4c */ - L(-2.73437499999999990276993957508540484E-01), /* bffd17fffffffffffd32919bcdc94000 */ - L(-8.79390484115892344533724650295100871E-32), /* bf97c89b0b89cc19c3ab2b60da9bbbc3 */ - L(-2.69531250000000002434203866460082225E-01), /* bffd14000000000000b39ccf9e130000 */ - L(9.44060754687026590886751809927191596E-32), /* 3f97ea2f32cfecca5c64a26137a9210f */ - L(-2.65624999999999997296320716986257179E-01), /* bffd0fffffffffffff3880f13a2bc000 */ - L(2.07142664067265697791007875348396921E-32), /* 3f95ae37ee685b9122fbe377bd205ee4 */ - L(-2.61718750000000010237478733739017956E-01), /* bffd0c000000000002f3648179d40000 */ - L(-6.10552936159265665298996309192680256E-32), /* bf973d0467d31e407515a3cca0f3b4e2 */ - L(-2.57812500000000011948220522778370303E-01), /* bffd08000000000003719f81275bd000 */ - L(6.72477169058908902499239631466443836E-32), /* 3f975d2b8c475d3160cf72d227d8e6f9 */ - L(-2.53906249999999991822993360536596860E-01), /* bffd03fffffffffffda4a4b62f818000 */ - L(-2.44868296623215865054704392917190994E-32), /* bf95fc92516c6d057d29fc2528855976 */ - L(-2.49999999999999986862019457428548084E-01), /* bffcfffffffffffff86d2d20d5ff4000 */ - L(-3.85302898949105073614122724961613078E-32), /* bf96901f147cb7d643af71b6129ce929 */ - L(-2.46093750000000000237554160737318435E-01), /* bffcf8000000000000230e8ade26b000 */ - L(-1.52823675242678363494345369284988589E-32), /* bf953d6700c5f3fc303f79d0ec8c680a */ - L(-2.42187500000000003023380963205457065E-01), /* bffcf0000000000001be2c1a78bb0000 */ - L(-7.78402037952209709489481182714311699E-34), /* bf9102ab1f3998e887f0ee4cf940faa5 */ - L(-2.38281249999999995309623303145485725E-01), /* bffce7fffffffffffd4bd2940f43f000 */ - L(-3.54307216794236899443913216397197696E-32), /* bf966fef03ab69c3f289436205b21d02 */ - L(-2.34374999999999998425804947623207526E-01), /* bffcdfffffffffffff17b097a6092000 */ - L(-2.86038428948386602859761879407549696E-32), /* bf96290a0eba0131efe3a05fe188f2e3 */ - L(-2.30468749999999993822207406785200832E-01), /* bffcd7fffffffffffc70519834eae000 */ - L(-2.54339521031747516806893838749365762E-32), /* bf96081f0ad7f9107ae6cddb32c178ab */ - L(-2.26562499999999997823524030344489884E-01), /* bffccffffffffffffebecf10093df000 */ - L(4.31904611473158635644635628922959401E-32), /* 3f96c083f0b1faa7c4c686193e38d67c */ - L(-2.22656250000000004835132405125162742E-01), /* bffcc8000000000002c98a233f19f000 */ - L(2.54709791629335691650310168420597566E-33), /* 3f92a735903f5eed07a716ab931e20d9 */ - L(-2.18749999999999988969454021829236626E-01), /* bffcbffffffffffff9a42dc14ce36000 */ - L(-3.77236096429336082213752014054909454E-32), /* bf9687be8e5b2fca54d3e81157eac660 */ - L(-2.14843750000000010613256919115758495E-01), /* bffcb80000000000061e3d828ecac000 */ - L(-4.55194148712216691177097854305964738E-32), /* bf96d8b35c776aa3e1a4768271380503 */ - L(-2.10937499999999993204656148110447201E-01), /* bffcaffffffffffffc152f2aea118000 */ - L(-2.95044199165561453749332254271716417E-32), /* bf96326433b00b2439094d9bef22ddd1 */ - L(-2.07031250000000012233944895423355677E-01), /* bffca80000000000070d695ee0e94000 */ - L(1.93146788688385419095981415411012357E-32), /* 3f959126729135a5e390d4bb802a0bde */ - L(-2.03125000000000008030983633336321863E-01), /* bffca0000000000004a129fbc51af000 */ - L(2.37361904671826193563212931215900137E-32), /* 3f95ecfb3c4ba1b97ea3ad45cbb1e68a */ - L(-1.99218750000000001763815712796132779E-01), /* bffc98000000000001044b12d9950000 */ - L(-3.63171243370923753295192486732883239E-33), /* bf932db5fb3f27c38e0fa7bbcfc64f55 */ - L(-1.95312500000000004883660234506677272E-01), /* bffc90000000000002d0b3779d1f9000 */ - L(-3.19989507343607877747980892249711601E-33), /* bf9309d63de96bb3ef744c865f22f1bd */ - L(-1.91406250000000013720152363227519348E-01), /* bffc88000000000007e8bcb387121000 */ - L(-1.89295754093147174148371614722178860E-32), /* bf958926e2e67dfe812c508290add2e7 */ - L(-1.87500000000000000182342082774432620E-01), /* bffc800000000000001ae8b06a39f000 */ - L(-2.96812835183184815200854214892983927E-32), /* bf96343a62d156bbe71f55d14ca4b6e5 */ - L(-1.83593750000000012410147185883290345E-01), /* bffc78000000000007276a1adda8d000 */ - L(-2.02191931237489669058466239995304587E-32), /* bf95a3efab92d26ec2df90df036a117f */ - L(-1.79687499999999997439177363346082917E-01), /* bffc6ffffffffffffe8616db2927d000 */ - L(-9.92752326937775530007399526834009465E-33), /* bf949c5f88ed17041e1a3f1829d543cd */ - L(-1.75781249999999995824373974504785174E-01), /* bffc67fffffffffffd97c94f13ea3000 */ - L(1.44184772065335613487885714828816178E-32), /* 3f952b75c63476e7fcc2f5841c27bcce */ - L(-1.71874999999999986685050259043077809E-01), /* bffc5ffffffffffff8530f6bc531a000 */ - L(-3.49007014971241147689894940544402482E-32), /* bf966a6dfaa012aea8ffe6d90b02330f */ - L(-1.67968749999999997316058782350439701E-01), /* bffc57fffffffffffe73eb914f2aa000 */ - L(3.34025733574205019081305778794376391E-32), /* 3f965adf4572561fd5456a6c13d8babf */ - L(-1.64062499999999993322730602128318480E-01), /* bffc4ffffffffffffc269be4f68f3000 */ - L(-1.83345916769684984022099095506340635E-32), /* bf957ccb69026cb2f6024c211576d5f4 */ - L(-1.60156249999999992419000744447607979E-01), /* bffc47fffffffffffba13df21784a000 */ - L(2.73442789798110494773517431626534726E-32), /* 3f961bf58ff22c9b30f1e2b39f26d7d5 */ - L(-1.56249999999999987665010524130393080E-01), /* bffc3ffffffffffff8e3ad45e7508000 */ - L(2.02695576464836145806428118889332191E-32), /* 3f95a4fb7435a4a2f71de81eb8ae75d1 */ - L(-1.52343749999999989905291167951491803E-01), /* bffc37fffffffffffa2e48aecfc24000 */ - L(-3.61436631548815190395331054871041524E-32), /* bf967756567ebd108075ae527cc2e7f0 */ - L(-1.48437500000000006686107754967759751E-01), /* bffc30000000000003dab20261b3c000 */ - L(-2.15524270159131591469319477922198390E-32), /* bf95bfa05b82ef3a708c4f0395e9fcf6 */ - L(-1.44531250000000005132889939177166485E-01), /* bffc28000000000002f57b1969e7b000 */ - L(2.74741116529653547935086189244019604E-32), /* 3f961d4eb77c1185d34fe1b04a3f3cf5 */ - L(-1.40625000000000000707469094533647325E-01), /* bffc2000000000000068676d3d5c4000 */ - L(4.40607097220049957013547629906723266E-33), /* 3f936e0ac425daf795b42913cf0ef881 */ - L(-1.36718749999999995713752139187543306E-01), /* bffc17fffffffffffd87762255991000 */ - L(-3.73751317180116492404578048203389108E-32), /* bf9684202491e9cbb7ceb67d9ff7e0c9 */ - L(-1.32812500000000007198453630478482191E-01), /* bffc10000000000004264de3a4379000 */ - L(-3.97050085179660203884930593717220728E-32), /* bf969c52048de14be3c9c1971e50869c */ - L(-1.28906250000000006070486371645733082E-01), /* bffc080000000000037fd87db2cb0000 */ - L(3.59610068058504988294019521946586131E-32), /* 3f967570c10687cb8e9ebd0b280abf5a */ - L(-1.25000000000000003700729208608337966E-01), /* bffc00000000000002222198bbc74000 */ - L(3.23464851393124362331846965931995969E-33), /* 3f930cb95da3bfc847e593716c91d57a */ - L(-1.21093750000000013729038501177102555E-01), /* bffbf000000000000fd418d1f5fda000 */ - L(2.45242487730722066611358741283977619E-32), /* 3f95fd5945ad86a464292e26ac192a84 */ - L(-1.17187499999999999765305306880205578E-01), /* bffbdfffffffffffffbabaf869845000 */ - L(-1.14557520298960389903199646350205537E-32), /* bf94dbda735322179d9bcf392e1dd06d */ - L(-1.13281250000000009579647893740755690E-01), /* bffbd000000000000b0b69bae7ab9000 */ - L(2.37873962873837390105423621772752350E-32), /* 3f95ee0b7e0bd5ac1f6fab1e2a71abc3 */ - L(-1.09375000000000008981153004560108539E-01), /* bffbc000000000000a5ac4bc1d2c3000 */ - L(1.53152444860014076105003555837231015E-32), /* 3f953e15ce931e12ef9a152522e32bdd */ - L(-1.05468749999999992399063850363228723E-01), /* bffbaffffffffffff73c998091408000 */ - L(-8.75920903597804862471749360196688834E-33), /* bf946bd7e310a01bae5687ebdc47fcc5 */ - L(-1.01562500000000007685885179918350550E-01), /* bffba0000000000008dc7910a648c000 */ - L(-4.63820993797174451904075397785059501E-33), /* bf938153d0e54001a472da180fb5e8aa */ - L(-9.76562499999999887262211517861331814E-02), /* bffb8ffffffffffff300915aa6fd6000 */ - L(-2.63767025974952608658936466715705903E-33), /* bf92b64215bb8d520be5404620d38088 */ - L(-9.37499999999999939650246024457439795E-02), /* bffb7ffffffffffff90aca26bd0fc000 */ - L(-1.72047822349322956713582039121348377E-32), /* bf9565545015c5b9b56d02cfefca2c7d */ - L(-8.98437500000000033088896383977486369E-02), /* bffb70000000000003d09ca1e3cbe000 */ - L(3.04831994420989436248526129869697270E-33), /* 3f92fa7d30d2ed90e7ebbd6231fd08b1 */ - L(-8.59374999999999947312400115121319225E-02), /* bffb5ffffffffffff9ecefc03376e000 */ - L(1.50416954438393392150792422537312281E-32), /* 3f9538675ee99bd722fad0023c09c915 */ - L(-8.20312500000000054182280847004695514E-02), /* bffb500000000000063f2dbd40200000 */ - L(2.68399664523430004488075638997207289E-33), /* 3f92bdf49766629882c49a3da88928ed */ - L(-7.81250000000000114767533968079748798E-02), /* bffb4000000000000d3b56f81ba70000 */ - L(1.72318124201659121296305402819694281E-32), /* 3f9565e407aaabfb359e8a567d760de3 */ - L(-7.42187500000000035531829472486812869E-02), /* bffb3000000000000418b6e9b5388000 */ - L(2.09401756478514117051383998628099655E-32), /* 3f95b2e91221fcd74be0a86d8ad658d2 */ - L(-7.03124999999999987474933134860732535E-02), /* bffb1ffffffffffffe8e53453d2ac000 */ - L(2.28515798224350800271565551341211666E-32), /* 3f95da9bd6adf00894f05b5cc5530125 */ - L(-6.64062500000000042267533361089054159E-02), /* bffb10000000000004df8473dbcf2000 */ - L(1.97576478800281368377376002585430031E-32), /* 3f959a59acbddb2f53bd3096b66370e9 */ - L(-6.25000000000000066329769382774201686E-02), /* bffb00000000000007a5b5914e336000 */ - L(-1.46422615813786836245343723048221678E-33), /* bf91e69295f069fc0c4a9db181ea25a3 */ - L(-5.85937500000000002823707957982406053E-02), /* bffae0000000000000a6aeab10592000 */ - L(9.25637741701318872896718218457555829E-33), /* 3f94807eb021f1f40a37d4015b1eb76b */ - L(-5.46875000000000081586888005226044448E-02), /* bffac0000000000012d00a3171e3a000 */ - L(-4.87144542459404765480424673678105050E-33), /* bf9394b42faba6b7036fe7b36269daf3 */ - L(-5.07812499999999927720348253140567013E-02), /* bffa9fffffffffffef555cc8dd914000 */ - L(-3.01901021987395945826043649523451725E-33), /* bf92f59e7e3025691f290f8f67277faf */ - L(-4.68749999999999935349476738962633103E-02), /* bffa7ffffffffffff117b4ea2b876000 */ - L(1.21521638219189777347767475937119750E-32), /* 3f94f8c7f88c5b56674b94d984ac8ecb */ - L(-4.29687500000000056305562847814228219E-02), /* bffa6000000000000cfbb19be30c0000 */ - L(-1.18643699217679276275559592978275214E-32), /* bf94ecd39f0833a876550e83eb012b99 */ - L(-3.90624999999999962692914526031373542E-02), /* bffa3ffffffffffff765c743922f9000 */ - L(-4.91277156857520035712509544689973679E-33), /* bf939823189996193872e58ac0dececb */ - L(-3.51562500000000108152468207687602886E-02), /* bffa20000000000018f031e41177f000 */ - L(1.18599806302656253755207072755609820E-32), /* 3f94eca4f23e787fab73ce8f6b9b8d64 */ - L(-3.12500000000000077376981036742289578E-02), /* bffa00000000000011d787e0b386f000 */ - L(9.97730386477005171963635210799577079E-33), /* 3f949e70e498c46a0173ac0d46c699fc */ - L(-2.73437500000000139436129596418623235E-02), /* bff9c00000000000404db66e70a08000 */ - L(2.25755321633070123579875157841633859E-33), /* 3f927719b1a93074bdf9f3c2cb784785 */ - L(-2.34375000000000088003629211828324876E-02), /* bff98000000000002895a27d45feb000 */ - L(2.84374279216848803102126617873942975E-33), /* 3f92d87f70e749d6da6c260b68dc210b */ - L(-1.95312500000000107408831063404855424E-02), /* bff9400000000000318898ba69f71000 */ - L(2.47348089686935458989103979140011912E-33), /* 3f929afa3de45086fe909fdddb41edce */ - L(-1.56250000000000081443917555362290635E-02), /* bff9000000000000258f335e9cdd6000 */ - L(-2.43379314483517422161458863218426254E-33), /* bf9294621c8a9ccacf2b020ec19cad27 */ - L(-1.17187500000000051490597418161403184E-02), /* bff88000000000002f7ddfa26221f000 */ - L(1.83405297208145390679150568810924707E-33), /* 3f9230bbfc5d5fe1b534fbcda0465bb9 */ - L(-7.81249999999999715861805208310174953E-03), /* bff7ffffffffffffcb95f3fff157d000 */ - L(3.51548384878710915171654413641872451E-34), /* 3f8fd349b76c22966f77a39fc37ed704 */ - L(-3.90625000000000309326013918295097128E-03), /* bff7000000000000390f820c8e153000 */ - L(6.38058004651791109324060099097251911E-36), /* 3f8a0f665d3ac25a1ac94d688273dbcd */ -#define T_EXPL_ARG1 (2*89) - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(3.90625000000000245479958859972588985E-03), /* 3ff70000000000002d48769ac9874000 */ - L(-6.58439598384342854976169982902779828E-36), /* bf8a1811b923e6c626b07ef29761482a */ - L(7.81250000000001311374391093664996358E-03), /* 3ff800000000000078f3f3cd89111000 */ - L(2.60265650555493781464273319671555602E-33), /* 3f92b070c3b635b87af426735a71fc87 */ - L(1.17187500000000269581156218247101912E-02), /* 3ff8800000000000f8a50d02fe20d000 */ - L(1.00961747974945520631836275894919326E-33), /* 3f914f80c1a4f8042044fe3b757b030b */ - L(1.56249999999999797878275270751825475E-02), /* 3ff8ffffffffffff45935b69da62e000 */ - L(2.03174577741375590087897353146748580E-33), /* 3f925194e863496e0f6e91cbf6b22e26 */ - L(1.95312499999999760319884511789111533E-02), /* 3ff93fffffffffff917790ff9a8f4000 */ - L(4.62788519658803722282100289809515007E-33), /* 3f9380783ba81295feeb3e4879d7d52d */ - L(2.34374999999999822953909016349145918E-02), /* 3ff97fffffffffffae5a163bd3cd5000 */ - L(-3.19499956304699705390404384504876533E-33), /* bf93096e2037ced8194cf344c692f8d6 */ - L(2.73437500000000137220327275871555682E-02), /* 3ff9c000000000003f481dea5dd51000 */ - L(-2.25757776523031994464630107442723424E-33), /* bf92771abcf988a02b414bf2614e3734 */ - L(3.12499999999999790857640618332718621E-02), /* 3ff9ffffffffffff9f8cd40b51509000 */ - L(-4.22479470489989916319395454536511458E-33), /* bf935efb7245612f371deca17cb7b30c */ - L(3.51562499999999840753382405747597346E-02), /* 3ffa1fffffffffffdb47bd275f722000 */ - L(1.08459658374118041980976756063083500E-34), /* 3f8e2055d18b7117c9db1c318b1e889b */ - L(3.90624999999999989384433621470426757E-02), /* 3ffa3ffffffffffffd8d5e18b042e000 */ - L(-7.41674226146122000759491297811091830E-33), /* bf94341454e48029e5b0205d91baffdc */ - L(4.29687500000000107505739500500200462E-02), /* 3ffa60000000000018ca04cd9085c000 */ - L(-4.74689012756713017494437969420919847E-34), /* bf903b7c268103c6f7fbaaa24142e287 */ - L(4.68749999999999978700749928325717352E-02), /* 3ffa7ffffffffffffb16b6d5479e3000 */ - L(-1.06208165308448830117773486334902917E-32), /* bf94b92be4b3b5b5a596a0a5187cc955 */ - L(5.07812499999999815072625435955786253E-02), /* 3ffa9fffffffffffd55bd086d5cbc000 */ - L(-9.37038897148383660401929567549111394E-33), /* bf94853b111b0175b491c80d00419416 */ - L(5.46874999999999809511553152189867394E-02), /* 3ffabfffffffffffd4138bfa74a61000 */ - L(1.06642963074562437340498606682822123E-32), /* 3f94bafa3fe991b39255d563dfa05d89 */ - L(5.85937500000000184331996330905145551E-02), /* 3ffae000000000002a810a5f2f8bf000 */ - L(-1.76639977694797200820296641773791945E-34), /* bf8ed596f07ce4408f1705c8ec16864c */ - L(6.25000000000000021544696744852045001E-02), /* 3ffb000000000000027be32045e2b000 */ - L(1.68616371995798354366633034788947149E-32), /* 3f955e33d7440794d8a1b25233d086ab */ - L(6.64062499999999965563110718495802889E-02), /* 3ffb0ffffffffffffc079a38a3fed000 */ - L(-1.82463217667830160048872113565316215E-32), /* bf957af6163bcdb97cefab44a942482a */ - L(7.03124999999999759989183341261898222E-02), /* 3ffb1fffffffffffe454218acea05000 */ - L(-1.07843770101525495515646940862541503E-32), /* bf94bff72aada26d94e76e71c07e0580 */ - L(7.42187499999999898968873730710101412E-02), /* 3ffb2ffffffffffff45a166496dc1000 */ - L(1.28629441689592874462780757154138223E-32), /* 3f950b2724597b8b93ce1e9d1cf4d035 */ - L(7.81249999999999957198938523510804668E-02), /* 3ffb3ffffffffffffb10bc52adbc5000 */ - L(1.13297573459968118467100063135856856E-33), /* 3f91787eea895b3c245899cf34ad0abd */ - L(8.20312500000000199911640621145851159E-02), /* 3ffb500000000000170c59a661a89000 */ - L(-1.51161335208135146756554123073528707E-32), /* bf9539f326c5ca84e7db5401566f3775 */ - L(8.59375000000000134175373433347670743E-02), /* 3ffb6000000000000f78287547af0000 */ - L(1.09763629458404270323909815379924900E-32), /* 3f94c7f0b61b6e3e27d44b9f5bbc7e9d */ - L(8.98437500000000036533922600308306335E-02), /* 3ffb70000000000004364a83b7a14000 */ - L(3.11459653680110433194288029777718358E-33), /* 3f9302c0248136d65cebeab69488d949 */ - L(9.37500000000000184977946245216914691E-02), /* 3ffb800000000000155395d870b17000 */ - L(-4.66656154468277949130395786965043927E-33), /* bf9383aec9b993b6db492b1ede786d8a */ - L(9.76562500000000237839723100419376084E-02), /* 3ffb9000000000001b6bca237f6c4000 */ - L(-1.03028043424658760249140747856831301E-32), /* bf94abf6352e3d2bb398e47919a343fb */ - L(1.01562500000000012345545575236836572E-01), /* 3ffba000000000000e3bc30cd9a1f000 */ - L(2.15755372310795701322789783729456319E-32), /* 3f95c01b3b819edd9d07548fafd61550 */ - L(1.05468749999999976493840484471911438E-01), /* 3ffbafffffffffffe4e634cd77985000 */ - L(1.78771847038773333029677216592309083E-32), /* 3f95734b6ae650f33dd43c49a1df9fc0 */ - L(1.09375000000000002267015055992785402E-01), /* 3ffbc00000000000029d1ad08de7b000 */ - L(6.23263106693943817730045115112427717E-33), /* 3f9402e4b39ce2198a45e1d045868cd6 */ - L(1.13281250000000022354208618429577398E-01), /* 3ffbd0000000000019c5cc3f9d2b5000 */ - L(5.40514416644786448581426756221178868E-33), /* 3f93c10ab4021472c662f69435de9269 */ - L(1.17187500000000013252367133076817603E-01), /* 3ffbe000000000000f47688cc561b000 */ - L(-7.12412585457324989451327215568641325E-33), /* bf9427ecb343a8d1758990565fcfbf45 */ - L(1.21093750000000020759863992944300792E-01), /* 3ffbf0000000000017ef3af97bf04000 */ - L(6.26591408357572503875647872077266444E-33), /* 3f940446a09a2da771b45fc075514d12 */ - L(1.25000000000000004739659392396765618E-01), /* 3ffc00000000000002bb7344ecd89000 */ - L(-1.55611398459729463981000080101758830E-32), /* bf95433135febefa9e6aa4db39e263d2 */ - L(1.28906249999999982360888081057894783E-01), /* 3ffc07fffffffffff5d4ed3154361000 */ - L(-1.77531518652835570781208599686606474E-32), /* bf9570b7f225ea076f97f418d11359c1 */ - L(1.32812500000000010568583998727400436E-01), /* 3ffc1000000000000617a5d09526a000 */ - L(2.12104021624990594668286391598300893E-32), /* 3f95b885d767a1048d93055927a27adc */ - L(1.36718749999999998434125157367005292E-01), /* 3ffc17ffffffffffff18eaebc7970000 */ - L(2.50454798592543203967309921276955297E-32), /* 3f9604164e5598528a76faff26cd1c97 */ - L(1.40625000000000015550032422969330356E-01), /* 3ffc20000000000008f6c79d8928c000 */ - L(7.80972982879849783680252962992639832E-33), /* 3f9444674acf2b3225c7647e0d95edf3 */ - L(1.44531250000000012402535562111122522E-01), /* 3ffc28000000000007264a8bc1ff1000 */ - L(2.79662468716455159585514763921671876E-32), /* 3f96226b095bd78aa650faf95a221993 */ - L(1.48437500000000007761020440087419948E-01), /* 3ffc3000000000000479530ff8fe3000 */ - L(2.15518492972728435680556239996258527E-32), /* 3f95bf9d49295e73a957906a029768cb */ - L(1.52343750000000001733189947520484032E-01), /* 3ffc38000000000000ffc6109f71f000 */ - L(8.34032236093545825619420380704500188E-33), /* 3f945a71851226a1d0ce5e656693153e */ - L(1.56249999999999988073295321246958484E-01), /* 3ffc3ffffffffffff91fedd62ae0f000 */ - L(2.44119337150624789345260194989620908E-32), /* 3f95fb041a57bc1c1280680ac1620bea */ - L(1.60156250000000002076894210913572460E-01), /* 3ffc48000000000001327ed84a199000 */ - L(-7.36124501128859978061216696286151753E-33), /* bf9431c62f01e59d2c1e00f195a0037f */ - L(1.64062500000000000950861276373482172E-01), /* 3ffc500000000000008c5285fba85000 */ - L(-4.80566184447001164583855800470217373E-33), /* bf938f3d1fcafd390f22f80e6c19421f */ - L(1.67968749999999989878071706155265999E-01), /* 3ffc57fffffffffffa2a445c548c5000 */ - L(-4.42154428718618459799673088733365064E-32), /* bf96cb28cf1c1b28006d53ffe633b22a */ - L(1.71874999999999999459734108403218175E-01), /* 3ffc5fffffffffffffb04554e9dd4000 */ - L(-3.29736288190321377985697972236270628E-32), /* bf96566af0ebc852e84be12859b24a31 */ - L(1.75781249999999997987525759778901845E-01), /* 3ffc67fffffffffffed702df6ffff000 */ - L(-1.28800728638468399687523924685844352E-32), /* bf950b8236b88ca0c1b739dc91a7e3fc */ - L(1.79687500000000004929565820437175783E-01), /* 3ffc70000000000002d779bb32d2e000 */ - L(1.60624461317978482424582320675174225E-32), /* 3f954d9a9cc0c963fd081f3dc922d04e */ - L(1.83593750000000016873727045739708856E-01), /* 3ffc78000000000009ba1f6263c9a000 */ - L(-3.83390389582056606880506003118452558E-32), /* bf968e22a5d826f77f19ee788474df22 */ - L(1.87500000000000013443068740761666872E-01), /* 3ffc80000000000007bfd8c72a1bf000 */ - L(-2.74141662712926256150154726565203091E-32), /* bf961caf5ac59c7f941f928e324c2cc1 */ - L(1.91406249999999981494101786848611970E-01), /* 3ffc87fffffffffff55502eeae001000 */ - L(3.68992437075565165346469517256118001E-32), /* 3f967f2f03f9096793372a27b92ad79d */ - L(1.95312499999999989069921848800501648E-01), /* 3ffc8ffffffffffff9b3015280394000 */ - L(3.69712249337856518452988332367785220E-32), /* 3f967fee5fdb5bd501ff93516999faa0 */ - L(1.99218750000000021148042946919300804E-01), /* 3ffc9800000000000c30e67939095000 */ - L(2.50142536781142175091322844848566649E-32), /* 3f9603c34ae58e10b300b07137ee618a */ - L(2.03124999999999977732559198825437141E-01), /* 3ffc9ffffffffffff329e7df079e4000 */ - L(-2.41951877287895024779300892731537816E-32), /* bf95f683aefe6965f080df8f59dd34a1 */ - L(2.07031249999999996744030653771913124E-01), /* 3ffca7fffffffffffe1f80f4b73ca000 */ - L(-1.94346475904454000031592792989765585E-32), /* bf9593a44f87870a3d100d498501ecc7 */ - L(2.10937500000000000251399259834392298E-01), /* 3ffcb000000000000025199873310000 */ - L(-1.33528748788094249098998693871759411E-33), /* bf91bbb9b25c813668d6103d08acac35 */ - L(2.14843749999999993936323609611875097E-01), /* 3ffcb7fffffffffffc8128c866236000 */ - L(1.14839877977014974625242788556545292E-32), /* 3f94dd06b4655c9b83a1305b240e7a42 */ - L(2.18750000000000015181732784749663837E-01), /* 3ffcc0000000000008c06da5fff24000 */ - L(1.42689085313142539755499441881408391E-32), /* 3f95285a87dfa7ea7dad5b3be8c669f4 */ - L(2.22656249999999992172647770539596569E-01), /* 3ffcc7fffffffffffb7ce2fe531f6000 */ - L(-3.34421462850496887359128610229650547E-32), /* bf965b487962b5c2d9056ca6ac0c2e5c */ - L(2.26562499999999989595607223847082419E-01), /* 3ffccffffffffffffa0095277be5c000 */ - L(-3.08983588107248752517344356508205569E-32), /* bf9640dded57157f8eded311213bdbcd */ - L(2.30468749999999979130462438434567117E-01), /* 3ffcd7fffffffffff3f8332996560000 */ - L(-3.01407539802851697849105682795217019E-32), /* bf9638ffde35dbdfe1a1ffe45185de5d */ - L(2.34375000000000012194252337217891971E-01), /* 3ffce0000000000007078dd402c86000 */ - L(-8.46879710915628592284714319904522657E-33), /* bf945fc7b29a2ac6c9eff9eb258a510f */ - L(2.38281249999999982991877076137149870E-01), /* 3ffce7fffffffffff6320b486eece000 */ - L(-2.93563878880439245627127095245798544E-32), /* bf9630daaa4f40ff05caf29ace2ea7d4 */ - L(2.42187499999999981447559841442773990E-01), /* 3ffceffffffffffff54e24a09a8d5000 */ - L(-4.56766746558806021264215486909850481E-32), /* bf96da556dee11f3113e5a3467b908e6 */ - L(2.46093749999999991067720539980207318E-01), /* 3ffcf7fffffffffffad9d405dcb5d000 */ - L(2.14033004219908074003010247652128251E-32), /* 3f95bc8776e8f9ae098884aa664cc3df */ - L(2.50000000000000016613825838126835953E-01), /* 3ffd00000000000004c9e24c12bb3000 */ - L(2.57617532593749185996714235009382870E-32), /* 3f960b867cc01178c0ec68226c6cb47d */ - L(2.53906250000000013372004437827044321E-01), /* 3ffd04000000000003daae05b3168000 */ - L(7.20177123439204414298152646284640101E-32), /* 3f9775eff59ddad7e7530b83934af87f */ - L(2.57812499999999995765234725413886085E-01), /* 3ffd07fffffffffffec7878bad9d5000 */ - L(6.51253187532920882777046064603770602E-32), /* 3f975226659ca241402e71c2011583b0 */ - L(2.61718750000000007647689994011222248E-01), /* 3ffd0c000000000002344cc793a0f000 */ - L(3.02370610028725823590045201871491395E-32), /* 3f9639ffe55fa2fa011674448b4e5b96 */ - L(2.65624999999999986893899042596554269E-01), /* 3ffd0ffffffffffffc38f0c0a1e9f000 */ - L(-2.07683715950724761146070082510569258E-32), /* bf95af579a92e872fef81abfdf06bae8 */ - L(2.69531249999999979842788204900639327E-01), /* 3ffd13fffffffffffa30a908d67db000 */ - L(8.71465252506557329027658736641075706E-32), /* 3f97c47d99e19830447a42b1c0ffac61 */ - L(2.73437500000000006712165837793818271E-01), /* 3ffd18000000000001ef453a58edb000 */ - L(-6.62704045767568912140550474455810301E-32), /* bf9758187a204dcb06ece46588aeeaba */ - L(2.77343749999999994411329302988535617E-01), /* 3ffd1bfffffffffffe63a0fec9c9e000 */ - L(-4.87273466291944117406493607771338767E-32), /* bf96fa0381b0844a0be46bac2d673f0c */ - L(2.81250000000000012677892447379453135E-01), /* 3ffd20000000000003a7769e125d6000 */ - L(-8.55871796664700790726282049552906783E-32), /* bf97bc64e01332cf7616b0091b8dff2c */ - L(2.85156249999999998558643013736363981E-01), /* 3ffd23ffffffffffff95a5894bccf000 */ - L(-1.33068334720606220176455289635046875E-32), /* bf95145f43290ecf5b7adcb24697bc73 */ - L(2.89062500000000008831431235621753924E-01), /* 3ffd280000000000028ba504fac59000 */ - L(-9.34157398616814623985483776710704237E-32), /* bf97e50ad1115b941fcb5f0c88a428f7 */ - L(2.92968750000000019840235286110877063E-01), /* 3ffd2c000000000005b7f372d184f000 */ - L(4.99302093775173155906059132992249671E-33), /* 3f939ecdcfb97bad3f8dbec5df5ec67d */ - L(2.96875000000000015867911730971630513E-01), /* 3ffd3000000000000492d860c79db000 */ - L(7.86107787827057767235127454590866211E-33), /* 3f944689517ee8f16cdb97d6a6938f32 */ - L(3.00781250000000015814100002286124758E-01), /* 3ffd340000000000048edfe73a17d000 */ - L(-1.65419431293024229981937172317171504E-32), /* bf9557900e3efca16c89646b57f68dc0 */ - L(3.04687499999999985213157159965287195E-01), /* 3ffd37fffffffffffbbcec6f99b36000 */ - L(9.68753602893894024018934325652944198E-32), /* 3f97f70170e5458660c33a7e8d43d049 */ - L(3.08593749999999989969324338045156215E-01), /* 3ffd3bfffffffffffd1bdde4d0fb1000 */ - L(7.10268609610294706092252562643261106E-32), /* 3f9770cae45cdf615010401a4b37d8d4 */ - L(3.12500000000000002971606591018488854E-01), /* 3ffd40000000000000db440fbc06b000 */ - L(6.38924218802905979887732294952782964E-32), /* 3f974bbf988bb5622bd8fbaa46e8b811 */ - L(3.16406250000000006594921047402056305E-01), /* 3ffd44000000000001e69e8954814000 */ - L(3.96079878754651470094149874444850097E-32), /* 3f969b5017b9fa7a1e86975258c73d3d */ - L(3.20312500000000006713799366908329147E-01), /* 3ffd48000000000001ef64159c065000 */ - L(-1.86401314975634286055150437995880517E-32), /* bf958323f0434911794e5fb8bfe136ba */ - L(3.24218749999999987061246567584951210E-01), /* 3ffd4bfffffffffffc4549db9b928000 */ - L(-3.18643523744758601387071062700407431E-32), /* bf964ae5fa7e26c2c3981bed12e14372 */ - L(3.28124999999999991782776266707412953E-01), /* 3ffd4ffffffffffffda1ad0840ca8000 */ - L(-4.46964199751314296839915534813144652E-32), /* bf96d0277729ffd74727150df6d15547 */ - L(3.32031250000000000393816557756032682E-01), /* 3ffd540000000000001d0efc04fad000 */ - L(-9.03246333902065439930373230002688649E-33), /* bf947731a008748cc6dee948839ef7ae */ - L(3.35937499999999983810482995064392173E-01), /* 3ffd57fffffffffffb556cab8ae61000 */ - L(5.27742727066129518825981597650621794E-32), /* 3f9712050a6ddbf1cabf1b971f4b5d0b */ - L(3.39843750000000004310441349760912471E-01), /* 3ffd5c0000000000013e0def5ddc4000 */ - L(-3.85927263474732591932884416445586106E-32), /* bf9690c51088ef3db9ca000829c450c2 */ - L(3.43749999999999990248130003997484364E-01), /* 3ffd5ffffffffffffd3070624a0af000 */ - L(9.62005170171527308106468341512327487E-34), /* 3f913fae595cea84432eb01430817fca */ - L(3.47656250000000004085726414568625697E-01), /* 3ffd640000000000012d79309e291000 */ - L(-6.59664093705705297250259434519072507E-32), /* bf97568465eafb0e662e64a5dbfaf35f */ - - L(-1.98364257812501251077851763965418372E-03), /* bff6040000000001cd90f658cf0b1000 */ - L(-3.71984513103117734260309047540278737E-34), /* bf8fee73c54483194782aac4a6154d11 */ - L(-1.95312500000000378520649630233891879E-03), /* bff60000000000008ba643bb5e2e8000 */ - L(-1.12194202736719050440745599339855038E-34), /* bf8e2a436aeff7bc529873354f47a3f5 */ - L(-1.92260742187499397430259771221991482E-03), /* bff5f7fffffffffe4361cb51170da000 */ - L(-2.30068299876822157331268484824540848E-34), /* bf8f31d02f85cfe8c0cc02276ce0f437 */ - L(-1.89208984375001137424603270262074989E-03), /* bff5f0000000000347456ed490c23000 */ - L(-1.15012507244426243338260435466985403E-34), /* bf8e31c174d5677a937a34ad8d2a70b4 */ - L(-1.86157226562500172319250342061336738E-03), /* bff5e800000000007f262fa3617b4000 */ - L(-3.12438344643346437509767736937785561E-34), /* bf8f9f4d426a2457c273d34ef7d9bde9 */ - L(-1.83105468749999505256246872355430379E-03), /* bff5dffffffffffe92f18c1c2b6fa000 */ - L(-5.91130415288336591179087455220308942E-35), /* bf8d3a4c80b42dc036bae446c9807f78 */ - L(-1.80053710937499445182387245573120522E-03), /* bff5d7fffffffffe669dea82b4a4c000 */ - L(-1.92396289352411531324908916321392100E-34), /* bf8eff7a2123fb573ba9778550d669bd */ - L(-1.77001953125000387737631542516323906E-03), /* bff5d000000000011e19915c3ddb7000 */ - L(7.91101758977203355387806553469731354E-36), /* 3f8a507f5a70faaccf469e3461873dea */ - L(-1.73950195312500034854670281415554486E-03), /* bff5c8000000000019b7dc6ef97bd000 */ - L(1.55906551582436824067407021178835755E-34), /* 3f8e9e7880333e34955aebcde3cfb053 */ - L(-1.70898437499998955782591472611429852E-03), /* bff5bffffffffffcfd80e88aa6b96000 */ - L(8.22951661962611381718215899498500357E-35), /* 3f8db58e6031a779b59f6ece191de7cc */ - L(-1.67846679687500586652037711131708544E-03), /* bff5b80000000001b0df6fd21c133000 */ - L(-8.96642618848426299713145894522897419E-35), /* bf8ddcbcab46d531801bfae4121f2f8a */ - L(-1.64794921875000109499161354039904782E-03), /* bff5b0000000000050cbce8915575000 */ - L(-2.88077905394253859590587789680486639E-34), /* bf8f7eebd4dd860ef73b674d5e707959 */ - L(-1.61743164062501133830507079150388351E-03), /* bff5a80000000003449e8700c3e82000 */ - L(-3.68271725851639066312899986829350273E-34), /* bf8fe9845fe20a5fe74059e0cae185d6 */ - L(-1.58691406249999015546015764131101956E-03), /* bff59ffffffffffd2999e668cdd28000 */ - L(8.48197657099957029953716507898788812E-35), /* 3f8dc2faaebb97392e451b07b28c4b12 */ - L(-1.55639648437500317366570219290722587E-03), /* bff5980000000000ea2cd9a40d256000 */ - L(-3.45156704719737676412949957712570373E-36), /* bf8925a079505516c8e317ac1ff53255 */ - L(-1.52587890625000568759013197767046039E-03), /* bff5900000000001a3ab8a3f6b698000 */ - L(-1.01902948542497496574967177677556729E-34), /* bf8e0ee78d94d9b5ad3d63ae35c9b554 */ - L(-1.49536132812500945889014955936485340E-03), /* bff5880000000002b9f1621b57743000 */ - L(-3.32264697086631598830366079048117140E-34), /* bf8fb9a7d14c32289204fbb0c9eb20e0 */ - L(-1.46484374999999931883259902869504725E-03), /* bff57fffffffffffcdbd1c90e1b4a000 */ - L(-1.76487524793892929381101031660811433E-34), /* bf8ed52f2f724bc1ae870b18356337b4 */ - L(-1.43432617187498876325946983333888768E-03), /* bff577fffffffffcc2dff8faa5570000 */ - L(-3.54550084538495708816233114576143814E-34), /* bf8fd74724576915868c1e8ce9f430f1 */ - L(-1.40380859374999215367421282192718062E-03), /* bff56ffffffffffdbd0b18aac65ed000 */ - L(-1.90585907028351204486765167064669639E-34), /* bf8efaaa0c0e23e50c11b2120348054f */ - L(-1.37329101562499692341771212945644892E-03), /* bff567ffffffffff1cfd00f1b0577000 */ - L(-3.59631150411372589637918252836880320E-34), /* bf8fde08239ac74942a46298ea4fb715 */ - L(-1.34277343749999137467356674296739172E-03), /* bff55ffffffffffd839030b05d53d000 */ - L(-1.49571076125940368185068762485268117E-35), /* bf8b3e1a3d5c684b27a9f835b1d8d3c9 */ - L(-1.31225585937499247038404301859788734E-03), /* bff557fffffffffdd469936e691e3000 */ - L(3.10375845385355395586146533282311300E-34), /* 3f8f9c8f6d63b7a4145716ffd92491fb */ - L(-1.28173828124999024755581675764821898E-03), /* bff54ffffffffffd306589b0ab21d000 */ - L(-1.98541096105909793397376077900810019E-34), /* bf8f07e808bbb1e35106c294ffbb9687 */ - L(-1.25122070312500340204619591143332523E-03), /* bff5480000000000fb06d5f16ad2c000 */ - L(3.62884195935761446237911443317457521E-34), /* 3f8fe25b17d623178a386a6fa6c5afb2 */ - L(-1.22070312499999591578388993012071279E-03), /* bff53ffffffffffed2a356c440074000 */ - L(-2.96756662615653130862526710937493307E-35), /* bf8c3b90d8ff2a991e5bd16718fb0645 */ - L(-1.19018554687498821966212632349422735E-03), /* bff537fffffffffc9ac3b585dda89000 */ - L(1.44659971891167323357060028901142644E-34), /* 3f8e809279ab249edf1dad9fe13fb0bf */ - L(-1.15966796875000160938908064907298384E-03), /* bff530000000000076c0800db9639000 */ - L(2.50088010538742402346270685365928513E-34), /* 3f8f4c6c8a483b60201d30c1a83c3cb7 */ - L(-1.12915039062500267151512523291939657E-03), /* bff5280000000000c51f7e7315137000 */ - L(7.56402096465615210500092443924888831E-35), /* 3f8d922c1e485d99aea2668ed32b55a6 */ - L(-1.09863281249998665006360103291051571E-03), /* bff51ffffffffffc26f2d4c9ce2ba000 */ - L(1.43982174467233642713619821353592061E-34), /* 3f8e7ec530b3d92b6303bec1c81214d1 */ - L(-1.06811523437500522742248711752028025E-03), /* bff518000000000181b7380f10446000 */ - L(5.41265133745862349181293024531133174E-35), /* 3f8d1fc9313d018b30e790e06b6be723 */ - L(-1.03759765624999980942114138999770552E-03), /* bff50ffffffffffff1f01130490e1000 */ - L(1.21525139612685854366189534669623436E-34), /* 3f8e4311b96b6fcde412caf3f0d86fb9 */ - L(-1.00708007812499602697537601515759439E-03), /* bff507fffffffffedad7afcce7051000 */ - L(1.00020246351201558505328236381833392E-34), /* 3f8e09e640992512b1300744a7e984ed */ - L(-9.76562499999992592487302113340463694E-04), /* bff4fffffffffffbbad8151f8adf6000 */ - L(-1.64984406575162932060422892046851002E-34), /* bf8eb69a919986e8054b86fc34300f24 */ - L(-9.46044921874989085824996924138179594E-04), /* bff4effffffffff9b55a204fd9792000 */ - L(-9.29539174108308550334255350011347171E-35), /* bf8dee3a50ed896b4656fa577a1df3d7 */ - L(-9.15527343750013735214860599791540029E-04), /* bff4e00000000007eaf5bf103f82d000 */ - L(3.07557018309280519949818825519490586E-35), /* 3f8c470cfbef77d32c74cb8042f6ee81 */ - L(-8.85009765625012292294986105781516428E-04), /* bff4d000000000071605c65403b97000 */ - L(4.77499983783821950338363358545463558E-35), /* 3f8cfbc3dc18884c4c4f9e07d90d7bd3 */ - L(-8.54492187499986941239470706817188192E-04), /* bff4bffffffffff878ddf9cab264a000 */ - L(-1.60128240346239526958630011447901568E-34), /* bf8ea9b1a21e19e2d5bd84b0fbffcf95 */ - L(-8.23974609374996290174598690241743810E-04), /* bff4affffffffffddc86c249ebe06000 */ - L(1.61677540391961912631535763471935882E-34), /* 3f8eadd00841366b0dc2bc262c2c8c36 */ - L(-7.93457031249988696952538334288757473E-04), /* bff49ffffffffff97bf6f0aa85a5f000 */ - L(1.22318577008381887076634753347515709E-34), /* 3f8e452db5b5d250878f71040da06d14 */ - L(-7.62939453124996723316499040007097041E-04), /* bff48ffffffffffe1c7265b431108000 */ - L(-1.03845161748762410745671891558398468E-34), /* bf8e14115ad884c96d1a820c73647220 */ - L(-7.32421874999998242520117923997325794E-04), /* bff47ffffffffffefca4498b7aa8a000 */ - L(5.64005211953031009549514026639438083E-35), /* 3f8d2be06950f68f1a6d8ff829a6928e */ - L(-7.01904296874999772890934814265622012E-04), /* bff46fffffffffffde7c0fe5d8041000 */ - L(5.90245467325173644235991233229525762E-35), /* 3f8d39d40cc49002189243c194b1db0e */ - L(-6.71386718750008699269643939210658742E-04), /* bff460000000000503c91d798b60c000 */ - L(-5.20515801723324452151498579012322191E-35), /* bf8d14c0f08a6a9285b32b8bda003eb5 */ - L(-6.40869140625005499535275057463709988E-04), /* bff45000000000032b969184e9751000 */ - L(-6.69469163285461870099846471658294534E-35), /* bf8d63f36bab7b24d936c9380e3d3fa6 */ - L(-6.10351562499999293780097329596079841E-04), /* bff43fffffffffff97c7c433e35ed000 */ - L(-1.16941808547394177991845382085515086E-34), /* bf8e36e27886f10b234a7dd8fc588bf0 */ - L(-5.79833984375000068291972326409994795E-04), /* bff43000000000000a13ff6dcf2bf000 */ - L(1.17885044988246219185041488459766001E-34), /* 3f8e3964677e001a00412aab52790842 */ - L(-5.49316406249990904622170867910987793E-04), /* bff41ffffffffffac1c25739c716b000 */ - L(-3.31875702128137033065075734368960972E-35), /* bf8c60e928d8982c3c99aef4f885a121 */ - L(-5.18798828125011293653756992177727236E-04), /* bff410000000000682a62cff36775000 */ - L(-5.69971237642088463334239430962628187E-35), /* bf8d2f0c76f8757d61cd1abc7ea7d066 */ - L(-4.88281249999990512232251384917893121E-04), /* bff3fffffffffff50fb48992320df000 */ - L(1.02144616714408655325510171265051108E-35), /* 3f8ab279a3626612710b9b3ac71734ac */ - L(-4.57763671874997554564967307956493434E-04), /* bff3dffffffffffd2e3c272e3cca9000 */ - L(-8.25484058867957231164162481843653503E-35), /* bf8db6e71158e7bf93e2e683f07aa841 */ - L(-4.27246093749991203999790346349633286E-04), /* bff3bffffffffff5dbe103cba0eb2000 */ - L(-3.51191203319375193921924105905691755E-35), /* bf8c757356d0f3dd7fbefc0dd419ab50 */ - L(-3.96728515624986649402960638705483281E-04), /* bff39ffffffffff09b996882706ec000 */ - L(-5.51925962073095883016589497244931171E-36), /* bf89d586d49f22289cfc860bebb99056 */ - L(-3.66210937499999945095511981300980754E-04), /* bff37fffffffffffefcb88bfc7df6000 */ - L(-2.11696465278144529364423332249588595E-35), /* bf8bc23a84d28e5496c874ef9833be25 */ - L(-3.35693359374992480958458008559640163E-04), /* bff35ffffffffff754c548a8798f2000 */ - L(-8.58941791799705081104736787493668352E-35), /* bf8dc8b1192fb7c3662826d43acb7c68 */ - L(-3.05175781250009811036303273640122156E-04), /* bff340000000000b4fb4f1aad1c76000 */ - L(-8.61173897858769926480551302277426632E-35), /* bf8dc9e0eabb1c0b33051011b64769fa */ - L(-2.74658203124987298321920308390303850E-04), /* bff31ffffffffff15b2056ac252fd000 */ - L(3.35152809454778381053519808988046631E-37), /* 3f85c82fb59ff8d7c80d44e635420ab1 */ - L(-2.44140624999999992770514819575735516E-04), /* bff2fffffffffffffbbb82d6a7636000 */ - L(3.54445837111124472730013879165516908E-35), /* 3f8c78e955b01378be647b1c92aa9a77 */ - L(-2.13623046875012756463165168672749438E-04), /* bff2c0000000001d6a1635fea6bbf000 */ - L(1.50050816288650121729916777279129473E-35), /* 3f8b3f1f6f616a61129a58e131cbd31d */ - L(-1.83105468749991323078784464300306893E-04), /* bff27fffffffffebfe0cbd0c82399000 */ - L(-9.14919506501448661140572099029756008E-37), /* bf873754bacaa9d9513b6127e791eb47 */ - L(-1.52587890625013337032336300236461546E-04), /* bff240000000001ec0cb57f2cc995000 */ - L(2.84906084373176180870418394956384516E-35), /* 3f8c2ef6d03a7e6ab087c4f099e4de89 */ - L(-1.22070312499990746786116828458007518E-04), /* bff1ffffffffffd553bbb49f35a34000 */ - L(6.71618008964968339584520728412444537E-36), /* 3f8a1dacb99c60071fc9cd2349495bf0 */ - L(-9.15527343750029275602791047595142231E-05), /* bff180000000000d8040cd6ecde28000 */ - L(-1.95753652091078750312541716951402172E-35), /* bf8ba0526cfb24d8d59122f1c7a09a14 */ - L(-6.10351562499913258461494008080572701E-05), /* bff0ffffffffffaffebbb92d7f6a9000 */ - L(5.69868489273961111703398456218119973E-36), /* 3f89e4ca5df09ef4a4386dd5b3bf0331 */ - L(-3.05175781250092882818419203884960853E-05), /* bff0000000000055ab55de88fac1d000 */ - L(9.03341100018476837609128961872915953E-36), /* 3f8a803d229fa3a0e834a63abb06662b */ -#define T_EXPL_ARG2 (2*T_EXPL_ARG1 + 2 + 2*65) - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(3.05175781249814607084128277672749162E-05), /* 3feffffffffffeaa02abb9102f499000 */ - L(1.00271855391179733380665816525889949E-36), /* 3f8755351afa042ac3f58114824d4c10 */ - L(6.10351562500179243748093427073421439E-05), /* 3ff1000000000052a95de07a4c26d000 */ - L(1.67231624299180373502350811501181670E-36), /* 3f881c87a53691cae9d77f4e40d66616 */ - L(9.15527343749970728685313252158399200E-05), /* 3ff17ffffffffff28040cc2acde28000 */ - L(2.43665747834893104318707597514407880E-36), /* 3f889e9366c7c6c6a2ecb78dc9b0509e */ - L(1.22070312500027751961838150070880064E-04), /* 3ff200000000003ffddde6c153b53000 */ - L(-1.73322146370624186623546452226755405E-35), /* bf8b709d8d658ed5dbbe943de56ee84e */ - L(1.52587890624995916105682628143179430E-04), /* 3ff23ffffffffff6954b56e285d23000 */ - L(1.23580432650945898349135528000443828E-35), /* 3f8b06d396601dde16de7d7bc27346e6 */ - L(1.83105468750008670314358488289621794E-04), /* 3ff2800000000013fe0cdc8c823b7000 */ - L(4.30446229148833293310207915930740796E-35), /* 3f8cc9ba9bfe554a4f7f2fece291eb23 */ - L(2.13623046875005741337455947623248132E-04), /* 3ff2c0000000000d3d1662de21a3f000 */ - L(-3.96110759869520786681660669615255057E-35), /* bf8ca5379b04ff4a31aab0ceacc917e6 */ - L(2.44140624999981493573336463433440506E-04), /* 3ff2ffffffffffd553bbdf48e0534000 */ - L(-1.39617373942387888957350179316792928E-35), /* bf8b28eeedc286015802b63f96b8c5cd */ - L(2.74658203124984920706309918754626834E-04), /* 3ff31fffffffffee9d60c8439ec1d000 */ - L(-3.16168080483901830349738314447356223E-36), /* bf890cf74f81c77a611abc1243812444 */ - L(3.05175781250008648918265055410966055E-04), /* 3ff3400000000009f8b5c9a346636000 */ - L(8.54421306185008998867856704677221443E-35), /* 3f8dc649cd40922fc08adc6b6b20ead0 */ - L(3.35693359374988945462612499316774515E-04), /* 3ff35ffffffffff34146c540f15b2000 */ - L(7.96443137431639500475160850431097078E-35), /* 3f8da77638ed3148fc4d99d1c9e13446 */ - L(3.66210937500027690542093987739604535E-04), /* 3ff380000000001fecce34bea89c4000 */ - L(2.14507323877752361258862577769090367E-35), /* 3f8bc834e554d38894cf91957b0253d3 */ - L(3.96728515625003928083564943615052121E-04), /* 3ff3a00000000004875d9a4acf6ab000 */ - L(4.88358523466632050664019922448605508E-35), /* 3f8d03a7eaeef1a9f78c71a12c44dd28 */ - L(4.27246093750017799227172345607351585E-04), /* 3ff3c00000000014856794c3ee850000 */ - L(6.66520494592631402182216588784828935E-35), /* 3f8d6262118fcdb59b8f16108f5f1a6c */ - L(4.57763671875002108342364320152138181E-04), /* 3ff3e000000000026e45d855410b9000 */ - L(7.21799615960261390920033272189522298E-35), /* 3f8d7fc645cff8879462296af975c9fd */ - L(4.88281249999999768797631616370963356E-04), /* 3ff3ffffffffffffbbc2d7cc004df000 */ - L(-5.30564629906905979452258114088325361E-35), /* bf8d1a18b71929a30d67a217a27ae851 */ - L(5.18798828124997339054881383202487041E-04), /* 3ff40ffffffffffe775055eea5851000 */ - L(-4.03682911253647925867848180522846377E-35), /* bf8cad44f0f3e5199d8a589d9332acad */ - L(5.49316406249980511907933706754958501E-04), /* 3ff41ffffffffff4c410b29bb62fb000 */ - L(-2.08166843948323917121806956728438051E-35), /* bf8bbab8cf691403249fe5b699e25143 */ - L(5.79833984374989593561576568548497165E-04), /* 3ff42ffffffffffa0047df328d817000 */ - L(-1.72745033420153042445343706432627539E-34), /* bf8ecb3c2d7d3a9e6e960576be901fdf */ - L(6.10351562500008540711511259540838154E-04), /* 3ff4400000000004ec62f54f8c271000 */ - L(7.41889382604319545724663095428976499E-35), /* 3f8d8a74c002c81a47c93b8e05d15f8e */ - L(6.40869140625020444702875407535884986E-04), /* 3ff450000000000bc91b09718515d000 */ - L(-4.47321009727305792048065440180490107E-35), /* bf8cdbac5c8fe70822081d8993eb5cb6 */ - L(6.71386718750007531635964622352684074E-04), /* 3ff460000000000457792973db05c000 */ - L(5.13698959677949336513874456684462092E-35), /* 3f8d112114436949c5ef38d8049004ab */ - L(7.01904296875006634673332887754430334E-04), /* 3ff4700000000003d31adf2cb8b1d000 */ - L(-8.25665755717729437292989870760751482E-35), /* bf8db6ffcc8ef71f8e648e3a8b160f5a */ - L(7.32421874999998244664170215504673504E-04), /* 3ff47ffffffffffefcf5498bd5c8a000 */ - L(-5.64005234937832153139057628112753364E-35), /* bf8d2be06a1dfe90e7bf90fba7c12a98 */ - L(7.62939453125017456345986752604096408E-04), /* 3ff490000000000a101a1b093d4a8000 */ - L(-1.11084094120417622468550608896588329E-34), /* bf8e274feabd2d94f6694507a46accb1 */ - L(7.93457031249987558617598988993908016E-04), /* 3ff49ffffffffff8d3f9dcab74bbf000 */ - L(-1.22966480225449015129079129940978828E-34), /* bf8e46e6a65eef8fa9e42eddf3da305e */ - L(8.23974609374997378723747633335135819E-04), /* 3ff4affffffffffe7d2afbaa55b26000 */ - L(-1.62270010016794279091906973366704963E-34), /* bf8eaf633f057ebdb664a34566401c4e */ - L(8.54492187500023938282350821569920958E-04), /* 3ff4c0000000000dccaabce399e59000 */ - L(-1.39076361712838158775374263169606160E-34), /* bf8e71ba779364b3bbdba7841f2c4ca1 */ - L(8.85009765624987932362186815286691297E-04), /* 3ff4cffffffffff90b218886edc2a000 */ - L(4.07328275060905585228261577392403980E-35), /* 3f8cb1254dbb6ea4b8cfa5ed4cf28d24 */ - L(9.15527343749975579461305518559161974E-04), /* 3ff4dffffffffff1ec2a21f25df33000 */ - L(1.16855112459192484947855553716334015E-35), /* 3f8af10bf319e9f5270cf249eeffbe5c */ - L(9.46044921875016761584725882821122521E-04), /* 3ff4f00000000009a992c46c16d71000 */ - L(9.51660680007524262741115611071680436E-35), /* 3f8df9fd56e81f8edf133843910ee831 */ - L(9.76562499999974118878133088548272636E-04), /* 3ff4fffffffffff1149edc46a6df6000 */ - L(-5.65271128977550656964071208289181661E-36), /* bf89e0e12689dd721aa2314c81eb6429 */ - L(1.00708007812498671732140389760347830E-03), /* 3ff507fffffffffc2be94b90ed091000 */ - L(-1.43355074891483635310132767255371379E-34), /* bf8e7d1a688c247b16022daab1316d55 */ - L(1.03759765625002637786192745235343007E-03), /* 3ff51000000000079a57b966bc158000 */ - L(2.95905815240957629366749917020106928E-34), /* 3f8f895387fc73bb38f8a1b254c01a60 */ - L(1.06811523437500860568717813047520763E-03), /* 3ff51800000000027afcd5b35f5e6000 */ - L(-5.98328495358586628195372356742878314E-35), /* bf8d3e204130013bf6328f1b70ff8c76 */ - L(1.09863281250001439958487251556220070E-03), /* 3ff5200000000004268077c6c66bd000 */ - L(2.41371837889426603334113000868144760E-34), /* 3f8f40d6948edf864054ccf151f9815e */ - L(1.12915039062501298413451613770002366E-03), /* 3ff5280000000003be0f5dd8fe81b000 */ - L(-1.28815268997394164973472617519705703E-34), /* bf8e567321172ea089dce4bc8354ecb7 */ - L(1.15966796874997272036339054191407232E-03), /* 3ff52ffffffffff8231e3bcfff1e8000 */ - L(1.02996064554316248496839462594377804E-34), /* 3f8e11cf7d402789244f68e2d4f985b1 */ - L(1.19018554687502744121802585360546796E-03), /* 3ff5380000000007e8cdf3f8f6c20000 */ - L(-1.43453217726255628994625761307322163E-34), /* bf8e7d5d3370d85a374f5f4802fc517a */ - L(1.22070312499997743541996266398850614E-03), /* 3ff53ffffffffff97f0722561f454000 */ - L(-1.41086259180534339713692694428211646E-34), /* bf8e77125519ff76244dfec5fbd58402 */ - L(1.25122070312501024092560690174507039E-03), /* 3ff5480000000002f3a59d8820691000 */ - L(3.84102646020099293168698506729765213E-34), /* 3f8ffe8f5b86f9c3569c8f26e19b1f50 */ - L(1.28173828124997986521442660131425390E-03), /* 3ff54ffffffffffa3250a764439d9000 */ - L(1.44644589735033114377952806106652650E-34), /* 3f8e808801b80dcf38323cdbfdca2549 */ - L(1.31225585937501665804856968749058137E-03), /* 3ff5580000000004cd25a414c6d62000 */ - L(1.67474574742200577294563576414361377E-34), /* 3f8ebd394a151dbda4f81d5d83c0f1e9 */ - L(1.34277343749997290265837386401818888E-03), /* 3ff55ffffffffff83091b042cfd59000 */ - L(-1.55650565030381326742591837551559103E-34), /* bf8e9dca490d7fecfadba9625ffb91c5 */ - L(1.37329101562497720784949380297774268E-03), /* 3ff567fffffffff96e3c7312f5ccf000 */ - L(1.65279335325630026116581677369221748E-34), /* 3f8eb763496f5bd7404f2298b402074f */ - L(1.40380859374999099958354100336136647E-03), /* 3ff56ffffffffffd67e2f09f2a381000 */ - L(1.89919944388961890195706641264717076E-34), /* 3f8ef8e4d0ffdfeba982aa8829501389 */ - L(1.43432617187497484122173130998160625E-03), /* 3ff577fffffffff8bf9c1d71af8a8000 */ - L(2.57638517142061429772064578590009568E-34), /* 3f8f5675d82c1cc4ada70fd3a957b89a */ - L(1.46484374999999929342158925502052945E-03), /* 3ff57fffffffffffcbdd1c7671b46000 */ - L(1.76487201934184070490166772482073801E-34), /* 3f8ed52ef732458f6e4c5c07504f33cc */ - L(1.49536132812502318451070466256902933E-03), /* 3ff5880000000006aeb7066c8ad43000 */ - L(2.38068367275295804321313550609246656E-34), /* 3f8f3c7277ae6fc390ace5e06c0b025b */ - L(1.52587890625000448053340248672949543E-03), /* 3ff59000000000014a9ae2104b3bc000 */ - L(1.01174455568392813258454590274740959E-34), /* 3f8e0cf7c434762991bb38e12acee215 */ - L(1.55639648437501113499837053523090913E-03), /* 3ff5980000000003359e2c204355e000 */ - L(-2.82398418808099749023517211651363693E-35), /* bf8c2c4c2971d88caa95e15fb1ccb1a1 */ - L(1.58691406249999937955142588308171026E-03), /* 3ff59fffffffffffd2380ecbc87c2000 */ - L(-1.27361695572422741562701199136538047E-34), /* bf8e5295e0e206dfb0f0266c07225448 */ - L(1.61743164062498000531048954475329309E-03), /* 3ff5a7fffffffffa3ca6fe61ed94c000 */ - L(-1.22606548862580061633942923016222044E-34), /* bf8e45f1b17bb61039d21a351bb207b8 */ - L(1.64794921875001835451453858682255576E-03), /* 3ff5b000000000054a52fa20f6565000 */ - L(1.39132339594152335892305491425264583E-34), /* 3f8e71e0904c5449b414ee49b191cef2 */ - L(1.67846679687501263995029340691547953E-03), /* 3ff5b80000000003a4a9e912c910b000 */ - L(6.67245854693585315412242764786197029E-35), /* 3f8d62c4ccac1e7511a617d469468ccd */ - L(1.70898437500002646861403514115369655E-03), /* 3ff5c00000000007a109fbaa7e015000 */ - L(6.87367172354719289559624829652240928E-36), /* 3f8a245fa835eceb42bae8128d9336db */ - L(1.73950195312501174308226096992992128E-03), /* 3ff5c80000000003627c8d637a005000 */ - L(-2.20824271875474985927385878948759352E-34), /* bf8f25869b1cbefb25e735992f232f57 */ - L(1.77001953124997491747605207736194513E-03), /* 3ff5cffffffffff8c53c84b6883b8000 */ - L(3.43123048533596296514343180408963705E-34), /* 3f8fc816b91d173ddadbbf09b1287906 */ - L(1.80053710937497698911127570705069398E-03), /* 3ff5d7fffffffff95e1899f4a8430000 */ - L(3.99231237340890073475077494556136100E-35), /* 3f8ca889148f62fa854da5674df41279 */ - L(1.83105468750002267094899598630423914E-03), /* 3ff5e0000000000688d21e62ba674000 */ - L(-3.22274595655810623999007524769365273E-34), /* bf8fac605cb9ae01eb719675ced25560 */ - L(1.86157226562500499224728040579690330E-03), /* 3ff5e80000000001705ce28a6d89e000 */ - L(3.07094985075881613489605622068441083E-34), /* 3f8f98330225ec7e2c8f3c0d1c432b91 */ - L(1.89208984374998234666824993196980949E-03), /* 3ff5effffffffffae969fdc7cd8cf000 */ - L(-3.06287628722973914692165056776495733E-34), /* bf8f9720477d9cfa10e464df7f91020c */ - L(1.92260742187501225343755557292811682E-03), /* 3ff5f800000000038824e428ed49a000 */ - L(6.30049124729794620592961282769623368E-35), /* 3f8d4efdd7cd4336d88a6aa49e1e96bc */ - L(1.95312499999998514894032051116231258E-03), /* 3ff5fffffffffffbb82f6a04f1ae0000 */ - L(-6.14610057507500948543216998736262902E-35), /* bf8d46c862d39255370e7974d48daa7e */ - L(1.98364257812501222021119324146882732E-03), /* 3ff6040000000001c2d8a1aa5188d000 */ - L(3.71942298418113774118754986159801984E-34), /* 3f8fee6567d9940495519ffe62cbc9a4 */ - - L(7.06341639425619532977052017486130353E-01), /* 3ffe69a59c8245a9ac00000000000000 */ - L(7.09106182437398424589503065362805501E-01), /* 3ffe6b0ff72deb89d000000000000000 */ - L(7.11881545564596485142772053222870454E-01), /* 3ffe6c7bbce9a6d93000000000000000 */ - L(7.14667771155948150507697391731198877E-01), /* 3ffe6de8ef213d71e000000000000000 */ - L(7.17464901725936049503573599395167548E-01), /* 3ffe6f578f41e1a9e400000000000000 */ - L(7.20272979955439790478166628417966422E-01), /* 3ffe70c79eba33c06c00000000000000 */ - L(7.23092048692387218133958981525211129E-01), /* 3ffe72391efa434c7400000000000000 */ - L(7.25922150952408251622927082280511968E-01), /* 3ffe73ac117390acd800000000000000 */ - L(7.28763329919491220643124052003258839E-01), /* 3ffe752077990e79d000000000000000 */ - L(7.31615628946641782803794740175362676E-01), /* 3ffe769652df22f7e000000000000000 */ - L(7.34479091556544505525749855223693885E-01), /* 3ffe780da4bba98c4800000000000000 */ - L(7.37353761442226890432394270646909717E-01), /* 3ffe79866ea5f432d400000000000000 */ - L(7.40239682467726090031590047146892175E-01), /* 3ffe7b00b216ccf53000000000000000 */ - L(7.43136898668758316688354170764796436E-01), /* 3ffe7c7c70887763c000000000000000 */ - L(7.46045454253390638577059235103661194E-01), /* 3ffe7df9ab76b20fd000000000000000 */ - L(7.48965393602715662213498148958024103E-01), /* 3ffe7f78645eb8076400000000000000 */ - L(7.51896761271528629722027403659012634E-01), /* 3ffe80f89cbf42526400000000000000 */ - L(7.54839601989007347171423134568613023E-01), /* 3ffe827a561889716000000000000000 */ - L(7.57793960659394638668118204805068672E-01), /* 3ffe83fd91ec46ddc000000000000000 */ - L(7.60759882362683631518152083117456641E-01), /* 3ffe858251bdb68b8c00000000000000 */ - L(7.63737412355305483879774897104653064E-01), /* 3ffe87089711986c9400000000000000 */ - L(7.66726596070820082262642358728044201E-01), /* 3ffe8890636e31f54400000000000000 */ - L(7.69727479120609181517664865168626420E-01), /* 3ffe8a19b85b4fa2d800000000000000 */ - L(7.72740107294572486917871856348938309E-01), /* 3ffe8ba4976246833800000000000000 */ - L(7.75764526561826289752232810315035749E-01), /* 3ffe8d31020df5be4400000000000000 */ - L(7.78800783071404878477039801509818062E-01), /* 3ffe8ebef9eac820b000000000000000 */ - L(7.81848923152964780936002853195532225E-01), /* 3ffe904e8086b5a87800000000000000 */ - L(7.84908993317491698871180005880887620E-01), /* 3ffe91df97714512d800000000000000 */ - L(7.87981040258010162480317717381694820E-01), /* 3ffe9372403b8d6bcc00000000000000 */ - L(7.91065110850296016042904057030682452E-01), /* 3ffe95067c78379f2800000000000000 */ - L(7.94161252153591734614934694036492147E-01), /* 3ffe969c4dbb800b4800000000000000 */ - L(7.97269511411324433014513601847284008E-01), /* 3ffe9833b59b38154400000000000000 */ - L(8.00389936051826789142893403550260700E-01), /* 3ffe99ccb5aec7bec800000000000000 */ - L(8.03522573689060742863077280162542593E-01), /* 3ffe9b674f8f2f3d7c00000000000000 */ - L(8.06667472123343942680406826184480451E-01), /* 3ffe9d0384d70893f800000000000000 */ - L(8.09824679342079301047618855591281317E-01), /* 3ffe9ea15722892c7800000000000000 */ - L(8.12994243520486992160556383169023320E-01), /* 3ffea040c80f8374f000000000000000 */ - L(8.16176213022339780422953481320291758E-01), /* 3ffea1e1d93d687d0000000000000000 */ - L(8.19370636400700819157449927843117621E-01), /* 3ffea3848c4d49954c00000000000000 */ - L(8.22577562398664585696650419777142815E-01), /* 3ffea528e2e1d9f09800000000000000 */ - L(8.25797039950100647542896581398963463E-01), /* 3ffea6cede9f70467c00000000000000 */ - L(8.29029118180400342863478613253391813E-01), /* 3ffea876812c0877bc00000000000000 */ - L(8.32273846407226292054559735333896242E-01), /* 3ffeaa1fcc2f45343800000000000000 */ - L(8.35531274141265073440720811959181447E-01), /* 3ffeabcac15271a2a400000000000000 */ - L(8.38801451086982535754188461396552157E-01), /* 3ffead7762408309bc00000000000000 */ - L(8.42084427143382358016410194068157580E-01), /* 3ffeaf25b0a61a7b4c00000000000000 */ - L(8.45380252404767357221615498019673396E-01), /* 3ffeb0d5ae318680c400000000000000 */ - L(8.48688977161503960155997106085123960E-01), /* 3ffeb2875c92c4c99400000000000000 */ - L(8.52010651900789478530029441571969073E-01), /* 3ffeb43abd7b83db1c00000000000000 */ - L(8.55345327307422548246407245642330963E-01), /* 3ffeb5efd29f24c26400000000000000 */ - L(8.58693054264576483003423845730139874E-01), /* 3ffeb7a69db2bcc77800000000000000 */ - L(8.62053883854575708767242758767679334E-01), /* 3ffeb95f206d17228000000000000000 */ - L(8.65427867359675251357487013592617586E-01), /* 3ffebb195c86b6b29000000000000000 */ - L(8.68815056262843166123843730019871145E-01), /* 3ffebcd553b9d7b62000000000000000 */ - L(8.72215502248546159513864495238522068E-01), /* 3ffebe9307c271855000000000000000 */ - L(8.75629257203538208242932228131394368E-01), /* 3ffec0527a5e384ddc00000000000000 */ - L(8.79056373217652342599848225290770642E-01), /* 3ffec213ad4c9ed0d800000000000000 */ - L(8.82496902584595399599010079327854328E-01), /* 3ffec3d6a24ed8221800000000000000 */ - L(8.85950897802745995779361010136199184E-01), /* 3ffec59b5b27d9696800000000000000 */ - L(8.89418411575955636383383762222365476E-01), /* 3ffec761d99c5ba58800000000000000 */ - L(8.92899496814352794382685374330321793E-01), /* 3ffec92a1f72dd70d400000000000000 */ - L(8.96394206635150403439382671422208659E-01), /* 3ffecaf42e73a4c7d800000000000000 */ - L(8.99902594363456265202927397695020773E-01), /* 3ffeccc00868c0d18800000000000000 */ - L(9.03424713533086704009278378180169966E-01), /* 3ffece8daf1e0ba94c00000000000000 */ - L(9.06960617887383580004723171441582963E-01), /* 3ffed05d24612c2af000000000000000 */ - L(9.10510361380034133338412516422977205E-01), /* 3ffed22e6a0197c02c00000000000000 */ - L(9.14073998175894436579724811053893063E-01), /* 3ffed40181d094303400000000000000 */ - L(9.17651582651815816982221463149471674E-01), /* 3ffed5d66da13970f400000000000000 */ - L(9.21243169397474526149949269893113524E-01), /* 3ffed7ad2f48737a2000000000000000 */ - L(9.24848813216204823639543519675498828E-01), /* 3ffed985c89d041a3000000000000000 */ - L(9.28468569125835141431224428743007593E-01), /* 3ffedb603b7784cd1800000000000000 */ - L(9.32102492359527579068867453315760940E-01), /* 3ffedd3c89b26894e000000000000000 */ - L(9.35750638366620729469147477175283711E-01), /* 3ffedf1ab529fdd41c00000000000000 */ - L(9.39413062813475779888605643463961314E-01), /* 3ffee0fabfbc702a3c00000000000000 */ - L(9.43089821584325888048638830696290825E-01), /* 3ffee2dcab49ca51b400000000000000 */ - L(9.46780970782128888929563004239753354E-01), /* 3ffee4c079b3f8000400000000000000 */ - L(9.50486566729423443256052905780961737E-01), /* 3ffee6a62cdec7c7b000000000000000 */ - L(9.54206665969188322362626308859034907E-01), /* 3ffee88dc6afecfbfc00000000000000 */ - L(9.57941325265705301283958306157728657E-01), /* 3ffeea77490f0196b000000000000000 */ - L(9.61690601605425299247542625380447134E-01), /* 3ffeec62b5e5881fb000000000000000 */ - L(9.65454552197837823079851204965962097E-01), /* 3ffeee500f1eed967000000000000000 */ - L(9.69233234476344074348475032820715569E-01), /* 3ffef03f56a88b5d7800000000000000 */ - L(9.73026706099133165128733935489435680E-01), /* 3ffef2308e71a927a800000000000000 */ - L(9.76835024950062025261843245971249416E-01), /* 3ffef423b86b7ee79000000000000000 */ - L(9.80658249139538557015427500118676107E-01), /* 3ffef618d68936c09c00000000000000 */ - L(9.84496437005408397968864164795377292E-01), /* 3ffef80feabfeefa4800000000000000 */ - L(9.88349647113845042323276857132441364E-01), /* 3ffefa08f706bbf53800000000000000 */ - L(9.92217938260243514925207364285597578E-01), /* 3ffefc03fd56aa225000000000000000 */ - L(9.96101369470117486981664001177705359E-01), /* 3ffefe00ffaabffbbc00000000000000 */ -#define T_EXPL_RES1 (T_EXPL_ARG2 + 2 + 2*65 + 89) - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - L(1.00391388933834757590801700644078664E+00), /* 3fff0100802ab5577800000000000000 */ - L(1.00784309720644799091004983893071767E+00), /* 3fff0202015600445c00000000000000 */ - L(1.01178768355933151879000320150225889E+00), /* 3fff0304848362076c00000000000000 */ - L(1.01574770858668572692806719715008512E+00), /* 3fff04080ab55de39000000000000000 */ - L(1.01972323271377413034244341361045372E+00), /* 3fff050c94ef7a206c00000000000000 */ - L(1.02371431660235789884438872832106426E+00), /* 3fff06122436410dd000000000000000 */ - L(1.02772102115162167201845022646011785E+00), /* 3fff0718b98f42085000000000000000 */ - L(1.03174340749910264936062276319717057E+00), /* 3fff08205601127ec800000000000000 */ - L(1.03578153702162378824169763902318664E+00), /* 3fff0928fa934ef90800000000000000 */ - L(1.03983547133622999947277776300325058E+00), /* 3fff0a32a84e9c1f5800000000000000 */ - L(1.04390527230112850620713516036630608E+00), /* 3fff0b3d603ca7c32800000000000000 */ - L(1.04799100201663270004459604933799710E+00), /* 3fff0c49236829e8bc00000000000000 */ - L(1.05209272282610977189420964350574650E+00), /* 3fff0d55f2dce5d1e800000000000000 */ - L(1.05621049731693195106174698594259098E+00), /* 3fff0e63cfa7ab09d000000000000000 */ - L(1.06034438832143151909548350886325352E+00), /* 3fff0f72bad65671b800000000000000 */ - L(1.06449445891785943185681162503897212E+00), /* 3fff1082b577d34ed800000000000000 */ - L(1.06866077243134810492719566354935523E+00), /* 3fff1193c09c1c595c00000000000000 */ - L(1.07284339243487741866189821848820429E+00), /* 3fff12a5dd543ccc4c00000000000000 */ - L(1.07704238275024494209120007326419000E+00), /* 3fff13b90cb25176a400000000000000 */ - L(1.08125780744903959851299646288680378E+00), /* 3fff14cd4fc989cd6400000000000000 */ - L(1.08548973085361949442173568058933597E+00), /* 3fff15e2a7ae28fecc00000000000000 */ - L(1.08973821753809324563988525369495619E+00), /* 3fff16f9157587069400000000000000 */ - L(1.09400333232930546678574046381982043E+00), /* 3fff18109a3611c35000000000000000 */ - L(1.09828514030782586896606289883493446E+00), /* 3fff192937074e0cd800000000000000 */ - L(1.10258370680894224324930519287590869E+00), /* 3fff1a42ed01d8cbc800000000000000 */ - L(1.10689909742365749645287564817408565E+00), /* 3fff1b5dbd3f68122400000000000000 */ - L(1.11123137799969046168868658241990488E+00), /* 3fff1c79a8dacc350c00000000000000 */ - L(1.11558061464248076122274255794764031E+00), /* 3fff1d96b0eff0e79400000000000000 */ - L(1.11994687371619722204840741142106708E+00), /* 3fff1eb4d69bde569c00000000000000 */ - L(1.12433022184475073235176978414529003E+00), /* 3fff1fd41afcba45e800000000000000 */ - L(1.12873072591281087273529237791080959E+00), /* 3fff20f47f31c92e4800000000000000 */ - L(1.13314845306682632219974493636982515E+00), /* 3fff2216045b6f5cd000000000000000 */ - L(1.13758347071604959399593326452304609E+00), /* 3fff2338ab9b32134800000000000000 */ - L(1.14203584653356560174586320499656722E+00), /* 3fff245c7613b8a9b000000000000000 */ - L(1.14650564845732405583333957110880874E+00), /* 3fff258164e8cdb0d800000000000000 */ - L(1.15099294469117646722011727433709893E+00), /* 3fff26a7793f60164400000000000000 */ - L(1.15549780370591653744227755851170514E+00), /* 3fff27ceb43d84490400000000000000 */ - L(1.16002029424032515603215642840950750E+00), /* 3fff28f7170a755fd800000000000000 */ - L(1.16456048530221917269855680387991015E+00), /* 3fff2a20a2ce96406400000000000000 */ - L(1.16911844616950438835445424956560601E+00), /* 3fff2b4b58b372c79400000000000000 */ - L(1.17369424639123270948104504896036815E+00), /* 3fff2c7739e3c0f32c00000000000000 */ - L(1.17828795578866324378353169777255971E+00), /* 3fff2da4478b620c7400000000000000 */ - L(1.18289964445632783673900689791480545E+00), /* 3fff2ed282d763d42400000000000000 */ - L(1.18752938276310060494722620205720887E+00), /* 3fff3001ecf601af7000000000000000 */ - L(1.19217724135327157730657177125976887E+00), /* 3fff31328716a5d63c00000000000000 */ - L(1.19684329114762477708211463323095813E+00), /* 3fff32645269ea829000000000000000 */ - L(1.20152760334452030077656559114984702E+00), /* 3fff339750219b212c00000000000000 */ - L(1.20623024942098072687102217059873510E+00), /* 3fff34cb8170b5835400000000000000 */ - L(1.21095130113378179892436037334846333E+00), /* 3fff3600e78b6b11d000000000000000 */ - L(1.21569083052054743854242246925423387E+00), /* 3fff373783a722012400000000000000 */ - L(1.22044890990084875515009343871497549E+00), /* 3fff386f56fa7686e800000000000000 */ - L(1.22522561187730755216662714701669756E+00), /* 3fff39a862bd3c106400000000000000 */ - L(1.23002100933670455162882717559114099E+00), /* 3fff3ae2a8287e7a8000000000000000 */ - L(1.23483517545109100499445276000187732E+00), /* 3fff3c1e2876834aa800000000000000 */ - L(1.23966818367890557750499169742397498E+00), /* 3fff3d5ae4e2cae92c00000000000000 */ - L(1.24452010776609517384017067342938390E+00), /* 3fff3e98deaa11dcbc00000000000000 */ - L(1.24939102174724003813111039562500082E+00), /* 3fff3fd8170a52071800000000000000 */ - L(1.25428099994668373895478907797951251E+00), /* 3fff41188f42c3e32000000000000000 */ - L(1.25919011697966698459794088194030337E+00), /* 3fff425a4893dfc3f800000000000000 */ - L(1.26411844775346637881341393949696794E+00), /* 3fff439d443f5f159000000000000000 */ - L(1.26906606746853711786826579555054195E+00), /* 3fff44e183883d9e4800000000000000 */ - L(1.27403305161966090564007458851847332E+00), /* 3fff462707b2bac20c00000000000000 */ - L(1.27901947599709753244923149395617656E+00), /* 3fff476dd2045ac67800000000000000 */ - L(1.28402541668774150540599521264084615E+00), /* 3fff48b5e3c3e8186800000000000000 */ - L(1.28905095007628295311619126550795045E+00), /* 3fff49ff3e397492bc00000000000000 */ - L(1.29409615284637330434591717676084954E+00), /* 3fff4b49e2ae5ac67400000000000000 */ - L(1.29916110198179535206719492634874769E+00), /* 3fff4c95d26d3f440800000000000000 */ - L(1.30424587476763775839572190307080746E+00), /* 3fff4de30ec211e60000000000000000 */ - L(1.30935054879147461104338390214252286E+00), /* 3fff4f3198fa0f1cf800000000000000 */ - L(1.31447520194454914310711046709911898E+00), /* 3fff50817263c13cd000000000000000 */ - L(1.31961991242296217130558488861424848E+00), /* 3fff51d29c4f01cb3000000000000000 */ - L(1.32478475872886558573071624778094701E+00), /* 3fff5325180cfacf7800000000000000 */ - L(1.32996981967165983640200010995613411E+00), /* 3fff5478e6f02823d000000000000000 */ - L(1.33517517436919680440254865061433520E+00), /* 3fff55ce0a4c58c7bc00000000000000 */ - L(1.34040090224898678084031189428060316E+00), /* 3fff57248376b033d800000000000000 */ - L(1.34564708304941055283521222918352578E+00), /* 3fff587c53c5a7af0400000000000000 */ - L(1.35091379682093615244298234756570309E+00), /* 3fff59d57c910fa4e000000000000000 */ - L(1.35620112392734021300455538039386738E+00), /* 3fff5b2fff3210fd9400000000000000 */ - L(1.36150914504693443252136830778908916E+00), /* 3fff5c8bdd032e770800000000000000 */ - L(1.36683794117379636690046140756749082E+00), /* 3fff5de9176045ff5400000000000000 */ - L(1.37218759361900544124779344201670028E+00), /* 3fff5f47afa69210a800000000000000 */ - L(1.37755818401188367960941150158760138E+00), /* 3fff60a7a734ab0e8800000000000000 */ - L(1.38294979430124120867162673675920814E+00), /* 3fff6208ff6a88a46000000000000000 */ - L(1.38836250675662681297595213436579797E+00), /* 3fff636bb9a983258400000000000000 */ - L(1.39379640396958309755959248832368758E+00), /* 3fff64cfd75454ee7c00000000000000 */ - L(1.39925156885490681313299887733592186E+00), /* 3fff663559cf1bc7c400000000000000 */ - L(1.40472808465191417726103395580139477E+00), /* 3fff679c427f5a49f400000000000000 */ - L(1.41022603492571069194738697660795879E+00), /* 3fff690492cbf9432c00000000000000 */ - L(1.41574550356846662335641440222389065E+00), /* 3fff6a6e4c1d491e1800000000000000 */ - - L(9.98018323540573404351050612604012713E-01), /* 3ffefefc41f8d4bdb000000000000000 */ - L(9.98048781107475468932221929208026268E-01), /* 3ffeff003ff556aa8800000000000000 */ - L(9.98079239603882895082165305211674422E-01), /* 3ffeff043df9d4986000000000000000 */ - L(9.98109699029824021243584297735651489E-01), /* 3ffeff083c064e972c00000000000000 */ - L(9.98140159385327269125909310787392315E-01), /* 3ffeff0c3a1ac4b6ec00000000000000 */ - L(9.98170620670420977171843901487591211E-01), /* 3ffeff10383737079400000000000000 */ - L(9.98201082885133511579667242585856002E-01), /* 3ffeff14365ba5991c00000000000000 */ - L(9.98231546029493238547658506831794512E-01), /* 3ffeff183488107b7c00000000000000 */ - L(9.98262010103528552029672482603928074E-01), /* 3ffeff1c32bc77beb000000000000000 */ - L(9.98292475107267818223988342651864514E-01), /* 3ffeff2030f8db72b000000000000000 */ - L(9.98322941040739375573309644096298143E-01), /* 3ffeff242f3d3ba77000000000000000 */ - L(9.98353407903971645787066790944663808E-01), /* 3ffeff282d89986cf000000000000000 */ - L(9.98383875696992967307963340317655820E-01), /* 3ffeff2c2bddf1d32400000000000000 */ - L(9.98414344419831761845429696222709026E-01), /* 3ffeff302a3a47ea0c00000000000000 */ - L(9.98444814072516340086593800151604228E-01), /* 3ffeff34289e9ac19800000000000000 */ - L(9.98475284655075123740886056111776270E-01), /* 3ffeff38270aea69c800000000000000 */ - L(9.98505756167536479006585636852832977E-01), /* 3ffeff3c257f36f29400000000000000 */ - L(9.98536228609928799837547330753295682E-01), /* 3ffeff4023fb806bf800000000000000 */ - L(9.98566701982280452432050310562772211E-01), /* 3ffeff44227fc6e5ec00000000000000 */ - L(9.98597176284619802988373749030870385E-01), /* 3ffeff48210c0a706800000000000000 */ - L(9.98627651516975245460372434536111541E-01), /* 3ffeff4c1fa04b1b6800000000000000 */ - L(9.98658127679375173801901155457017012E-01), /* 3ffeff501e3c88f6e800000000000000 */ - L(9.98688604771847954211239084543194622E-01), /* 3ffeff541ce0c412e000000000000000 */ - L(9.98719082794421980642241010173165705E-01), /* 3ffeff581b8cfc7f4c00000000000000 */ - L(9.98749561747125619293186105096538085E-01), /* 3ffeff5c1a41324c2400000000000000 */ - L(9.98780041629987291873504773320746608E-01), /* 3ffeff6018fd65896800000000000000 */ - L(9.98810522443035364581476187595399097E-01), /* 3ffeff6417c196471000000000000000 */ - L(9.98841004186298203615379520670103375E-01), /* 3ffeff68168dc4951400000000000000 */ - L(9.98871486859804230684645176552294288E-01), /* 3ffeff6c1561f0837400000000000000 */ - L(9.98901970463581839743127943620493170E-01), /* 3ffeff70143e1a222c00000000000000 */ - L(9.98932454997659369233531378995394334E-01), /* 3ffeff74132241813000000000000000 */ - L(9.98962940462065268620861502313346136E-01), /* 3ffeff78120e66b08400000000000000 */ - L(9.98993426856827904103397486323956400E-01), /* 3ffeff7c110289c02000000000000000 */ - L(9.99023914181975669634994119405746460E-01), /* 3ffeff800ffeaac00000000000000000 */ - L(9.99054402437536959169506189937237650E-01), /* 3ffeff840f02c9c02000000000000000 */ - L(9.99084891623540138905212870668037795E-01), /* 3ffeff880e0ee6d07800000000000000 */ - L(9.99115381740013658307120181234495249E-01), /* 3ffeff8c0d2302010c00000000000000 */ - L(9.99145872786985911329082910015131347E-01), /* 3ffeff900c3f1b61d800000000000000 */ - L(9.99176364764485236413804614130640402E-01), /* 3ffeff940b633302d000000000000000 */ - L(9.99206857672540083026291313217370771E-01), /* 3ffeff980a8f48f3f800000000000000 */ - L(9.99237351511178817364822180024930276E-01), /* 3ffeff9c09c35d454800000000000000 */ - L(9.99267846280429861138827618560753763E-01), /* 3ffeffa008ff7006c000000000000000 */ - L(9.99298341980321608302162417203362565E-01), /* 3ffeffa4084381485c00000000000000 */ - L(9.99328838610882452808681364331278019E-01), /* 3ffeffa8078f911a1800000000000000 */ - L(9.99359336172140816367814863951934967E-01), /* 3ffeffac06e39f8bf400000000000000 */ - L(9.99389834664125092933417704443854745E-01), /* 3ffeffb0063facadec00000000000000 */ - L(9.99420334086863676459344674185558688E-01), /* 3ffeffb405a3b88ffc00000000000000 */ - L(9.99450834440384988655026177184481639E-01), /* 3ffeffb8050fc3422400000000000000 */ - L(9.99481335724717395718741386190231424E-01), /* 3ffeffbc0483ccd45c00000000000000 */ - L(9.99511837939889374871071936468069907E-01), /* 3ffeffc003ffd556ac00000000000000 */ - L(9.99542341085929264554721385138691403E-01), /* 3ffeffc40383dcd90800000000000000 */ - L(9.99572845162865514234695751838444266E-01), /* 3ffeffc8030fe36b7400000000000000 */ - L(9.99603350170726517864849824945849832E-01), /* 3ffeffcc02a3e91dec00000000000000 */ - L(9.99633856109540669399038392839429434E-01), /* 3ffeffd0023fee006c00000000000000 */ - L(9.99664362979336418302267475155531429E-01), /* 3ffeffd401e3f222f800000000000000 */ - L(9.99694870780142130772816244643763639E-01), /* 3ffeffd8018ff5958800000000000000 */ - L(9.99725379511986284031266336569387931E-01), /* 3ffeffdc0143f8682400000000000000 */ - L(9.99755889174897216520321308053098619E-01), /* 3ffeffe000fffaaac000000000000000 */ - L(9.99786399768903377704987178731244057E-01), /* 3ffeffe400c3fc6d6000000000000000 */ - L(9.99816911294033217050269968240172602E-01), /* 3ffeffe8008ffdc00800000000000000 */ - L(9.99847423750315072998873233700578567E-01), /* 3ffeffec0063feb2ac00000000000000 */ - L(9.99877937137777450526954226006637327E-01), /* 3ffefff0003fff555800000000000000 */ - L(9.99908451456448688077216502279043198E-01), /* 3ffefff40023ffb80000000000000000 */ - L(9.99938966706357262870241697783058044E-01), /* 3ffefff8000fffeaac00000000000000 */ - L(9.99969482887531541104308985268289689E-01), /* 3ffefffc0003fffd5400000000000000 */ -#define T_EXPL_RES2 (T_EXPL_RES1 + 1 + 89 + 65) - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - L(1.00003051804379100575559391472779680E+00), /* 3fff0002000200015400000000000000 */ - L(1.00006103701893306334724798034585547E+00), /* 3fff00040008000aac00000000000000 */ - L(1.00009155692545448346209013834595680E+00), /* 3fff0006001200240000000000000000 */ - L(1.00012207776338379883185325525118969E+00), /* 3fff0008002000555800000000000000 */ - L(1.00015259953274932014366527255333494E+00), /* 3fff000a003200a6ac00000000000000 */ - L(1.00018312223357958012925905677548144E+00), /* 3fff000c004801200400000000000000 */ - L(1.00021364586590294498691378066723701E+00), /* 3fff000e006201c95c00000000000000 */ - L(1.00024417042974783642605984823603649E+00), /* 3fff0010008002aab400000000000000 */ - L(1.00027469592514273166727889474714175E+00), /* 3fff001200a203cc1000000000000000 */ - L(1.00030522235211605242000132420798764E+00), /* 3fff001400c805357000000000000000 */ - L(1.00033574971069616488250630936818197E+00), /* 3fff001600f206eed000000000000000 */ - L(1.00036627800091160178652671675081365E+00), /* 3fff0018012009003800000000000000 */ - L(1.00039680722279067381919048784766346E+00), /* 3fff001a01520b71a000000000000000 */ - L(1.00042733737636191371223048918182030E+00), /* 3fff001c01880e4b1000000000000000 */ - L(1.00045786846165368766392589350289200E+00), /* 3fff001e01c211948400000000000000 */ - L(1.00048840047869447289485833607614040E+00), /* 3fff0020020015560000000000000000 */ - L(1.00051893342751269111445822090900037E+00), /* 3fff0022024219978400000000000000 */ - L(1.00054946730813676403215595200890675E+00), /* 3fff002402881e611000000000000000 */ - L(1.00058000212059516886853316464112140E+00), /* 3fff002602d223baa800000000000000 */ - L(1.00061053786491632733302026281307917E+00), /* 3fff0028032029ac4c00000000000000 */ - L(1.00064107454112866113504765053221490E+00), /* 3fff002a0372303dfc00000000000000 */ - L(1.00067161214926059198404573180596344E+00), /* 3fff002c03c83777b800000000000000 */ - L(1.00070215068934059710059614189958666E+00), /* 3fff002e04223f618400000000000000 */ - L(1.00073269016139709819412928482051939E+00), /* 3fff0030048048036000000000000000 */ - L(1.00076323056545857248522679583402351E+00), /* 3fff003204e251655000000000000000 */ - L(1.00079377190155338617216784768970683E+00), /* 3fff003405485b8f5000000000000000 */ - L(1.00082431416971007198668530691065826E+00), /* 3fff003605b266896800000000000000 */ - L(1.00085485736995705163820957750431262E+00), /* 3fff00380620725b9800000000000000 */ - L(1.00088540150232269132501983222027775E+00), /* 3fff003a06927f0ddc00000000000000 */ - L(1.00091594656683552377884893758164253E+00), /* 3fff003c07088ca83c00000000000000 */ - L(1.00094649256352402622027852885366883E+00), /* 3fff003e07829b32bc00000000000000 */ - L(1.00097703949241650933643654752813745E+00), /* 3fff00400800aab55400000000000000 */ - L(1.00100758735354156137020709138596430E+00), /* 3fff00420882bb381000000000000000 */ - L(1.00103813614692760403102056443458423E+00), /* 3fff00440908ccc2f000000000000000 */ - L(1.00106868587260300351715613942360505E+00), /* 3fff00460992df5df000000000000000 */ - L(1.00109923653059629256034668287611566E+00), /* 3fff00480a20f3111800000000000000 */ - L(1.00112978812093589287002259879955091E+00), /* 3fff004a0ab307e46800000000000000 */ - L(1.00116034064365022615561429120134562E+00), /* 3fff004c0b491ddfe000000000000000 */ - L(1.00119089409876788066000585786241572E+00), /* 3fff004e0be3350b8c00000000000000 */ - L(1.00122144848631711155917400901671499E+00), /* 3fff00500c814d6f6000000000000000 */ - L(1.00125200380632656260715407370298635E+00), /* 3fff00520d2367136c00000000000000 */ - L(1.00128256005882454449107399341301061E+00), /* 3fff00540dc981ffa800000000000000 */ - L(1.00131311724383964545381786592770368E+00), /* 3fff00560e739e3c2000000000000000 */ - L(1.00134367536140017618251363273884635E+00), /* 3fff00580f21bbd0cc00000000000000 */ - L(1.00137423441153472492004539162735455E+00), /* 3fff005a0fd3dac5b800000000000000 */ - L(1.00140479439427171337584354660066310E+00), /* 3fff005c1089fb22e400000000000000 */ - L(1.00143535530963956325933850166620687E+00), /* 3fff005e11441cf05000000000000000 */ - L(1.00146591715766680730226312334707472E+00), /* 3fff0060120240360400000000000000 */ - L(1.00149647993838186721404781565070152E+00), /* 3fff006212c464fc0000000000000000 */ - L(1.00152704365181316470412298258452211E+00), /* 3fff0064138a8b4a4400000000000000 */ - L(1.00155760829798923250422149067162536E+00), /* 3fff00661454b328d800000000000000 */ - L(1.00158817387693849232377374391944613E+00), /* 3fff00681522dc9fbc00000000000000 */ - L(1.00161874038868942138336137759324629E+00), /* 3fff006a15f507b6f400000000000000 */ - L(1.00164930783327055241471725821611471E+00), /* 3fff006c16cb34768800000000000000 */ - L(1.00167987621071025161612055853765924E+00), /* 3fff006e17a562e67400000000000000 */ - L(1.00171044552103705171930414508096874E+00), /* 3fff00701883930ec000000000000000 */ - L(1.00174101576427937443369842185347807E+00), /* 3fff00721965c4f76c00000000000000 */ - L(1.00177158694046569697988502412044909E+00), /* 3fff00741a4bf8a87c00000000000000 */ - L(1.00180215904962455208959681840497069E+00), /* 3fff00761b362e29f800000000000000 */ - L(1.00183273209178441698341543997230474E+00), /* 3fff00781c246583e400000000000000 */ - L(1.00186330606697365785962006157205906E+00), /* 3fff007a1d169ebe3c00000000000000 */ - L(1.00189388097522080744994354972732253E+00), /* 3fff007c1e0cd9e10800000000000000 */ - L(1.00192445681655439848611877096118405E+00), /* 3fff007e1f0716f45000000000000000 */ - L(1.00195503359100279716642489802325144E+00), /* 3fff0080200556001000000000000000 */ - L(1.00198561129859459173374602869444061E+00), /* 3fff00822107970c5400000000000000 */ -}; diff --git a/sysdeps/ieee754/ldbl-128/t_sincosl.c b/sysdeps/ieee754/ldbl-128/t_sincosl.c deleted file mode 100644 index 601662c399..0000000000 --- a/sysdeps/ieee754/ldbl-128/t_sincosl.c +++ /dev/null @@ -1,696 +0,0 @@ -/* Quad-precision floating point sine and cosine tables. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* For 0.1484375 + n/128.0, n=0..82 this table contains - first 113 bits of cosine, then at least 113 additional - bits and the same for sine. - 0.1484375+82.0/128.0 is the smallest number among above defined numbers - larger than pi/4. - Computed using gmp. - */ - -/* Include to grab typedefs and wrappers for _Float128 and such. */ -#include - -const _Float128 __sincosl_table[] = { - -/* x = 1.48437500000000000000000000000000000e-01L 3ffc3000000000000000000000000000 */ -/* cos(x) = 0.fd2f5320e1b790209b4dda2f98f79caaa7b873aff1014b0fbc5243766d03cb006bc837c4358 */ - L(9.89003367927322909016887196069562069e-01), /* 3ffefa5ea641c36f2041369bb45f31ef */ - L(2.15663692029265697782289400027743703e-35), /* 3f8bcaaa7b873aff1014b0fbc5243767 */ -/* sin(x) = 0.25dc50bc95711d0d9787d108fd438cf5959ee0bfb7a1e36e8b1a112968f356657420e9cc9ea */ - L(1.47892995873409608580026675734609314e-01), /* 3ffc2ee285e4ab88e86cbc3e8847ea1c */ - L(9.74950446464233268291647449768590886e-36), /* 3f8a9eb2b3dc17f6f43c6dd16342252d */ - -/* x = 1.56250000000000000000000000000000000e-01 3ffc4000000000000000000000000000 */ -/* cos(x) = 0.fce1a053e621438b6d60c76e8c45bf0a9dc71aa16f922acc10e95144ec796a249813c9cb649 */ - L(9.87817783816471944100503034363211317e-01), /* 3ffef9c340a7cc428716dac18edd188b */ - L(4.74271307836705897892468107620526395e-35), /* 3f8cf854ee38d50b7c915660874a8a27 */ -/* sin(x) = 0.27d66258bacd96a3eb335b365c87d59438c5142bb56a489e9b8db9d36234ffdebb6bdc22d8e */ - L(1.55614992773556041209920643203516258e-01), /* 3ffc3eb312c5d66cb51f599ad9b2e43f */ -L(-7.83989563419287980121718050629497270e-36), /* bf8a4d78e75d7a8952b6ec2c8e48c594 */ - -/* x = 1.64062500000000000000000000000000000e-01 3ffc5000000000000000000000000000 */ -/* cos(x) = 0.fc8ffa01ba6807417e05962b0d9fdf1fddb0cc4c07d22e19e08019bffa50a6c7acdb40307a3 */ - L(9.86571908399497588757337407495308409e-01), /* 3ffef91ff40374d00e82fc0b2c561b40 */ -L(-2.47327949936985362476252401212720725e-35), /* bf8c070112799d9fc16e8f30fbff3200 */ -/* sin(x) = 0.29cfd49b8be4f665276cab01cbf0426934906c3dd105473b226e410b1450f62e53ff7c6cce1 */ - L(1.63327491736612850846866172454354370e-01), /* 3ffc4e7ea4dc5f27b3293b65580e5f82 */ - L(1.81380344301155485770367902300754350e-36), /* 3f88349a48361ee882a39d913720858a */ - -/* x = 1.71875000000000000000000000000000000e-01 3ffc6000000000000000000000000000 */ -/* cos(x) = 0.fc3a6170f767ac735d63d99a9d439e1db5e59d3ef153a4265d5855850ed82b536bf361b80e3 */ - L(9.85265817718213816204294709759578994e-01), /* 3ffef874c2e1eecf58e6bac7b3353a87 */ - L(2.26568029505818066141517497778527952e-35), /* 3f8be1db5e59d3ef153a4265d5855851 */ -/* sin(x) = 0.2bc89f9f424de5485de7ce03b2514952b9faf5648c3244d4736feb95dbb9da49f3b58a9253b */ - L(1.71030022031395019281347969239834331e-01), /* 3ffc5e44fcfa126f2a42ef3e701d928a */ - L(7.01395875187487608875416030203241317e-36), /* 3f8a2a573f5eac9186489a8e6dfd72bb */ - -/* x = 1.79687500000000000000000000000000000e-01 3ffc7000000000000000000000000000 */ -/* cos(x) = 0.fbe0d7f7fef11e70aa43b8abf4f6a457cea20c8f3f676b47781f9821bbe9ce04b3c7b981c0b */ - L(9.83899591489663972178309351416487245e-01), /* 3ffef7c1afeffde23ce154877157e9ed */ - L(2.73414318948066207810486330723761265e-35), /* 3f8c22be75106479fb3b5a3bc0fcc10e */ -/* sin(x) = 0.2dc0bb80b49a97ffb34e8dd1f8db9df7af47ed2dcf58b12c8e7827e048cae929da02c04ecac */ - L(1.78722113535153659375356241864180724e-01), /* 3ffc6e05dc05a4d4bffd9a746e8fc6dd */ -L(-1.52906926517265103202547561260594148e-36), /* bf8804285c09691853a769b8c3ec0fdc */ - -/* x = 1.87500000000000000000000000000000000e-01 3ffc8000000000000000000000000000 */ -/* cos(x) = 0.fb835efcf670dd2ce6fe7924697eea13ea358867e9cdb3899b783f4f9f43aa5626e8b67b3bc */ - L(9.82473313101255257487327683243622495e-01), /* 3ffef706bdf9ece1ba59cdfcf248d2fe */ -L(-1.64924358891557584625463868014230342e-35), /* bf8b5ec15ca779816324c766487c0b06 */ -/* sin(x) = 0.2fb8205f75e56a2b56a1c4792f856258769af396e0189ef72c05e4df59a6b00e4b44a6ea515 */ - L(1.86403296762269884552379983103205261e-01), /* 3ffc7dc102fbaf2b515ab50e23c97c2b */ - L(1.76460304806826780010586715975331753e-36), /* 3f882c3b4d79cb700c4f7b9602f26fad */ - -/* x = 1.95312500000000000000000000000000000e-01 3ffc9000000000000000000000000000 */ -/* cos(x) = 0.fb21f7f5c156696b00ac1fe28ac5fd76674a92b4df80d9c8a46c684399005deccc41386257c */ - L(9.80987069605669190469329896435309665e-01), /* 3ffef643efeb82acd2d601583fc5158c */ -L(-1.90899259410096419886996331536278461e-36), /* bf8844cc5ab6a5903f931badc9cbde34 */ -/* sin(x) = 0.31aec65df552876f82ece9a2356713246eba6799983d7011b0b3698d6e1da919c15d57c30c1 */ - L(1.94073102892909791156055200214145404e-01), /* 3ffc8d7632efaa943b7c17674d11ab39 */ -L(-9.67304741051998267208945242944928999e-36), /* bf8a9b7228b30cccf851fdc9e992ce52 */ - -/* x = 2.03125000000000000000000000000000000e-01 3ffca000000000000000000000000000 */ -/* cos(x) = 0.fabca467fb3cb8f1d069f01d8ea33ade5bfd68296ecd1cc9f7b7609bbcf3676e726c3301334 */ - L(9.79440951715548359998530954502987493e-01), /* 3ffef57948cff67971e3a0d3e03b1d46 */ - L(4.42878056591560757066844797290067990e-35), /* 3f8cd6f2dfeb414b7668e64fbdbb04de */ -/* sin(x) = 0.33a4a5a19d86246710f602c44df4fa513f4639ce938477aeeabb82e8e0a7ed583a188879fd4 */ - L(2.01731063801638804725038151164000971e-01), /* 3ffc9d252d0cec31233887b016226fa8 */ -L(-4.27513434754966978435151290617384120e-36), /* bf896bb02e718c5b1ee21445511f45c8 */ - -/* x = 2.10937500000000000000000000000000000e-01 3ffcb000000000000000000000000000 */ -/* cos(x) = 0.fa5365e8f1d3ca27be1db5d76ae64d983d7470a4ab0f4ccf65a2b8c67a380df949953a09bc1 */ - L(9.77835053797959793331971572944454549e-01), /* 3ffef4a6cbd1e3a7944f7c3b6baed5cd */ -L(-3.79207422905180416937210853779192702e-35), /* bf8c933e145c7adaa7859984d2ea39cc */ -/* sin(x) = 0.3599b652f40ec999df12a0a4c8561de159c98d4e54555de518b97f48886f715d8df5f4f093e */ - L(2.09376712085993643711890752724881652e-01), /* 3ffcaccdb297a0764ccef895052642b1 */ -L(-1.59470287344329449965314638482515925e-36), /* bf880f531b3958d5d5510d73a3405bbc */ - -/* x = 2.18750000000000000000000000000000000e-01 3ffcc000000000000000000000000000 */ -/* cos(x) = 0.f9e63e1d9e8b6f6f2e296bae5b5ed9c11fd7fa2fe11e09fc7bde901abed24b6365e72f7db4e */ - L(9.76169473868635276723989035435135534e-01), /* 3ffef3cc7c3b3d16dede5c52d75cb6be */ -L(-2.87727974249481583047944860626985460e-35), /* bf8c31f701402e80f70fb01c210b7f2a */ -/* sin(x) = 0.378df09db8c332ce0d2b53d865582e4526ea336c768f68c32b496c6d11c1cd241bb9f1da523 */ - L(2.17009581095010156760578095826055396e-01), /* 3ffcbc6f84edc6199670695a9ec32ac1 */ - L(1.07356488794216831812829549198201194e-35), /* 3f8ac8a4dd466d8ed1ed1865692d8da2 */ - -/* x = 2.26562500000000000000000000000000000e-01 3ffcd000000000000000000000000000 */ -/* cos(x) = 0.f9752eba9fff6b98842beadab054a932fb0f8d5b875ae63d6b2288d09b148921aeb6e52f61b */ - L(9.74444313585988980349711056045434344e-01), /* 3ffef2ea5d753ffed7310857d5b560a9 */ - L(3.09947905955053419304514538592548333e-35), /* 3f8c4997d87c6adc3ad731eb59144685 */ -/* sin(x) = 0.39814cb10513453cb97b21bc1ca6a337b150c21a675ab85503bc09a436a10ab1473934e20c8 */ - L(2.24629204957705292350428549796424820e-01), /* 3ffccc0a6588289a29e5cbd90de0e535 */ - L(2.42061510849297469844695751870058679e-36), /* 3f889bd8a8610d33ad5c2a81de04d21b */ - -/* x = 2.34375000000000000000000000000000000e-01 3ffce000000000000000000000000000 */ -/* cos(x) = 0.f90039843324f9b940416c1984b6cbed1fc733d97354d4265788a86150493ce657cae032674 */ - L(9.72659678244912752670913058267565260e-01), /* 3ffef20073086649f3728082d833096e */ -L(-3.91759231819314904966076958560252735e-35), /* bf8ca09701c6613465595ecd43babcf5 */ -/* sin(x) = 0.3b73c2bf6b4b9f668ef9499c81f0d965087f1753fa64b086e58cb8470515c18c1412f8c2e02 */ - L(2.32235118611511462413930877746235872e-01), /* 3ffcdb9e15fb5a5cfb3477ca4ce40f87 */ -L(-4.96930483364191020075024624332928910e-36), /* bf89a6bde03a2b0166d3de469cd1ee3f */ - -/* x = 2.42187500000000000000000000000000000e-01 3ffcf000000000000000000000000000 */ -/* cos(x) = 0.f887604e2c39dbb20e4ec5825059a789ffc95b275ad9954078ba8a28d3fcfe9cc2c1d49697b */ - L(9.70815676770349462947490545785046027e-01), /* 3ffef10ec09c5873b7641c9d8b04a0b3 */ - L(2.97458820972393859125277682021202860e-35), /* 3f8c3c4ffe4ad93ad6ccaa03c5d45147 */ -/* sin(x) = 0.3d654aff15cb457a0fca854698aba33039a8a40626609204472d9d40309b626eccc6dff0ffa */ - L(2.39826857830661564441369251810886574e-01), /* 3ffceb2a57f8ae5a2bd07e542a34c55d */ - L(2.39867036569896287240938444445071448e-36), /* 3f88981cd45203133049022396cea018 */ - -/* x = 2.50000000000000000000000000000000000e-01 3ffd0000000000000000000000000000 */ -/* cos(x) = 0.f80aa4fbef750ba783d33cb95f94f8a41426dbe79edc4a023ef9ec13c944551c0795b84fee1 */ - L(9.68912421710644784144595449494189205e-01), /* 3ffef01549f7deea174f07a67972bf2a */ -L(-5.53634706113461989398873287749326500e-36), /* bf89d6faf649061848ed7f704184fb0e */ -/* sin(x) = 0.3f55dda9e62aed7513bd7b8e6a3d1635dd5676648d7db525898d7086af9330f03c7f285442a */ - L(2.47403959254522929596848704849389203e-01), /* 3ffcfaaeed4f31576ba89debdc7351e9 */ -L(-7.36487001108599532943597115275811618e-36), /* bf8a39445531336e50495b4ece51ef2a */ - -/* x = 2.57812500000000000000000000000000000e-01 3ffd0800000000000000000000000000 */ -/* cos(x) = 0.f78a098069792daabc9ee42591b7c5a68cb1ab822aeb446b3311b4ba5371b8970e2c1547ad7 */ - L(9.66950029230677822008341623610531503e-01), /* 3ffeef141300d2f25b55793dc84b2370 */ -L(-4.38972214432792412062088059990480514e-35), /* bf8cd2cb9a72a3eea8a5dca667725a2d */ -/* sin(x) = 0.414572fd94556e6473d620271388dd47c0ba050cdb5270112e3e370e8c4705ae006426fb5d5 */ - L(2.54965960415878467487556574864872628e-01), /* 3ffd0515cbf65155b991cf58809c4e23 */ - L(2.20280377918534721005071688328074154e-35), /* 3f8bd47c0ba050cdb5270112e3e370e9 */ - -/* x = 2.65625000000000000000000000000000000e-01 3ffd1000000000000000000000000000 */ -/* cos(x) = 0.f7058fde0788dfc805b8fe88789e4f4253e3c50afe8b22f41159620ab5940ff7df9557c0d1f */ - L(9.64928619104771009581074665315748371e-01), /* 3ffeee0b1fbc0f11bf900b71fd10f13d */ -L(-3.66685832670820775002475545602761113e-35), /* bf8c85ed60e1d7a80ba6e85f7534efaa */ -/* sin(x) = 0.4334033bcd90d6604f5f36c1d4b84451a87150438275b77470b50e5b968fa7962b5ffb379b7 */ - L(2.62512399769153281450949626395692931e-01), /* 3ffd0cd00cef364359813d7cdb0752e1 */ - L(3.24923677072031064673177178571821843e-36), /* 3f89146a1c5410e09d6ddd1c2d4396e6 */ - -/* x = 2.73437500000000000000000000000000000e-01 3ffd1800000000000000000000000000 */ -/* cos(x) = 0.f67d3a26af7d07aa4bd6d42af8c0067fefb96d5b46c031eff53627f215ea3242edc3f2e13eb */ - L(9.62848314709379699899701093480214365e-01), /* 3ffeecfa744d5efa0f5497ada855f180 */ - L(4.88986966383343450799422013051821394e-36), /* 3f899ffbee5b56d1b00c7bfd4d89fc85 */ -/* sin(x) = 0.452186aa5377ab20bbf2524f52e3a06a969f47166ab88cf88c111ad12c55941021ef3317a1a */ - L(2.70042816718585031552755063618827102e-01), /* 3ffd14861aa94ddeac82efc9493d4b8f */ -L(-2.37608892440611310321138680065803162e-35), /* bf8bf956960b8e99547730773eee52ed */ - -/* x = 2.81250000000000000000000000000000000e-01 3ffd2000000000000000000000000000 */ -/* cos(x) = 0.f5f10a7bb77d3dfa0c1da8b57842783280d01ce3c0f82bae3b9d623c168d2e7c29977994451 */ - L(9.60709243015561903066659350581313472e-01), /* 3ffeebe214f76efa7bf4183b516af085 */ -L(-5.87011558231583960712013351601221840e-36), /* bf89f35fcbf8c70fc1f5147118a770fa */ -/* sin(x) = 0.470df5931ae1d946076fe0dcff47fe31bb2ede618ebc607821f8462b639e1f4298b5ae87fd3 */ - L(2.77556751646336325922023446828128568e-01), /* 3ffd1c37d64c6b8765181dbf8373fd20 */ -L(-1.35848595468998128214344668770082997e-36), /* bf87ce44d1219e71439f87de07b9d49c */ - -/* x = 2.89062500000000000000000000000000000e-01 3ffd2800000000000000000000000000 */ -/* cos(x) = 0.f561030ddd7a78960ea9f4a32c6521554995667f5547bafee9ec48b3155cdb0f7fd00509713 */ - L(9.58511534581228627301969408154919822e-01), /* 3ffeeac2061bbaf4f12c1d53e94658ca */ - L(2.50770779371636481145735089393154404e-35), /* 3f8c0aaa4cab33faaa3dd7f74f624599 */ -/* sin(x) = 0.48f948446abcd6b0f7fccb100e7a1b26eccad880b0d24b59948c7cdd49514d44b933e6985c2 */ - L(2.85053745940547424587763033323252561e-01), /* 3ffd23e52111aaf35ac3dff32c4039e8 */ - L(2.04269325885902918802700123680403749e-35), /* 3f8bb26eccad880b0d24b59948c7cdd5 */ - -/* x = 2.96875000000000000000000000000000000e-01 3ffd3000000000000000000000000000 */ -/* cos(x) = 0.f4cd261d3e6c15bb369c8758630d2ac00b7ace2a51c0631bfeb39ed158ba924cc91e259c195 */ - L(9.56255323543175296975599942263028361e-01), /* 3ffee99a4c3a7cd82b766d390eb0c61a */ - L(3.21616572190865997051103645135837207e-35), /* 3f8c56005bd671528e0318dff59cf68b */ -/* sin(x) = 0.4ae37710fad27c8aa9c4cf96c03519b9ce07dc08a1471775499f05c29f86190aaebaeb9716e */ - L(2.92533342023327543624702326493913423e-01), /* 3ffd2b8ddc43eb49f22aa7133e5b00d4 */ - L(1.93539408668704450308003687950685128e-35), /* 3f8b9b9ce07dc08a1471775499f05c2a */ - -/* x = 3.04687500000000000000000000000000000e-01 3ffd3800000000000000000000000000 */ -/* cos(x) = 0.f43575f94d4f6b272f5fb76b14d2a64ab52df1ee8ddf7c651034e5b2889305a9ea9015d758a */ - L(9.53940747608894733981324795987611623e-01), /* 3ffee86aebf29a9ed64e5ebf6ed629a5 */ - L(2.88075689052478602008395972924657164e-35), /* 3f8c3255a96f8f746efbe32881a72d94 */ -/* sin(x) = 0.4ccc7a50127e1de0cb6b40c302c651f7bded4f9e7702b0471ae0288d091a37391950907202f */ - L(2.99995083378683051163248282011699944e-01), /* 3ffd3331e94049f877832dad030c0b19 */ - L(1.35174265535697850139283361475571050e-35), /* 3f8b1f7bded4f9e7702b0471ae0288d1 */ - -/* x = 3.12500000000000000000000000000000000e-01 3ffd4000000000000000000000000000 */ -/* cos(x) = 0.f399f500c9e9fd37ae9957263dab8877102beb569f101ee4495350868e5847d181d50d3cca2 */ - L(9.51567948048172202145488217364270962e-01), /* 3ffee733ea0193d3fa6f5d32ae4c7b57 */ - L(6.36842628598115658308749288799884606e-36), /* 3f8a0ee2057d6ad3e203dc892a6a10d2 */ -/* sin(x) = 0.4eb44a5da74f600207aaa090f0734e288603ffadb3eb2542a46977b105f8547128036dcf7f0 */ - L(3.07438514580380850670502958201982091e-01), /* 3ffd3ad129769d3d80081eaa8243c1cd */ - L(1.06515172423204645839241099453417152e-35), /* 3f8ac510c07ff5b67d64a8548d2ef621 */ - -/* x = 3.20312500000000000000000000000000000e-01 3ffd4800000000000000000000000000 */ -/* cos(x) = 0.f2faa5a1b74e82fd61fa05f9177380e8e69b7b15a945e8e5ae1124bf3d12b0617e03af4fab5 */ - L(9.49137069684463027665847421762105623e-01), /* 3ffee5f54b436e9d05fac3f40bf22ee7 */ - L(6.84433965991637152250309190468859701e-37), /* 3f86d1cd36f62b528bd1cb5c22497e7a */ -/* sin(x) = 0.509adf9a7b9a5a0f638a8fa3a60a199418859f18b37169a644fdb986c21ecb00133853bc35b */ - L(3.14863181319745250865036315126939016e-01), /* 3ffd426b7e69ee69683d8e2a3e8e9828 */ - L(1.92431240212432926993057705062834160e-35), /* 3f8b99418859f18b37169a644fdb986c */ - -/* x = 3.28125000000000000000000000000000000e-01 3ffd5000000000000000000000000000 */ -/* cos(x) = 0.f2578a595224dd2e6bfa2eb2f99cc674f5ea6f479eae2eb580186897ae3f893df1113ca06b8 */ - L(9.46648260886053321846099507295532976e-01), /* 3ffee4af14b2a449ba5cd7f45d65f33a */ -L(-4.32906339663000890941529420498824645e-35), /* bf8ccc5850ac85c30a8e8a53ff3cbb43 */ -/* sin(x) = 0.5280326c3cf481823ba6bb08eac82c2093f2bce3c4eb4ee3dec7df41c92c8a4226098616075 */ - L(3.22268630433386625687745919893188031e-01), /* 3ffd4a00c9b0f3d20608ee9aec23ab21 */ -L(-1.49505897804759263483853908335500228e-35), /* bf8b3df6c0d431c3b14b11c213820be3 */ - -/* x = 3.35937500000000000000000000000000000e-01 3ffd5800000000000000000000000000 */ -/* cos(x) = 0.f1b0a5b406b526d886c55feadc8d0dcc8eb9ae2ac707051771b48e05b25b000009660bdb3e3 */ - L(9.44101673557004345630017691253124860e-01), /* 3ffee3614b680d6a4db10d8abfd5b91a */ - L(1.03812535240120229609822461172145584e-35), /* 3f8ab991d735c558e0e0a2ee3691c0b6 */ -/* sin(x) = 0.54643b3da29de9b357155eef0f332fb3e66c83bf4dddd9491c5eb8e103ccd92d6175220ed51 */ - L(3.29654409930860171914317725126463176e-01), /* 3ffd5190ecf68a77a6cd5c557bbc3ccd */ -L(-1.22606996784743214973082192294232854e-35), /* bf8b04c19937c40b22226b6e3a1471f0 */ - -/* x = 3.43750000000000000000000000000000000e-01 3ffd6000000000000000000000000000 */ -/* cos(x) = 0.f105fa4d66b607a67d44e042725204435142ac8ad54dfb0907a4f6b56b06d98ee60f19e557a */ - L(9.41497463127881068644511236053670815e-01), /* 3ffee20bf49acd6c0f4cfa89c084e4a4 */ - L(3.20709366603165602071590241054884900e-36), /* 3f8910d450ab22b5537ec241e93dad5b */ -/* sin(x) = 0.5646f27e8bd65cbe3a5d61ff06572290ee826d9674a00246b05ae26753cdfc90d9ce81a7d02 */ - L(3.37020069022253076261281754173810024e-01), /* 3ffd591bc9fa2f5972f8e97587fc195d */ -L(-2.21435756148839473677777545049890664e-35), /* bf8bd6f117d92698b5ffdb94fa51d98b */ - -/* x = 3.51562500000000000000000000000000000e-01 3ffd6800000000000000000000000000 */ -/* cos(x) = 0.f0578ad01ede707fa39c09dc6b984afef74f3dc8d0efb0f4c5a6b13771145b3e0446fe33887 */ - L(9.38835788546265488632578305984712554e-01), /* 3ffee0af15a03dbce0ff473813b8d731 */ -L(-3.98758068773974031348585072752245458e-35), /* bf8ca808458611b978827859d2ca7644 */ -/* sin(x) = 0.582850a41e1dd46c7f602ea244cdbbbfcdfa8f3189be794dda427ce090b5f85164f1f80ac13 */ - L(3.44365158145698408207172046472223747e-01), /* 3ffd60a14290787751b1fd80ba891337 */ -L(-3.19791885005480924937758467594051927e-36), /* bf89100c815c339d9061ac896f60c7dc */ - -/* x = 3.59375000000000000000000000000000000e-01 3ffd7000000000000000000000000000 */ -/* cos(x) = 0.efa559f5ec3aec3a4eb03319278a2d41fcf9189462261125fe6147b078f1daa0b06750a1654 */ - L(9.36116812267055290294237411019508588e-01), /* 3ffedf4ab3ebd875d8749d6066324f14 */ - L(3.40481591236710658435409862439032162e-35), /* 3f8c6a0fe7c8c4a31130892ff30a3d84 */ -/* sin(x) = 0.5a084e28e35fda2776dfdbbb5531d74ced2b5d17c0b1afc4647529d50c295e36d8ceec126c1 */ - L(3.51689228994814059222584896955547016e-01), /* 3ffd682138a38d7f689ddb7f6eed54c7 */ - L(1.75293433418270210567525412802083294e-35), /* 3f8b74ced2b5d17c0b1afc4647529d51 */ - -/* x = 3.67187500000000000000000000000000000e-01 3ffd7800000000000000000000000000 */ -/* cos(x) = 0.eeef6a879146af0bf9b95ea2ea0ac0d3e2e4d7e15d93f48cbd41bf8e4fded40bef69e19eafa */ - L(9.33340700242548435655299229469995527e-01), /* 3ffeddded50f228d5e17f372bd45d416 */ -L(-4.75255707251679831124800898831382223e-35), /* bf8cf960e8d940f513605b9a15f2038e */ -/* sin(x) = 0.5be6e38ce8095542bc14ee9da0d36483e6734bcab2e07624188af5653f114eeb46738fa899d */ - L(3.58991834546065053677710299152868941e-01), /* 3ffd6f9b8e33a025550af053ba76834e */ -L(-2.06772389262723368139416970257112089e-35), /* bf8bb7c198cb4354d1f89dbe7750a9ac */ - -/* x = 3.75000000000000000000000000000000000e-01 3ffd8000000000000000000000000000 */ -/* cos(x) = 0.ee35bf5ccac89052cd91ddb734d3a47e262e3b609db604e217053803be0091e76daf28a89b7 */ - L(9.30507621912314291149476792229555481e-01), /* 3ffedc6b7eb9959120a59b23bb6e69a7 */ - L(2.74541088551732982573335285685416092e-35), /* 3f8c23f13171db04edb02710b829c01e */ -/* sin(x) = 0.5dc40955d9084f48a94675a2498de5d851320ff5528a6afb3f2e24de240fce6cbed1ba0ccd6 */ - L(3.66272529086047561372909351716264177e-01), /* 3ffd7710255764213d22a519d6892638 */ -L(-1.96768433534936592675897818253108989e-35), /* bf8ba27aecdf00aad759504c0d1db21e */ - -/* x = 3.82812500000000000000000000000000000e-01 3ffd8800000000000000000000000000 */ -/* cos(x) = 0.ed785b5c44741b4493c56bcb9d338a151c6f6b85d8f8aca658b28572c162b199680eb9304da */ - L(9.27617750192851909628030798799961350e-01), /* 3ffedaf0b6b888e83689278ad7973a67 */ - L(7.58520371916345756281201167126854712e-36), /* 3f8a42a38ded70bb1f1594cb1650ae58 */ -/* sin(x) = 0.5f9fb80f21b53649c432540a50e22c53057ff42ae0fdf1307760dc0093f99c8efeb2fbd7073 */ - L(3.73530868238692946416839752660848112e-01), /* 3ffd7e7ee03c86d4d92710c950294389 */ -L(-1.48023494778986556048879113411517128e-35), /* bf8b3acfa800bd51f020ecf889f23ff7 */ - -/* x = 3.90625000000000000000000000000000000e-01 3ffd9000000000000000000000000000 */ -/* cos(x) = 0.ecb7417b8d4ee3fec37aba4073aa48f1f14666006fb431d9671303c8100d10190ec8179c41d */ - L(9.24671261467036098502113014560138771e-01), /* 3ffed96e82f71a9dc7fd86f57480e755 */ -L(-4.14187124860031825108649347251175815e-35), /* bf8cb87075cccffc825e7134c767e1bf */ -/* sin(x) = 0.6179e84a09a5258a40e9b5face03e525f8b5753cd0105d93fe6298010c3458e84d75fe420e9 */ - L(3.80766408992390192057200703388896675e-01), /* 3ffd85e7a1282694962903a6d7eb3810 */ -L(-2.02009541175208636336924533372496107e-35), /* bf8bada074a8ac32fefa26c019d67fef */ - -/* x = 3.98437500000000000000000000000000000e-01 3ffd9800000000000000000000000000 */ -/* cos(x) = 0.ebf274bf0bda4f62447e56a093626798d3013b5942b1abfd155aacc9dc5c6d0806a20d6b9c1 */ - L(9.21668335573351918175411368202712714e-01), /* 3ffed7e4e97e17b49ec488fcad4126c5 */ -L(-1.83587995433957622948710263541479322e-35), /* bf8b8672cfec4a6bd4e5402eaa553362 */ -/* sin(x) = 0.6352929dd264bd44a02ea766325d8aa8bd9695fc8def3caefba5b94c9a3c873f7b2d3776ead */ - L(3.87978709727025046051079690813741960e-01), /* 3ffd8d4a4a774992f51280ba9d98c976 */ - L(8.01904783870935075844443278617586301e-36), /* 3f8a5517b2d2bf91bde795df74b72993 */ - -/* x = 4.06250000000000000000000000000000000e-01 3ffda000000000000000000000000000 */ -/* cos(x) = 0.eb29f839f201fd13b93796827916a78f15c85230a4e8ea4b21558265a14367e1abb4c30695a */ - L(9.18609155794918267837824977718549863e-01), /* 3ffed653f073e403fa27726f2d04f22d */ - L(2.97608282778274433460057745798409849e-35), /* 3f8c3c78ae429185274752590aac132d */ -/* sin(x) = 0.6529afa7d51b129631ec197c0a840a11d7dc5368b0a47956feb285caa8371c4637ef17ef01b */ - L(3.95167330240934236244832640419653657e-01), /* 3ffd94a6be9f546c4a58c7b065f02a10 */ - L(7.57560031388312550940040194042627704e-36), /* 3f8a423afb8a6d16148f2adfd650b955 */ - -/* x = 4.14062500000000000000000000000000000e-01 3ffda800000000000000000000000000 */ -/* cos(x) = 0.ea5dcf0e30cf03e6976ef0b1ec26515fba47383855c3b4055a99b5e86824b2cd1a691fdca7b */ - L(9.15493908848301228563917732180221882e-01), /* 3ffed4bb9e1c619e07cd2edde163d84d */ -L(-3.50775517955306954815090901168305659e-35), /* bf8c75022dc63e3d51e25fd52b3250bd */ -/* sin(x) = 0.66ff380ba0144109e39a320b0a3fa5fd65ea0585bcbf9b1a769a9b0334576c658139e1a1cbe */ - L(4.02331831777773111217105598880982387e-01), /* 3ffd9bfce02e805104278e68c82c28ff */ -L(-1.95678722882848174723569916504871563e-35), /* bf8ba029a15fa7a434064e5896564fcd */ - -/* x = 4.21875000000000000000000000000000000e-01 3ffdb000000000000000000000000000 */ -/* cos(x) = 0.e98dfc6c6be031e60dd3089cbdd18a75b1f6b2c1e97f79225202f03dbea45b07a5ec4efc062 */ - L(9.12322784872117846492029542047341734e-01), /* 3ffed31bf8d8d7c063cc1ba611397ba3 */ - L(7.86903886556373674267948132178845568e-36), /* 3f8a4eb63ed6583d2fef244a405e07b8 */ -/* sin(x) = 0.68d32473143327973bc712bcc4ccddc47630d755850c0655243b205934dc49ffed8eb76adcb */ - L(4.09471777053295066122694027011452236e-01), /* 3ffda34c91cc50cc9e5cef1c4af31333 */ - L(2.23945241468457597921655785729821354e-35), /* 3f8bdc47630d755850c0655243b20593 */ - -/* x = 4.29687500000000000000000000000000000e-01 3ffdb800000000000000000000000000 */ -/* cos(x) = 0.e8ba8393eca7821aa563d83491b6101189b3b101c3677f73d7bad7c10f9ee02b7ab4009739a */ - L(9.09095977415431051650381735684476417e-01), /* 3ffed1750727d94f04354ac7b069236c */ - L(1.20886014028444155733776025085677953e-35), /* 3f8b01189b3b101c3677f73d7bad7c11 */ -/* sin(x) = 0.6aa56d8e8249db4eb60a761fe3f9e559be456b9e13349ca99b0bfb787f22b95db3b70179615 */ - L(4.16586730282041119259112448831069657e-01), /* 3ffdaa95b63a09276d3ad829d87f8fe8 */ -L(-2.00488106831998813675438269796963612e-35), /* bf8baa641ba9461eccb635664f404878 */ - -/* x = 4.37500000000000000000000000000000000e-01 3ffdc000000000000000000000000000 */ -/* cos(x) = 0.e7e367d2956cfb16b6aa11e5419cd0057f5c132a6455bf064297e6a76fe2b72bb630d6d50ff */ - L(9.05813683425936420744516660652700258e-01), /* 3ffecfc6cfa52ad9f62d6d5423ca833a */ -L(-3.60950307605941169775676563004467163e-35), /* bf8c7fd4051f66acdd5207cdeb40cac5 */ -/* sin(x) = 0.6c760c14c8585a51dbd34660ae6c52ac7036a0b40887a0b63724f8b4414348c3063a637f457 */ - L(4.23676257203938010361683988031102480e-01), /* 3ffdb1d83053216169476f4d1982b9b1 */ - L(1.40484456388654470329473096579312595e-35), /* 3f8b2ac7036a0b40887a0b63724f8b44 */ - -/* x = 4.45312500000000000000000000000000000e-01 3ffdc800000000000000000000000000 */ -/* cos(x) = 0.e708ac84d4172a3e2737662213429e14021074d7e702e77d72a8f1101a7e70410df8273e9aa */ - L(9.02476103237941504925183272675895999e-01), /* 3ffece115909a82e547c4e6ecc442685 */ - L(2.26282899501344419018306295680210602e-35), /* 3f8be14021074d7e702e77d72a8f1102 */ -/* sin(x) = 0.6e44f8c36eb10a1c752d093c00f4d47ba446ac4c215d26b0316442f168459e677d06e7249e3 */ - L(4.30739925110803197216321517850849190e-01), /* 3ffdb913e30dbac42871d4b424f003d3 */ - L(1.54096780001629398850891218396761548e-35), /* 3f8b47ba446ac4c215d26b0316442f17 */ - -/* x = 4.53125000000000000000000000000000000e-01 3ffdd000000000000000000000000000 */ -/* cos(x) = 0.e62a551594b970a770b15d41d4c0e483e47aca550111df6966f9e7ac3a94ae49e6a71eb031e */ - L(8.99083440560138456216544929209379307e-01), /* 3ffecc54aa2b2972e14ee162ba83a982 */ -L(-2.06772615490904370666670275154751976e-35), /* bf8bb7c1b8535aafeee209699061853c */ -/* sin(x) = 0.70122c5ec5028c8cff33abf4fd340ccc382e038379b09cf04f9a52692b10b72586060cbb001 */ - L(4.37777302872755132861618974702796680e-01), /* 3ffdc048b17b140a3233fcceafd3f4d0 */ - L(9.62794364503442612477117426033922467e-36), /* 3f8a998705c0706f36139e09f34a4d25 */ - -/* x = 4.60937500000000000000000000000000000e-01 3ffdd800000000000000000000000000 */ -/* cos(x) = 0.e54864fe33e8575cabf5bd0e5cf1b1a8bc7c0d5f61702450fa6b6539735820dd2603ae355d5 */ - L(8.95635902463170698900570000446256350e-01), /* 3ffeca90c9fc67d0aeb957eb7a1cb9e3 */ - L(3.73593741659866883088620495542311808e-35), /* 3f8c8d45e3e06afb0b812287d35b29cc */ -/* sin(x) = 0.71dd9fb1ff4677853acb970a9f6729c6e3aac247b1c57cea66c77413f1f98e8b9e98e49d851 */ - L(4.44787960964527211433056012529525211e-01), /* 3ffdc7767ec7fd19de14eb2e5c2a7d9d */ -L(-1.67187936511493678007508371613954899e-35), /* bf8b6391c553db84e3a831599388bec1 */ - -/* x = 4.68750000000000000000000000000000000e-01 3ffde000000000000000000000000000 */ -/* cos(x) = 0.e462dfc670d421ab3d1a15901228f146a0547011202bf5ab01f914431859aef577966bc4fa4 */ - L(8.92133699366994404723900253723788575e-01), /* 3ffec8c5bf8ce1a843567a342b202452 */ -L(-1.10771937602567314732693079264692504e-35), /* bf8ad72bf571fddbfa814a9fc0dd779d */ -/* sin(x) = 0.73a74b8f52947b681baf6928eb3fb021769bf4779bad0e3aa9b1cdb75ec60aad9fc63ff19d5 */ - L(4.51771471491683776581688750134062870e-01), /* 3ffdce9d2e3d4a51eda06ebda4a3acff */ -L(-1.19387223016472295893794387275284505e-35), /* bf8afbd12c81710c8a5e38aac9c64914 */ - -/* x = 4.76562500000000000000000000000000000e-01 3ffde800000000000000000000000000 */ -/* cos(x) = 0.e379c9045f29d517c4808aa497c2057b2b3d109e76c0dc302d4d0698b36e3f0bdbf33d8e952 */ - L(8.88577045028035543317609023116020980e-01), /* 3ffec6f39208be53aa2f890115492f84 */ - L(4.12354278954664731443813655177022170e-36), /* 3f895ecacf44279db0370c0b5341a62d */ -/* sin(x) = 0.756f28d011d98528a44a75fc29c779bd734ecdfb582fdb74b68a4c4c4be54cfd0b2d3ad292f */ - L(4.58727408216736592377295028972874773e-01), /* 3ffdd5bca340476614a29129d7f0a71e */ -L(-4.70946994194182908929251719575431779e-36), /* bf8990a32c4c8129f40922d25d6ceced */ - -/* x = 4.84375000000000000000000000000000000e-01 3ffdf000000000000000000000000000 */ -/* cos(x) = 0.e28d245c58baef72225e232abc003c4366acd9eb4fc2808c2ab7fe7676cf512ac7f945ae5fb */ - L(8.84966156526143291697296536966647926e-01), /* 3ffec51a48b8b175dee444bc46557800 */ - L(4.53370570288325630442037826313462165e-35), /* 3f8ce21b3566cf5a7e14046155bff3b4 */ -/* sin(x) = 0.77353054ca72690d4c6e171fd99e6b39fa8e1ede5f052fd2964534c75340970a3a9cd3c5c32 */ - L(4.65655346585160182681199512507546779e-01), /* 3ffddcd4c15329c9a43531b85c7f667a */ -L(-1.56282598978971872478619772155305961e-35), /* bf8b4c60571e121a0fad02d69bacb38b */ - -/* x = 4.92187500000000000000000000000000000e-01 3ffdf800000000000000000000000000 */ -/* cos(x) = 0.e19cf580eeec046aa1422fa74807ecefb2a1911c94e7b5f20a00f70022d940193691e5bd790 */ - L(8.81301254251340599140161908298100173e-01), /* 3ffec339eb01ddd808d542845f4e9010 */ -L(-1.43419192312116687783945619009629445e-35), /* bf8b3104d5e6ee36b184a0df5ff08ffe */ -/* sin(x) = 0.78f95b0560a9a3bd6df7bd981dc38c61224d08bc20631ea932e605e53b579e9e0767dfcbbcb */ - L(4.72554863751304451146551317808516942e-01), /* 3ffde3e56c1582a68ef5b7def660770e */ - L(9.31324774957768018850224267625371204e-36), /* 3f8a8c2449a117840c63d5265cc0bca7 */ - -/* x = 5.00000000000000000000000000000000000e-01 3ffe0000000000000000000000000000 */ -/* cos(x) = 0.e0a94032dbea7cedbddd9da2fafad98556566b3a89f43eabd72350af3e8b19e801204d8fe2e */ - L(8.77582561890372716116281582603829681e-01), /* 3ffec1528065b7d4f9db7bbb3b45f5f6 */ -L(-2.89484960181363924855192538540698851e-35), /* bf8c33d54d4ca62bb05e0aa146e57a86 */ -/* sin(x) = 0.7abba1d12c17bfa1d92f0d93f60ded9992f45b4fcaf13cd58b303693d2a0db47db35ae8a3a9 */ - L(4.79425538604203000273287935215571402e-01), /* 3ffdeaee8744b05efe8764bc364fd838 */ -L(-1.38426977616718318950175848639381926e-35), /* bf8b2666d0ba4b0350ec32a74cfc96c3 */ - -/* x = 5.07812500000000000000000000000000000e-01 3ffe0400000000000000000000000000 */ -/* cos(x) = 0.dfb20840f3a9b36f7ae2c515342890b5ec583b8366cc2b55029e95094d31112383f2553498b */ - L(8.73810306413054508282556837071377159e-01), /* 3ffebf641081e75366def5c58a2a6851 */ - L(1.25716864497849302237218128599994785e-35), /* 3f8b0b5ec583b8366cc2b55029e95095 */ -/* sin(x) = 0.7c7bfdaf13e5ed17212f8a7525bfb113aba6c0741b5362bb8d59282a850b63716bca0c910f0 */ - L(4.86266951793275574311011306895834993e-01), /* 3ffdf1eff6bc4f97b45c84be29d496ff */ -L(-1.12269393250914752644352376448094271e-35), /* bf8add8a8b27f17c9593a88e54dafaaf */ - -/* x = 5.15625000000000000000000000000000000e-01 3ffe0800000000000000000000000000 */ -/* cos(x) = 0.deb7518814a7a931bbcc88c109cd41c50bf8bb48f20ae8c36628d1d3d57574f7dc58f27d91c */ - L(8.69984718058417388828915599901466243e-01), /* 3ffebd6ea310294f526377991182139b */ -L(-4.68168638300575626782741319792183837e-35), /* bf8cf1d7a03a25b86fa8b9e4ceb97161 */ -/* sin(x) = 0.7e3a679daaf25c676542bcb4028d0964172961c921823a4ef0c3a9070d886dbd073f6283699 */ - L(4.93078685753923057265136552753487121e-01), /* 3ffdf8e99e76abc9719d950af2d00a34 */ - L(7.06498693112535056352301101088624950e-36), /* 3f8a2c82e52c3924304749de187520e2 */ - -/* x = 5.23437500000000000000000000000000000e-01 3ffe0c00000000000000000000000000 */ -/* cos(x) = 0.ddb91ff318799172bd2452d0a3889f5169c64a0094bcf0b8aa7dcf0d7640a2eba68955a80be */ - L(8.66106030320656714696616831654267220e-01), /* 3ffebb723fe630f322e57a48a5a14711 */ - L(2.35610597588322493119667003904687628e-35), /* 3f8bf5169c64a0094bcf0b8aa7dcf0d7 */ -/* sin(x) = 0.7ff6d8a34bd5e8fa54c97482db5159df1f24e8038419c0b448b9eea8939b5d4dfcf40900257 */ - L(4.99860324733013463819556536946425724e-01), /* 3ffdffdb628d2f57a3e95325d20b6d45 */ - L(1.94636052312235297538564591686645139e-35), /* 3f8b9df1f24e8038419c0b448b9eea89 */ - -/* x = 5.31250000000000000000000000000000000e-01 3ffe1000000000000000000000000000 */ -/* cos(x) = 0.dcb7777ac420705168f31e3eb780ce9c939ecada62843b54522f5407eb7f21e556059fcd734 */ - L(8.62174479934880504367162510253324274e-01), /* 3ffeb96eeef58840e0a2d1e63c7d6f02 */ -L(-3.71556818317533582234562471835771823e-35), /* bf8c8b1b6309a92cebde255d6e855fc1 */ -/* sin(x) = 0.81b149ce34caa5a4e650f8d09fd4d6aa74206c32ca951a93074c83b2d294d25dbb0f7fdfad2 */ - L(5.06611454814257367642296000893867192e-01), /* 3ffe0362939c69954b49cca1f1a13faa */ -L(-3.10963699824274155702706043065967062e-35), /* bf8c4aac5efc9e69ab572b67c59be269 */ - -/* x = 5.39062500000000000000000000000000000e-01 3ffe1400000000000000000000000000 */ -/* cos(x) = 0.dbb25c25b8260c14f6e7bc98ec991b70c65335198b0ab628bad20cc7b229d4dd62183cfa055 */ - L(8.58190306862660347046629564970494649e-01), /* 3ffeb764b84b704c1829edcf7931d932 */ - L(2.06439574601190798155563653000684861e-35), /* 3f8bb70c65335198b0ab628bad20cc7b */ -/* sin(x) = 0.8369b434a372da7eb5c8a71fe36ce1e0b2b493f6f5cb2e38bcaec2a556b3678c401940d1c3c */ - L(5.13331663943471218288801270215706878e-01), /* 3ffe06d3686946e5b4fd6b914e3fc6da */ -L(-2.26614796466671970772244932848067224e-35), /* bf8be1f4d4b6c090a34d1c743513d5ab */ - -/* x = 5.46875000000000000000000000000000000e-01 3ffe1800000000000000000000000000 */ -/* cos(x) = 0.daa9d20860827063fde51c09e855e9932e1b17143e7244fd267a899d41ae1f3bc6a0ec42e27 */ - L(8.54153754277385385143451785105103176e-01), /* 3ffeb553a410c104e0c7fbca3813d0ac */ -L(-1.68707534013095152873222061722573172e-35), /* bf8b66cd1e4e8ebc18dbb02d9857662c */ -/* sin(x) = 0.852010f4f0800521378bd8dd614753d080c2e9e0775ffc609947b9132f5357404f464f06a58 */ - L(5.20020541953727004760213699874674730e-01), /* 3ffe0a4021e9e1000a426f17b1bac28f */ -L(-3.32415021330884924833711842866896734e-35), /* bf8c617bf9e8b0fc45001cfb35c23767 */ - -/* x = 5.54687500000000000000000000000000000e-01 3ffe1c00000000000000000000000000 */ -/* cos(x) = 0.d99ddd44e44a43d4d4a3a3ed95204106fd54d78e8c7684545c0da0b7c2c72be7a89b7c182ad */ - L(8.50065068549420263957072899177793617e-01), /* 3ffeb33bba89c89487a9a94747db2a41 */ -L(-4.73753917078785974356016104842568442e-35), /* bf8cf7c81559438b9c4bdd5d1f92fa42 */ -/* sin(x) = 0.86d45935ab396cb4e421e822dee54f3562dfcefeaa782184c23401d231f5ad981a1cc195b18 */ - L(5.26677680590386730710789410624833901e-01), /* 3ffe0da8b26b5672d969c843d045bdcb */ -L(-3.67066148195515214077582496518566735e-35), /* bf8c8654e901880aac3ef3d9ee5ff16e */ - -/* x = 5.62500000000000000000000000000000000e-01 3ffe2000000000000000000000000000 */ -/* cos(x) = 0.d88e820b1526311dd561efbc0c1a9a5375eb26f65d246c5744b13ca26a7e0fd42556da843c8 */ - L(8.45924499231067954459723078597493262e-01), /* 3ffeb11d04162a4c623baac3df781835 */ - L(1.98054947141989878179164342925274053e-35), /* 3f8ba5375eb26f65d246c5744b13ca27 */ -/* sin(x) = 0.88868625b4e1dbb2313310133022527200c143a5cb16637cb7daf8ade82459ff2e98511f40f */ - L(5.33302673536020173329131103308161529e-01), /* 3ffe110d0c4b69c3b764626620266045 */ -L(-3.42715291319551615996993795226755157e-35), /* bf8c6c6ff9f5e2d1a74ce41a41283a91 */ - -/* x = 5.70312500000000000000000000000000000e-01 3ffe2400000000000000000000000000 */ -/* cos(x) = 0.d77bc4985e93a607c9d868b906bbc6bbe3a04258814acb0358468b826fc91bd4d814827f65e */ - L(8.41732299041338366963111794309701085e-01), /* 3ffeaef78930bd274c0f93b0d1720d78 */ -L(-4.30821936750410026005408345400225948e-35), /* bf8cca20e2fded3bf5a9a7e53dcba3ed */ -/* sin(x) = 0.8a3690fc5bfc11bf9535e2739a8512f448a41251514bbed7fc18d530f9b4650fcbb2861b0aa */ - L(5.39895116435204405041660709903993340e-01), /* 3ffe146d21f8b7f8237f2a6bc4e7350a */ - L(1.42595803521626714477253741404712093e-35), /* 3f8b2f448a41251514bbed7fc18d5310 */ - -/* x = 5.78125000000000000000000000000000000e-01 3ffe2800000000000000000000000000 */ -/* cos(x) = 0.d665a937b4ef2b1f6d51bad6d988a4419c1d7051faf31a9efa151d7631117efac03713f950a */ - L(8.37488723850523685315353348917240617e-01), /* 3ffeaccb526f69de563edaa375adb311 */ - L(2.72761997872084533045777718677326179e-35), /* 3f8c220ce0eb828fd798d4f7d0a8ebb2 */ -/* sin(x) = 0.8be472f9776d809af2b88171243d63d66dfceeeb739cc894e023fbc165a0e3f26ff729c5d57 */ - L(5.46454606919203564403349553749411001e-01), /* 3ffe17c8e5f2eedb0135e57102e2487b */ -L(-2.11870230730160315420936523771864858e-35), /* bf8bc29920311148c63376b1fdc043ea */ - -/* x = 5.85937500000000000000000000000000000e-01 3ffe2c00000000000000000000000000 */ -/* cos(x) = 0.d54c3441844897fc8f853f0655f1ba695eba9fbfd7439dbb1171d862d9d9146ca5136f825ac */ - L(8.33194032664581363070224042208032321e-01), /* 3ffeaa98688308912ff91f0a7e0cabe3 */ - L(4.39440050052045486567668031751259899e-35), /* 3f8cd34af5d4fdfeba1cedd88b8ec317 */ -/* sin(x) = 0.8d902565817ee7839bce3cd128060119492cd36d42d82ada30d7f8bde91324808377ddbf5d4 */ - L(5.52980744630527369849695082681623667e-01), /* 3ffe1b204acb02fdcf07379c79a2500c */ - L(8.26624790417342895897164123189984127e-37), /* 3f8719492cd36d42d82ada30d7f8bde9 */ - -/* x = 5.93750000000000000000000000000000000e-01 3ffe3000000000000000000000000000 */ -/* cos(x) = 0.d42f6a1b9f0168cdf031c2f63c8d9304d86f8d34cb1d5fccb68ca0f2241427fc18d1fd5bbdf */ - L(8.28848487609325734810171790119116638e-01), /* 3ffea85ed4373e02d19be06385ec791b */ - L(1.43082508100496581719048175506239770e-35), /* 3f8b304d86f8d34cb1d5fccb68ca0f22 */ -/* sin(x) = 0.8f39a191b2ba6122a3fa4f41d5a3ffd421417d46f19a22230a14f7fcc8fce5c75b4b28b29d1 */ - L(5.59473131247366877384844006003116688e-01), /* 3ffe1e7343236574c24547f49e83ab48 */ -L(-1.28922620524163922306886952100992796e-37), /* bf845ef5f415c8732eeee7af584019b8 */ - -/* x = 6.01562500000000000000000000000000000e-01 3ffe3400000000000000000000000000 */ -/* cos(x) = 0.d30f4f392c357ab0661c5fa8a7d9b26627846fef214b1d19a22379ff9eddba087cf410eb097 */ - L(8.24452353914429207485643598212356053e-01), /* 3ffea61e9e72586af560cc38bf514fb3 */ - L(3.79160239225080026987031418939026741e-35), /* 3f8c93313c237f790a58e8cd111bcffd */ -/* sin(x) = 0.90e0e0d81ca678796cc92c8ea8c2815bc72ca78abe571bfa8576aacc571e096a33237e0e830 */ - L(5.65931370507905990773159095689276114e-01), /* 3ffe21c1c1b0394cf0f2d992591d5185 */ - L(1.02202775968053982310991962521535027e-36), /* 3f875bc72ca78abe571bfa8576aacc57 */ - -/* x = 6.09375000000000000000000000000000000e-01 3ffe3800000000000000000000000000 */ -/* cos(x) = 0.d1ebe81a95ee752e48a26bcd32d6e922d7eb44b8ad2232f6930795e84b56317269b9dd1dfa6 */ - L(8.20005899897234008255550633876556043e-01), /* 3ffea3d7d0352bdcea5c9144d79a65ae */ -L(-1.72008811955230823416724332297991247e-35), /* bf8b6dd2814bb4752ddcd096cf86a17b */ -/* sin(x) = 0.9285dc9bc45dd9ea3d02457bcce59c4175aab6ff7929a8d287195525fdace200dba032874fb */ - L(5.72355068234507240384953706824503608e-01), /* 3ffe250bb93788bbb3d47a048af799cb */ - L(2.12572273479933123944580199464514529e-35), /* 3f8bc4175aab6ff7929a8d2871955260 */ - -/* x = 6.17187500000000000000000000000000000e-01 3ffe3c00000000000000000000000000 */ -/* cos(x) = 0.d0c5394d772228195e25736c03574707de0af1ca344b13bd3914bfe27518e9e426f5deff1e1 */ - L(8.15509396946375476876345384201386217e-01), /* 3ffea18a729aee445032bc4ae6d806af */ -L(-4.28589138410712954051679139949341961e-35), /* bf8cc7c10fa871ae5da76216375a00ec */ -/* sin(x) = 0.94288e48bd0335fc41c4cbd2920497a8f5d1d8185c99fa0081f90c27e2a53ffdd208a0dbe69 */ - L(5.78743832357770354521111378581385347e-01), /* 3ffe28511c917a066bf8838997a52409 */ - L(1.77998063432551282609698670002456093e-35), /* 3f8b7a8f5d1d8185c99fa0081f90c27e */ - -/* x = 6.25000000000000000000000000000000000e-01 3ffe4000000000000000000000000000 */ -/* cos(x) = 0.cf9b476c897c25c5bfe750dd3f308eaf7bcc1ed00179a256870f4200445043dcdb1974b5878 */ - L(8.10963119505217902189534803941080724e-01), /* 3ffe9f368ed912f84b8b7fcea1ba7e61 */ - L(1.10481292856794436426051402418804358e-35), /* 3f8ad5ef7983da002f344ad0e1e84009 */ -/* sin(x) = 0.95c8ef544210ec0b91c49bd2aa09e8515fa61a156ebb10f5f8c232a6445b61ebf3c2ec268f9 */ - L(5.85097272940462154805399314150080459e-01), /* 3ffe2b91dea88421d817238937a55414 */ -L(-1.78164576278056195136525335403380464e-35), /* bf8b7aea059e5ea9144ef0a073dcd59c */ - -/* x = 6.32812500000000000000000000000000000e-01 3ffe4400000000000000000000000000 */ -/* cos(x) = 0.ce6e171f92f2e27f32225327ec440ddaefae248413efc0e58ceee1ae369aabe73f88c87ed1a */ - L(8.06367345055103913698795406077297399e-01), /* 3ffe9cdc2e3f25e5c4fe6444a64fd888 */ - L(1.04235088143133625463876245029180850e-35), /* 3f8abb5df5c490827df81cb19ddc35c7 */ -/* sin(x) = 0.9766f93cd18413a6aafc1cfc6fc28abb6817bf94ce349901ae3f48c3215d3eb60acc5f78903 */ - L(5.91415002201316315087000225758031236e-01), /* 3ffe2ecdf279a308274d55f839f8df85 */ - L(8.07390238063560077355762466502569603e-36), /* 3f8a576d02f7f299c6932035c7e91864 */ - -/* x = 6.40625000000000000000000000000000000e-01 3ffe4800000000000000000000000000 */ -/* cos(x) = 0.cd3dad1b5328a2e459f993f4f5108819faccbc4eeba9604e81c7adad51cc8a2561631a06826 */ - L(8.01722354098418450607492605652964208e-01), /* 3ffe9a7b5a36a65145c8b3f327e9ea21 */ - L(6.09487851305233089325627939458963741e-36), /* 3f8a033f599789dd752c09d038f5b5aa */ -/* sin(x) = 0.9902a58a45e27bed68412b426b675ed503f54d14c8172e0d373f42cadf04daf67319a7f94be */ - L(5.97696634538701531238647618967334337e-01), /* 3ffe32054b148bc4f7dad0825684d6cf */ -L(-2.49527608940873714527427941350461554e-35), /* bf8c0957e0559759bf468f964605e9a9 */ - -/* x = 6.48437500000000000000000000000000000e-01 3ffe4c00000000000000000000000000 */ -/* cos(x) = 0.cc0a0e21709883a3ff00911e11a07ee3bd7ea2b04e081be99be0264791170761ae64b8b744a */ - L(7.97028430141468342004642741431945296e-01), /* 3ffe98141c42e1310747fe01223c2341 */ -L(-8.35364432831812599727083251866305534e-37), /* bf871c42815d4fb1f7e416641fd9b86f */ -/* sin(x) = 0.9a9bedcdf01b38d993f3d7820781de292033ead73b89e28f39313dbe3a6e463f845b5fa8490 */ - L(6.03941786554156657267270287527367726e-01), /* 3ffe3537db9be03671b327e7af040f04 */ -L(-2.54578992328947177770363936132309779e-35), /* bf8c0eb6fe60a94623b0eb863676120e */ - -/* x = 6.56250000000000000000000000000000000e-01 3ffe5000000000000000000000000000 */ -/* cos(x) = 0.cad33f00658fe5e8204bbc0f3a66a0e6a773f87987a780b243d7be83b3db1448ca0e0e62787 */ - L(7.92285859677178543141501323781709399e-01), /* 3ffe95a67e00cb1fcbd04097781e74cd */ - L(2.47519558228473167879248891673807645e-35), /* 3f8c07353b9fc3cc3d3c05921ebdf41e */ -/* sin(x) = 0.9c32cba2b14156ef05256c4f857991ca6a547cd7ceb1ac8a8e62a282bd7b9183648a462bd04 */ - L(6.10150077075791371273742393566183220e-01), /* 3ffe386597456282adde0a4ad89f0af3 */ - L(1.33842237929938963780969418369150532e-35), /* 3f8b1ca6a547cd7ceb1ac8a8e62a282c */ - -/* x = 6.64062500000000000000000000000000000e-01 3ffe5400000000000000000000000000 */ -/* cos(x) = 0.c99944936cf48c8911ff93fe64b3ddb7981e414bdaf6aae1203577de44878c62bc3bc9cf7b9 */ - L(7.87494932167606083931328295965533034e-01), /* 3ffe93328926d9e9191223ff27fcc968 */ -L(-2.57915385618070637156514241185180920e-35), /* bf8c12433f0df5a1284aa8f6fe54410e */ -/* sin(x) = 0.9dc738ad14204e689ac582d0f85826590feece34886cfefe2e08cf2bb8488d55424dc9d3525 */ - L(6.16321127181550943005700433761731837e-01), /* 3ffe3b8e715a28409cd1358b05a1f0b0 */ - L(2.88497530050197716298085892460478666e-35), /* 3f8c32c87f7671a44367f7f17046795e */ - -/* x = 6.71875000000000000000000000000000000e-01 3ffe5800000000000000000000000000 */ -/* cos(x) = 0.c85c23c26ed7b6f014ef546c47929682122876bfbf157de0aff3c4247d820c746e32cd4174f */ - L(7.82655940026272796930787447428139026e-01), /* 3ffe90b84784ddaf6de029dea8d88f25 */ - L(1.69332045679237919427807771288506254e-35), /* 3f8b682122876bfbf157de0aff3c4248 */ -/* sin(x) = 0.9f592e9b66a9cf906a3c7aa3c10199849040c45ec3f0a747597311038101780c5f266059dbf */ - L(6.22454560222343683041926705090443330e-01), /* 3ffe3eb25d36cd539f20d478f5478203 */ - L(1.91974786921147072717621236192269859e-35), /* 3f8b9849040c45ec3f0a747597311038 */ - -/* x = 6.79687500000000000000000000000000000e-01 3ffe5c00000000000000000000000000 */ -/* cos(x) = 0.c71be181ecd6875ce2da5615a03cca207d9adcb9dfb0a1d6c40a4f0056437f1a59ccddd06ee */ - L(7.77769178600317903122203513685412863e-01), /* 3ffe8e37c303d9ad0eb9c5b4ac2b407a */ -L(-4.05296033424632846931240580239929672e-35), /* bf8caefc13291a31027af149dfad87fd */ -/* sin(x) = 0.a0e8a725d33c828c11fa50fd9e9a15ffecfad43f3e534358076b9b0f6865694842b1e8c67dc */ - L(6.28550001845029662028004327939032867e-01), /* 3ffe41d14e4ba679051823f4a1fb3d34 */ - L(1.65507421184028099672784511397428852e-35), /* 3f8b5ffecfad43f3e534358076b9b0f7 */ - -/* x = 6.87500000000000000000000000000000000e-01 3ffe6000000000000000000000000000 */ -/* cos(x) = 0.c5d882d2ee48030c7c07d28e981e34804f82ed4cf93655d2365389b716de6ad44676a1cc5da */ - L(7.72834946152471544810851845913425178e-01), /* 3ffe8bb105a5dc900618f80fa51d303c */ - L(3.94975229341211664237241534741146939e-35), /* 3f8ca4027c176a67c9b2ae91b29c4db9 */ -/* sin(x) = 0.a2759c0e79c35582527c32b55f5405c182c66160cb1d9eb7bb0b7cdf4ad66f317bda4332914 */ - L(6.34607080015269296850309914203671436e-01), /* 3ffe44eb381cf386ab04a4f8656abea8 */ - L(4.33025916939968369326060156455927002e-36), /* 3f897060b1985832c767adeec2df37d3 */ - -/* x = 6.95312500000000000000000000000000000e-01 3ffe6400000000000000000000000000 */ -/* cos(x) = 0.c4920cc2ec38fb891b38827db08884fc66371ac4c2052ca8885b981bbcfd3bb7b093ee31515 */ - L(7.67853543842850365879920759114193964e-01), /* 3ffe89241985d871f712367104fb6111 */ - L(3.75100035267325597157244776081706979e-36), /* 3f893f198dc6b130814b2a2216e606ef */ -/* sin(x) = 0.a400072188acf49cd6b173825e038346f105e1301afe642bcc364cea455e21e506e3e927ed8 */ - L(6.40625425040230409188409779413961021e-01), /* 3ffe48000e431159e939ad62e704bc07 */ - L(2.46542747294664049615806500747173281e-36), /* 3f88a37882f0980d7f3215e61b267523 */ - -/* x = 7.03125000000000000000000000000000000e-01 3ffe6800000000000000000000000000 */ -/* cos(x) = 0.c348846bbd3631338ffe2bfe9dd1381a35b4e9c0c51b4c13fe376bad1bf5caacc4542be0aa9 */ - L(7.62825275710576250507098753625429792e-01), /* 3ffe869108d77a6c62671ffc57fd3ba2 */ - L(4.22067411888601505004748939382325080e-35), /* 3f8cc0d1ada74e0628da609ff1bb5d69 */ -/* sin(x) = 0.a587e23555bb08086d02b9c662cdd29316c3e9bd08d93793634a21b1810cce73bdb97a99b9e */ - L(6.46604669591152370524042159882800763e-01), /* 3ffe4b0fc46aab761010da05738cc59c */ -L(-3.41742981816219412415674365946079826e-35), /* bf8c6b6749e0b217b9364364e5aef274 */ - -/* x = 7.10937500000000000000000000000000000e-01 3ffe6c00000000000000000000000000 */ -/* cos(x) = 0.c1fbeef380e4ffdd5a613ec8722f643ffe814ec2343e53adb549627224fdc9f2a7b77d3d69f */ - L(7.57750448655219342240234832230493361e-01), /* 3ffe83f7dde701c9ffbab4c27d90e45f */ -L(-2.08767968311222650582659938787920125e-35), /* bf8bbc0017eb13dcbc1ac524ab69d8de */ -/* sin(x) = 0.a70d272a76a8d4b6da0ec90712bb748b96dabf88c3079246f3db7eea6e58ead4ed0e2843303 */ - L(6.52544448725765956407573982284767763e-01), /* 3ffe4e1a4e54ed51a96db41d920e2577 */ -L(-8.61758060284379660697102362141557170e-36), /* bf8a6e8d24a80ee79f0db721849022b2 */ - -/* x = 7.18750000000000000000000000000000000e-01 3ffe7000000000000000000000000000 */ -/* cos(x) = 0.c0ac518c8b6ae710ba37a3eeb90cb15aebcb8bed4356fb507a48a6e97de9aa6d9660116b436 */ - L(7.52629372418066476054541324847143116e-01), /* 3ffe8158a31916d5ce21746f47dd7219 */ - L(3.71306958657663189665450864311104571e-35), /* 3f8c8ad75e5c5f6a1ab7da83d245374c */ -/* sin(x) = 0.a88fcfebd9a8dd47e2f3c76ef9e2439920f7e7fbe735f8bcc985491ec6f12a2d4214f8cfa99 */ - L(6.58444399910567541589583954884041989e-01), /* 3ffe511f9fd7b351ba8fc5e78eddf3c5 */ -L(-4.54412944084300330523721391865787219e-35), /* bf8ce336f840c020c6503a19b3d5b70a */ - -/* x = 7.26562500000000000000000000000000000e-01 3ffe7400000000000000000000000000 */ -/* cos(x) = 0.bf59b17550a4406875969296567cf3e3b4e483061877c02811c6cae85fad5a6c3da58f49292 */ - L(7.47462359563216166669700384714767552e-01), /* 3ffe7eb362eaa14880d0eb2d252cacfa */ -L(-9.11094340926220027288083639048016945e-36), /* bf8a8389636f9f3cf107fafdc726a2f4 */ -/* sin(x) = 0.aa0fd66eddb921232c28520d3911b8a03193b47f187f1471ac216fbcd5bb81029294d3a73f1 */ - L(6.64304163042946276515506587432846246e-01), /* 3ffe541facddbb7242465850a41a7223 */ - L(4.26004843895378210155889028714676019e-35), /* 3f8cc5018c9da3f8c3f8a38d610b7de7 */ - -/* x = 7.34375000000000000000000000000000000e-01 3ffe7800000000000000000000000000 */ -/* cos(x) = 0.be0413f84f2a771c614946a88cbf4da1d75a5560243de8f2283fefa0ea4a48468a52d51d8b3 */ - L(7.42249725458501306991347253449610537e-01), /* 3ffe7c0827f09e54ee38c2928d51197f */ -L(-3.78925270049800913539923473871287550e-35), /* bf8c92f1452d54fede10b86ebe0082f9 */ -/* sin(x) = 0.ab8d34b36acd987210ed343ec65d7e3adc2e7109fce43d55c8d57dfdf55b9e01d2cc1f1b9ec */ - L(6.70123380473162894654531583500648495e-01), /* 3ffe571a6966d59b30e421da687d8cbb */ -L(-1.33165852952743729897634069393684656e-36), /* bf87c523d18ef6031bc2aa372a82020b */ - -/* x = 7.42187500000000000000000000000000000e-01 3ffe7c00000000000000000000000000 */ -/* cos(x) = 0.bcab7e6bfb2a14a9b122c574a376bec98ab14808c64a4e731b34047e217611013ac99c0f25d */ - L(7.36991788256240741057089385586450844e-01), /* 3ffe7956fcd7f654295362458ae946ed */ - L(4.72358938637974850573747497460125519e-35), /* 3f8cf64c558a404632527398d9a023f1 */ -/* sin(x) = 0.ad07e4c409d08c4fa3a9057bb0ac24b8636e74e76f51e09bd6b2319707cbd9f5e254643897a */ - L(6.75901697026178809189642203142423973e-01), /* 3ffe5a0fc98813a1189f47520af76158 */ - L(2.76252586616364878801928456702948857e-35), /* 3f8c25c31b73a73b7a8f04deb5918cb8 */ - -/* x = 7.50000000000000000000000000000000000e-01 3ffe8000000000000000000000000000 */ -/* cos(x) = 0.bb4ff632a908f73ec151839cb9d993b4e0bfb8f20e7e44e6e4aee845e35575c3106dbe6fd06 */ - L(7.31688868873820886311838753000084529e-01), /* 3ffe769fec655211ee7d82a3073973b3 */ - L(1.48255637548931697184991710293198620e-35), /* 3f8b3b4e0bfb8f20e7e44e6e4aee845e */ -/* sin(x) = 0.ae7fe0b5fc786b2d966e1d6af140a488476747c2646425fc7533f532cd044cb10a971a49a6a */ - L(6.81638760023334166733241952779893908e-01), /* 3ffe5cffc16bf8f0d65b2cdc3ad5e281 */ - L(2.74838775935027549024224114338667371e-35), /* 3f8c24423b3a3e1323212fe3a99fa996 */ - -/* x = 7.57812500000000000000000000000000000e-01 3ffe8400000000000000000000000000 */ -/* cos(x) = 0.b9f180ba77dd0751628e135a9508299012230f14becacdd14c3f8862d122de5b56d55b53360 */ - L(7.26341290974108590410147630237598973e-01), /* 3ffe73e30174efba0ea2c51c26b52a10 */ - L(3.12683579338351123545814364980658990e-35), /* 3f8c4c80911878a5f6566e8a61fc4317 */ -/* sin(x) = 0.aff522a954f2ba16d9defdc416e33f5e9a5dfd5a6c228e0abc4d521327ff6e2517a7b3851dd */ - L(6.87334219303873534951703613035647220e-01), /* 3ffe5fea4552a9e5742db3bdfb882dc6 */ - L(4.76739454455410744997012795035529128e-35), /* 3f8cfaf4d2efead361147055e26a9099 */ - -/* x = 7.65625000000000000000000000000000000e-01 3ffe8800000000000000000000000000 */ -/* cos(x) = 0.b890237d3bb3c284b614a0539016bfa1053730bbdf940fa895e185f8e58884d3dda15e63371 */ - L(7.20949380945696418043812784148447688e-01), /* 3ffe712046fa776785096c2940a7202d */ - L(4.78691285733673379499536326050811832e-35), /* 3f8cfd0829b985defca07d44af0c2fc7 */ -/* sin(x) = 0.b167a4c90d63c4244cf5493b7cc23bd3c3c1225e078baa0c53d6d400b926281f537a1a260e6 */ - L(6.92987727246317910281815490823048210e-01), /* 3ffe62cf49921ac7884899ea9276f984 */ - L(4.50089871077663557180849219529189918e-35), /* 3f8cde9e1e0912f03c5d50629eb6a006 */ - -/* x = 7.73437500000000000000000000000000000e-01 3ffe8c00000000000000000000000000 */ -/* cos(x) = 0.b72be40067aaf2c050dbdb7a14c3d7d4f203f6b3f0224a4afe55d6ec8e92b508fd5c5984b3b */ - L(7.15513467882981573520620561289896903e-01), /* 3ffe6e57c800cf55e580a1b7b6f42988 */ -L(-3.02191815581445336509438104625489192e-35), /* bf8c41586fe04a607eedada80d51489c */ -/* sin(x) = 0.b2d7614b1f3aaa24df2d6e20a77e1ca3e6d838c03e29c1bcb026e6733324815fadc9eb89674 */ - L(6.98598938789681741301929277107891591e-01), /* 3ffe65aec2963e755449be5adc414efc */ - L(2.15465226809256290914423429408722521e-35), /* 3f8bca3e6d838c03e29c1bcb026e6733 */ - -/* x = 7.81250000000000000000000000000000000e-01 3ffe9000000000000000000000000000 */ -/* cos(x) = 0.b5c4c7d4f7dae915ac786ccf4b1a498d3e73b6e5e74fe7519d9c53ee6d6b90e881bddfc33e1 */ - L(7.10033883566079674974121643959490219e-01), /* 3ffe6b898fa9efb5d22b58f0d99e9635 */ -L(-4.09623224763692443220896752907902465e-35), /* bf8cb3960c6248d0c580c573131d608d */ -/* sin(x) = 0.b44452709a59752905913765434a59d111f0433eb2b133f7d103207e2aeb4aae111ddc385b3 */ - L(7.04167511454533672780059509973942844e-01), /* 3ffe6888a4e134b2ea520b226eca8695 */ -L(-2.87259372740393348676633610275598640e-35), /* bf8c3177707de60a6a76604177e6fc0f */ - -/* x = 7.89062500000000000000000000000000000e-01 3ffe9400000000000000000000000000 */ -/* cos(x) = 0.b45ad4975b1294cadca4cf40ec8f22a68cd14b175835239a37e63acb85e8e9505215df18140 */ - L(7.04510962440574606164129481545916976e-01), /* 3ffe68b5a92eb6252995b9499e81d91e */ - L(2.60682037357042658395360726992048803e-35), /* 3f8c1534668a58bac1a91cd1bf31d65c */ -/* sin(x) = 0.b5ae7285bc10cf515753847e8f8b7a30e0a580d929d770103509880680f7b8b0e8ad23b65d8 */ - L(7.09693105363899724959669028139035515e-01), /* 3ffe6b5ce50b78219ea2aea708fd1f17 */ -L(-4.37026016974122945368562319136420097e-36), /* bf8973c7d69fc9b58a23fbf2bd9dfe60 */ -}; diff --git a/sysdeps/ieee754/ldbl-128/w_expl_compat.c b/sysdeps/ieee754/ldbl-128/w_expl_compat.c deleted file mode 100644 index c32616e504..0000000000 --- a/sysdeps/ieee754/ldbl-128/w_expl_compat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* w_expl.c -- long double version of w_exp.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper expl(x) - */ - -#include -#include - -long double __expl(long double x) /* wrapper exp */ -{ -#ifdef _IEEE_LIBM - return __ieee754_expl(x); -#else - long double z = __ieee754_expl (x); - if (__glibc_unlikely (!isfinite (z) || z == 0) - && isfinite (x) && _LIB_VERSION != _IEEE_) - return __kernel_standard_l (x, x, 206 + !!signbit (x)); - - return z; -#endif -} -hidden_def (__expl) -weak_alias (__expl, expl) diff --git a/sysdeps/ieee754/ldbl-128/x2y2m1l.c b/sysdeps/ieee754/ldbl-128/x2y2m1l.c deleted file mode 100644 index d3f88331b5..0000000000 --- a/sysdeps/ieee754/ldbl-128/x2y2m1l.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static inline void -add_split (_Float128 *hi, _Float128 *lo, _Float128 x, _Float128 y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Compare absolute values of floating-point values pointed to by P - and Q for qsort. */ - -static int -compare (const void *p, const void *q) -{ - _Float128 pld = fabsl (*(const _Float128 *) p); - _Float128 qld = fabsl (*(const _Float128 *) q); - if (pld < qld) - return -1; - else if (pld == qld) - return 0; - else - return 1; -} - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -_Float128 -__x2y2m1l (_Float128 x, _Float128 y) -{ - _Float128 vals[5]; - SET_RESTORE_ROUNDL (FE_TONEAREST); - mul_splitl (&vals[1], &vals[0], x, x); - mul_splitl (&vals[3], &vals[2], y, y); - vals[4] = -1; - qsort (vals, 5, sizeof (_Float128), compare); - /* Add up the values so that each element of VALS has absolute value - at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 3; i++) - { - add_split (&vals[i + 1], &vals[i], vals[i + 1], vals[i]); - qsort (vals + i + 1, 4 - i, sizeof (_Float128), compare); - } - /* Now any error from this addition will be small. */ - return vals[4] + vals[3] + vals[2] + vals[1] + vals[0]; -} -- cgit v1.2.1