// 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 arctangent
 *
 *	atan returns the value of the arctangent of its
 *	argument in the range [-pi/2,pi/2].
 *	there are no error returns.
 *	coefficients are #5077 from Hart & Cheney. (19.56D)
 */

/*
 *	xatan evaluates a series valid in the
 *	range [-0.414...,+0.414...]. (tan(pi/8))
 */
func xatan(arg float64) float64 {
	const
	(
		P4	= .161536412982230228262e2;
		P3	= .26842548195503973794141e3;
		P2	= .11530293515404850115428136e4;
		P1	= .178040631643319697105464587e4;
		P0	= .89678597403663861959987488e3;
		Q4	= .5895697050844462222791e2;
		Q3	= .536265374031215315104235e3;
		Q2	= .16667838148816337184521798e4;
		Q1	= .207933497444540981287275926e4;
		Q0	= .89678597403663861962481162e3;
	)
	sq := arg*arg;
	value := ((((P4*sq + P3)*sq + P2)*sq + P1)*sq + P0);
	value = value/(((((sq + Q4)*sq + Q3)*sq + Q2)*sq + Q1)*sq + Q0);
	return value*arg;
}

/*
 *	satan reduces its argument (known to be positive)
 *	to the range [0,0.414...] and calls xatan.
 */
func satan(arg float64) float64 {
	if arg < Sqrt2 - 1 {
		return xatan(arg);
	}
	if arg > Sqrt2 + 1 {
		return Pi/2 - xatan(1/arg);
	}
	return Pi/4 + xatan((arg-1)/(arg+1));
}

/*
 *	atan makes its argument positive and
 *	calls the inner routine satan.
 */

// Atan returns the arc tangent of x.
func Atan(x float64) float64 {
	if x > 0 {
		return satan(x);
	}
	return -satan(-x);
}
