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


/*
 *	floating point tangent
 */

// Tan returns the tangent of x.
func Tan(x float64) float64 {
	// Coefficients are #4285 from Hart & Cheney. (19.74D)
	const (
		P0	= -.1306820264754825668269611177e+5;
		P1	= .1055970901714953193602353981e+4;
		P2	= -.1550685653483266376941705728e+2;
		P3	= .3422554387241003435328470489e-1;
		P4	= .3386638642677172096076369e-4;
		Q0	= -.1663895238947119001851464661e+5;
		Q1	= .4765751362916483698926655581e+4;
		Q2	= -.1555033164031709966900124574e+3;
	)

	flag := false;
	sign := false;
	if x < 0 {
		x = -x;
		sign = true;
	}
	x = x * (4 / Pi);	/* overflow? */
	var e float64;
	e, x = Modf(x);
	i := int32(e);

	switch i & 3 {
	case 1:
		x = 1 - x;
		flag = true;

	case 2:
		sign = !sign;
		flag = true;

	case 3:
		x = 1 - x;
		sign = !sign;
	}

	xsq := x * x;
	temp := ((((P4*xsq+P3)*xsq+P2)*xsq+P1)*xsq + P0) * x;
	temp = temp / (((xsq+Q2)*xsq+Q1)*xsq + Q0);

	if flag {
		if temp == 0 {
			panic(NaN())
		}
		temp = 1 / temp;
	}
	if sign {
		temp = -temp
	}
	return temp;
}
