/* origin: FreeBSD /usr/src/lib/msun/ld80/k_cosl.c */
/* origin: FreeBSD /usr/src/lib/msun/ld128/k_cosl.c */
/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
 *
 * Developed at SunSoft, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */

#include "libm.h"

#if (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
#if LDBL_MANT_DIG == 64
/*
 * ld80 version of __cos.c.  See __cos.c for most comments.
 */
/*
 * Domain [-0.7854, 0.7854], range ~[-2.43e-23, 2.425e-23]:
 * |cos(x) - c(x)| < 2**-75.1
 *
 * The coefficients of c(x) were generated by a pari-gp script using
 * a Remez algorithm that searches for the best higher coefficients
 * after rounding leading coefficients to a specified precision.
 *
 * Simpler methods like Chebyshev or basic Remez barely suffice for
 * cos() in 64-bit precision, because we want the coefficient of x^2
 * to be precisely -0.5 so that multiplying by it is exact, and plain
 * rounding of the coefficients of a good polynomial approximation only
 * gives this up to about 64-bit precision.  Plain rounding also gives
 * a mediocre approximation for the coefficient of x^4, but a rounding
 * error of 0.5 ulps for this coefficient would only contribute ~0.01
 * ulps to the final error, so this is unimportant.  Rounding errors in
 * higher coefficients are even less important.
 *
 * In fact, coefficients above the x^4 one only need to have 53-bit
 * precision, and this is more efficient.  We get this optimization
 * almost for free from the complications needed to search for the best
 * higher coefficients.
 */
static const long double C1 =
    0.0416666666666666666136L;                   /*  0xaaaaaaaaaaaaaa9b.0p-68 */
static const double C2 = -0.0013888888888888874, /* -0x16c16c16c16c10.0p-62 */
    C3 = 0.000024801587301571716,                /*  0x1a01a01a018e22.0p-68 */
    C4 = -0.00000027557319215507120,             /* -0x127e4fb7602f22.0p-74 */
    C5 = 0.0000000020876754400407278,            /*  0x11eed8caaeccf1.0p-81 */
    C6 = -1.1470297442401303e-11,                /* -0x19393412bd1529.0p-89 */
    C7 = 4.7383039476436467e-14;                 /*  0x1aac9d9af5c43e.0p-97 */
#define POLY(z) \
  (z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * (C6 + z * C7)))))))
#elif LDBL_MANT_DIG == 113
/*
 * ld128 version of __cos.c.  See __cos.c for most comments.
 */
/*
 * Domain [-0.7854, 0.7854], range ~[-1.80e-37, 1.79e-37]:
 * |cos(x) - c(x))| < 2**-122.0
 *
 * 113-bit precision requires more care than 64-bit precision, since
 * simple methods give a minimax polynomial with coefficient for x^2
 * that is 1 ulp below 0.5, but we want it to be precisely 0.5.  See
 * above for more details.
 */
static const long double C1 = 0.04166666666666666666666666666666658424671L,
                         C2 = -0.001388888888888888888888888888863490893732L,
                         C3 = 0.00002480158730158730158730158600795304914210L,
                         C4 = -0.2755731922398589065255474947078934284324e-6L,
                         C5 = 0.2087675698786809897659225313136400793948e-8L,
                         C6 = -0.1147074559772972315817149986812031204775e-10L,
                         C7 = 0.4779477332386808976875457937252120293400e-13L;
static const double C8 = -0.1561920696721507929516718307820958119868e-15,
                    C9 = 0.4110317413744594971475941557607804508039e-18,
                    C10 = -0.8896592467191938803288521958313920156409e-21,
                    C11 = 0.1601061435794535138244346256065192782581e-23;
#define POLY(z)                             \
  (z *                                      \
   (C1 +                                    \
    z * (C2 +                               \
         z * (C3 +                          \
              z * (C4 +                     \
                   z * (C5 +                \
                        z * (C6 +           \
                             z * (C7 +      \
                                  z * (C8 + \
                                       z * (C9 + z * (C10 + z * C11)))))))))))
#endif

long double __cosl(long double x, long double y) {
  long double hz, z, r, w;

  z = x * x;
  r = POLY(z);
  hz = 0.5 * z;
  w = 1.0 - hz;
  return w + (((1.0 - w) - hz) + (z * r - x * y));
}
#endif
