/*
* Copyright (C) 1999, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011,
* 2012, 2013 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 3 of the
* License, 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 GNU libmatheval. If not, see
* .
*/
#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 MATH_ISNAN(x) ? x : ((x < 0) ? 0 : 1);
}
double
math_delta(double x)
{
/*
* Calculate delta function value.
*/
return MATH_ISNAN(x) ? x : ((x == 0) ? MATH_INFINITY : 0);
}
double
math_nandelta(double x)
{
/*
* Calculate modified delta function value.
*/
return MATH_ISNAN(x) ? x : ((x == 0) ? MATH_NAN : 0);
}