/* k_sinf.c -- float version of k_sin.c
   Copyright (C) 2011-2014 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with the GNU C Library; see the file COPYING.LIB.  If
   not, see <http://www.gnu.org/licenses/>.  */

#include <math.h>
#include <fenv.h>
#include <math_private.h>


static const float twom27 =  7.4505806000e-09;
static const float half   =  5.0000000000e-01;
static const float S1     = -1.6666667163e-01;
static const float S2     =  8.3333337680e-03;
static const float S3     = -1.9841270114e-04;
static const float S4     =  2.7557314297e-06;
static const float S5     = -2.5050759689e-08;
static const float S6     =  1.5896910177e-10;


float
__kernel_sinf (float x, float y, int iy)
{
  float z, r, v;
  float ix;
  ix = __builtin_fabsf (x);
  if (ix < twom27)
    {				/* |x| < 2**-27 */
      __feraiseexcept (FE_INEXACT);
      return x;
    }
  z = x * x;
  v = z * x;
  r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6)));
  if (iy == 0)
    return x + v * (S1 + z * r);
  else
    return x - ((z * (half * y - v * r) - y) - v * S1);
}
