]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/ieee754/ldbl-128/e_log10l.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / ieee754 / ldbl-128 / e_log10l.c
index b403f815fbe0bb31b14b9a6481f4679b28e0025d..7123c6f69a0eb58c13d9398d0d8461a646c9e2f5 100644 (file)
@@ -57,7 +57,7 @@
     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 <http://www.gnu.org/licenses/>.
+    License along with this library; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <math.h>
  * Theoretical peak relative error = 5.3e-37,
  * relative peak error spread = 2.3e-14
  */
-static const long double P[13] =
+static const _Float128 P[13] =
 {
-  1.313572404063446165910279910527789794488E4L,
-  7.771154681358524243729929227226708890930E4L,
-  2.014652742082537582487669938141683759923E5L,
-  3.007007295140399532324943111654767187848E5L,
-  2.854829159639697837788887080758954924001E5L,
-  1.797628303815655343403735250238293741397E5L,
-  7.594356839258970405033155585486712125861E4L,
-  2.128857716871515081352991964243375186031E4L,
-  3.824952356185897735160588078446136783779E3L,
-  4.114517881637811823002128927449878962058E2L,
-  2.321125933898420063925789532045674660756E1L,
-  4.998469661968096229986658302195402690910E-1L,
-  1.538612243596254322971797716843006400388E-6L
+  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 long double Q[12] =
+static const _Float128 Q[12] =
 {
-  3.940717212190338497730839731583397586124E4L,
-  2.626900195321832660448791748036714883242E5L,
-  7.777690340007566932935753241556479363645E5L,
-  1.347518538384329112529391120390701166528E6L,
-  1.514882452993549494932585972882995548426E6L,
-  1.158019977462989115839826904108208787040E6L,
-  6.132189329546557743179177159925690841200E5L,
-  2.248234257620569139969141618556349415120E5L,
-  5.605842085972455027590989944010492125825E4L,
-  9.147150349299596453976674231612674085381E3L,
-  9.104928120962988414618126155557301584078E2L,
-  4.839208193348159620282142911143429644326E1L
+  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, */
 };
 
@@ -107,44 +107,44 @@ static const long double Q[12] =
  * Theoretical peak relative error = 1.1e-35,
  * relative peak error spread 1.1e-9
  */
-static const long double R[6] =
+static const _Float128 R[6] =
 {
-  1.418134209872192732479751274970992665513E5L,
-8.977257995689735303686582344659576526998E4L,
-  2.048819892795278657810231591630928516206E4L,
-2.024301798136027039250415126250455056397E3L,
-  8.057002716646055371965756206836056074715E1L,
- -8.828896441624934385266096344596648080902E-1L
+  L(1.418134209872192732479751274970992665513E5),
L(-8.977257995689735303686582344659576526998E4),
+  L(2.048819892795278657810231591630928516206E4),
L(-2.024301798136027039250415126250455056397E3),
+  L(8.057002716646055371965756206836056074715E1),
+ L(-8.828896441624934385266096344596648080902E-1)
 };
-static const long double S[6] =
+static const _Float128 S[6] =
 {
-  1.701761051846631278975701529965589676574E6L,
-1.332535117259762928288745111081235577029E6L,
-  4.001557694070773974936904547424676279307E5L,
-5.748542087379434595104154610899551484314E4L,
-  3.998526750980007367835804959888064681098E3L,
- -1.186359407982897997337150403816839480438E2L
+  L(1.701761051846631278975701529965589676574E6),
L(-1.332535117259762928288745111081235577029E6),
+  L(4.001557694070773974936904547424676279307E5),
L(-5.748542087379434595104154610899551484314E4),
+  L(3.998526750980007367835804959888064681098E3),
+ L(-1.186359407982897997337150403816839480438E2)
 /* 1.000000000000000000000000000000000000000E0L, */
 };
 
-static const long double
+static const _Float128
 /* log10(2) */
-L102A = 0.3125L,
-L102B = -1.14700043360188047862611052755069732318101185E-2L,
+L102A = L(0.3125),
+L102B = L(-1.14700043360188047862611052755069732318101185E-2),
 /* log10(e) */
-L10EA = 0.5L,
-L10EB = -6.570551809674817234887108108339491770560299E-2L,
+L10EA = L(0.5),
+L10EB = L(-6.570551809674817234887108108339491770560299E-2),
 /* sqrt(2)/2 */
-SQRTH = 7.071067811865475244008443621048490392848359E-1L;
+SQRTH = L(7.071067811865475244008443621048490392848359E-1);
 
 
 
 /* Evaluate P[n] x^n  +  P[n-1] x^(n-1)  +  ...  +  P[0] */
 
-static long double
-neval (long double x, const long double *p, int n)
+static _Float128
+neval (_Float128 x, const _Float128 *p, int n)
 {
-  long double y;
+  _Float128 y;
 
   p += n;
   y = *p--;
@@ -159,10 +159,10 @@ neval (long double x, const long double *p, int n)
 
 /* Evaluate x^n+1  +  P[n] x^(n)  +  P[n-1] x^(n-1)  +  ...  +  P[0] */
 
-static long double
-deval (long double x, const long double *p, int n)
+static _Float128
+deval (_Float128 x, const _Float128 *p, int n)
 {
-  long double y;
+  _Float128 y;
 
   p += n;
   y = x + *p--;
@@ -176,23 +176,26 @@ deval (long double x, const long double *p, int n)
 
 
 
-long double
-__ieee754_log10l (long double x)
+_Float128
+__ieee754_log10l (_Float128 x)
 {
-  long double z;
-  long double y;
+  _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.0L / (x - x));
+    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
@@ -209,14 +212,14 @@ __ieee754_log10l (long double x)
       if (x < SQRTH)
        {                       /* 2( 2x-1 )/( 2x+1 ) */
          e -= 1;
-         z = x - 0.5L;
-         y = 0.5L * z + 0.5L;
+         z = x - L(0.5);
+         y = L(0.5) * z + L(0.5);
        }
       else
        {                       /*  2 (x-1)/(x+1)   */
-         z = x - 0.5L;
-         z -= 0.5L;
-         y = 0.5L * x + 0.5L;
+         z = x - L(0.5);
+         z -= L(0.5);
+         y = L(0.5) * x + L(0.5);
        }
       x = z / y;
       z = x * x;
@@ -230,11 +233,11 @@ __ieee754_log10l (long double x)
   if (x < SQRTH)
     {
       e -= 1;
-      x = 2.0 * x - 1.0L;      /*  2x - 1  */
+      x = 2.0 * x - 1; /*  2x - 1  */
     }
   else
     {
-      x = x - 1.0L;
+      x = x - 1;
     }
   z = x * x;
   y = x * (z * neval (x, P, 12) / deval (x, Q, 11));