// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package math


func sinus(x float64, quad int) float64 {
	// Coefficients are #3370 from Hart & Cheney (18.80D).
	const
	(
		P0	=  .1357884097877375669092680e8;
		P1	= -.4942908100902844161158627e7;
		P2	=  .4401030535375266501944918e6;
		P3	= -.1384727249982452873054457e5;
		P4	=  .1459688406665768722226959e3;
		Q0	=  .8644558652922534429915149e7;
		Q1	=  .4081792252343299749395779e6;
		Q2	=  .9463096101538208180571257e4;
		Q3	=  .1326534908786136358911494e3;
	)
	if x < 0 {
		x = -x;
		quad = quad+2;
	}
	x = x * (2/Pi);	/* underflow? */
	var y float64;
	if x > 32764 {
		var e float64;
		e, y = Modf(x);
		e = e + float64(quad);
		_, f := Modf(0.25*e);
		quad = int(e - 4*f);
	} else {
		k := int32(x);
		y = x - float64(k);
		quad = (quad + int(k)) & 3;
	}

	if quad&1 != 0 {
		y = 1-y;
	}
	if quad > 1 {
		y = -y;
	}

	yy := y*y;
	temp1 := ((((P4*yy+P3)*yy+P2)*yy+P1)*yy+P0)*y;
	temp2 := ((((yy+Q3)*yy+Q2)*yy+Q1)*yy+Q0);
	return temp1/temp2;
}

// Cos returns the cosine of x.
func Cos(x float64) float64 {
	if x < 0 {
		x = -x;
	}
	return sinus(x, 1);
}

// Sin returns the sine of x.
func Sin(x float64) float64 {
	return sinus(x, 0);
}
