/* 
 * Copyright (C) 1999, 2002, 2003, 2004, 2005, 2006 Free Software
 * Foundation, Inc.
 * 
 * This file is part of GNU libmatheval
 * 
 * GNU libmatheval is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2, or (at your option) any later
 * version.
 * 
 * GNU libmatheval is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * program; see the file COPYING. If not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#include "xmath.h"

double
math_cot(double x)
{
	/* 
	 * Calculate cotangent value.
	 */
	return 1 / tan(x);
}

double
math_sec(double x)
{
	/* 
	 * Calculate secant value.
	 */
	return 1 / cos(x);
}

double
math_csc(double x)
{
	/* 
	 * Calculate cosecant value.
	 */
	return 1 / sin(x);
}

double
math_acot(double x)
{
	/* 
	 * Calculate inverse cotangent value.
	 */
	return atan(1 / x);
}

double
math_asec(double x)
{
	/* 
	 * Calculate inverse secant value.
	 */
	return acos(1 / x);
}

double
math_acsc(double x)
{
	/* 
	 * Calculate inverse cosecant value.
	 */
	return asin(1 / x);
}

double
math_coth(double x)
{
	/* 
	 * Calculate hyperbolic cotangent value.
	 */
	return 1 / tanh(x);
}

double
math_sech(double x)
{
	/* 
	 * Calculate hyperbolic secant value.
	 */
	return 1 / cosh(x);
}

double
math_csch(double x)
{
	/* 
	 * Calculate hyperbolic cosecant value.
	 */
	return 1 / sinh(x);
}

double
math_asinh(double x)
{
	/* 
	 * Calculate inverse hyperbolic sine value.
	 */
	return log(x + sqrt(x * x + 1));
}

double
math_acosh(double x)
{
	/* 
	 * Calculate inverse hyperbolic cosine value.
	 */
	return log(x + sqrt(x * x - 1));
}

double
math_atanh(double x)
{
	/* 
	 * Calculate inverse hyperbolic tangent value.
	 */
	return 0.5 * log((1 + x) / (1 - x));
}

double
math_acoth(double x)
{
	/* 
	 * Calculate inverse hyperbolic cotangent value.
	 */
	return 0.5 * log((x + 1) / (x - 1));
}

double
math_asech(double x)
{
	/* 
	 * Calculate inverse hyperbolic secant value.
	 */
	return math_acosh(1 / x);
}

double
math_acsch(double x)
{
	/* 
	 * Calculate inverse hyperbolic cosecant value.
	 */
	return math_asinh(1 / x);
}

double
math_step(double x)
{
	/* 
	 * Calculate step function value.
	 */
	return (x < 0) ? 0 : 1;
}

double
math_delta(double x)
{
	/* 
	 * Calculate delta function value.
	 */
	return (x == 0) ? MATH_INFINITY : 0;
}

double
math_nandelta(double x)
{
	/* 
	 * Calculate modified delta function value.
	 */
	return (x == 0) ? MATH_NAN : 0;
}


syntax highlighted by Code2HTML, v. 0.9.1