// 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) }
