/*

 File: cimath.h, 2005/10/08

 CoStLy (COmplex interval STandard functions LibrarY), Version 2.0.4

 Copyright (C) Markus Neher, markus.neher@math.uni-karlsruhe.de
               Ingo Eble,    ingoeble@web.de

 This program 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
 of the License, or (at your option) any later version.

 This program 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 this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef _CIMATH_H_INCLUDED
#define _CIMATH_H_INCLUDED

#include "cinterval.h"
#include <list>  //STL
#include <string>//STL

namespace CoStLy
{
  using Adapt::Interval;
  //
  // CoStLy version number
  //
  std::string Version();
  //
  //  real cos, sin, and tan with extended real domain
  //  real asinh without underflow
  //
  Interval real_cos   (const Interval&);
  Interval real_sin   (const Interval&);
  Interval real_tan   (const Interval&);
  Interval real_asinh (const Interval&);
  //
  //  atan2( x, y ) = atan( y/x )
  //
  Interval atan2 (const double&, const double&);
  //
  //  Absolute value
  //
  Interval abs   (const CInterval&);
  //
  //  Separable functions
  //
  CInterval sqr  (const CInterval&);
  CInterval exp  (const CInterval&);
  CInterval cos  (const CInterval&);
  CInterval sin  (const CInterval&);
  CInterval cosh (const CInterval&);
  CInterval sinh (const CInterval&);
  //
  //  tan, cot, tanh, coth
  //
  CInterval tan  (const CInterval&);
  CInterval cot  (const CInterval&);
  CInterval tanh (const CInterval&);
  CInterval coth (const CInterval&);
  CInterval ctn  (const CInterval&);
  CInterval tct  (const CInterval&);
  //
  //  Argument functions
  //
  Interval  Arg         (const CInterval&);
  Interval  arg         (const CInterval&);
  Interval  arg_inclmon (const CInterval&);
  //
  //  Logarithms
  //
  Interval  re_ln (const CInterval&);
  CInterval Ln    (const CInterval&);
  CInterval ln    (const CInterval&);
  //
  //  Root functions
  //
  CInterval Sqrt                (const CInterval&);
  std::list<CInterval> sqrt_all (const CInterval&); 
  CInterval Root                (const CInterval&, int);
  std::list<CInterval> root_all (const CInterval&, int);
  CInterval Sqrt                (const CInterval&, int);
  std::list<CInterval> sqrt_all (const CInterval&, int);
  //
  //  Power functions
  //
  CInterval power_fast         (const CInterval&, int);
  CInterval power              (const CInterval&, int);
  CInterval Pow                (const CInterval&, const Interval&);
  CInterval Pow                (const CInterval&, const CInterval&);
  std::list<CInterval> pow_all (const CInterval&, const Interval&);
  //
  //  Asin, Acos, Asinh, Acosh
  //
  CInterval Asin  (const CInterval&);
  CInterval Acos  (const CInterval&);
  CInterval Ascs  (const CInterval&);
  CInterval Acsn  (const CInterval&);
  CInterval Asinh (const CInterval&);
  CInterval Acosh (const CInterval&);
  //
  //  Atan, Acot, Atanh, Acoth
  //
  CInterval Atan  (const CInterval&);
  CInterval Acot  (const CInterval&);
  CInterval Atanh (const CInterval&);
  CInterval Acoth (const CInterval&);
}

#endif

/*

  End of File: cimath.h

*/
