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


/*
 *	Sinh(x) returns the hyperbolic sine of x
 *
 *	The exponential func is called for arguments
 *	greater in magnitude than 0.5.
 *
 *	A series is used for arguments smaller in magnitude than 0.5.
 *
 *	Cosh(x) is computed from the exponential func for
 *	all arguments.
 */

// Sinh returns the hyperbolic sine of x.
func Sinh(x float64) float64 {
	// The coefficients are #2029 from Hart & Cheney. (20.36D)
	const
	(
		P0	= -0.6307673640497716991184787251e+6;
		P1	= -0.8991272022039509355398013511e+5;
		P2	= -0.2894211355989563807284660366e+4;
		P3	= -0.2630563213397497062819489e+2;
		Q0	= -0.6307673640497716991212077277e+6;
		Q1	=  0.1521517378790019070696485176e+5;
		Q2	= -0.173678953558233699533450911e+3;
	)

	sign := false;
	if x < 0 {
		x = -x;
		sign = true;
	}

	var temp float64;
	switch true {
	case x > 21:
		temp = Exp(x)/2;

	case x > 0.5:
		temp = (Exp(x) - Exp(-x))/2;

	default:
		sq := x*x;
		temp = (((P3*sq+P2)*sq+P1)*sq+P0)*x;
		temp = temp/(((sq+Q2)*sq+Q1)*sq+Q0);
	}

	if sign {
		temp = -temp;
	}
	return temp;
}

// Cosh returns the hyperbolic cosine of x.
func Cosh(x float64) float64 {
	if x < 0 {
		x = - x;
	}
	if x > 21 {
		return Exp(x)/2;
	}
	return (Exp(x) + Exp(-x))/2;
}
