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

import "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;
}
