alpar@209: /* -*- mode: C++; indent-tabs-mode: nil; -*- alpar@68: * alpar@209: * This file is a part of LEMON, a generic C++ optimization library. alpar@68: * alpar@1270: * Copyright (C) 2003-2013 alpar@68: * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport alpar@68: * (Egervary Research Group on Combinatorial Optimization, EGRES). alpar@68: * alpar@68: * Permission to use, modify and distribute this software is granted alpar@68: * provided that this copyright notice appears in all copies. For alpar@68: * precise terms see the accompanying LICENSE file. alpar@68: * alpar@68: * This software is provided "AS IS" with no warranty of any kind, alpar@68: * express or implied, and with no claim as to its suitability for any alpar@68: * purpose. alpar@68: * alpar@68: */ alpar@68: alpar@68: #ifndef LEMON_MATH_H alpar@68: #define LEMON_MATH_H alpar@68: alpar@68: ///\ingroup misc alpar@68: ///\file alpar@68: ///\brief Some extensions to the standard \c cmath library. alpar@68: /// alpar@68: ///Some extensions to the standard \c cmath library. alpar@68: /// alpar@68: ///This file includes the standard math library (cmath). alpar@68: alpar@68: #include alpar@68: alpar@68: namespace lemon { alpar@68: alpar@68: /// \addtogroup misc alpar@68: /// @{ alpar@209: alpar@68: /// The Euler constant alpar@68: const long double E = 2.7182818284590452353602874713526625L; alpar@68: /// log_2(e) alpar@68: const long double LOG2E = 1.4426950408889634073599246810018921L; alpar@68: /// log_10(e) alpar@68: const long double LOG10E = 0.4342944819032518276511289189166051L; alpar@68: /// ln(2) alpar@68: const long double LN2 = 0.6931471805599453094172321214581766L; alpar@68: /// ln(10) alpar@68: const long double LN10 = 2.3025850929940456840179914546843642L; alpar@68: /// pi alpar@68: const long double PI = 3.1415926535897932384626433832795029L; alpar@68: /// pi/2 alpar@68: const long double PI_2 = 1.5707963267948966192313216916397514L; alpar@68: /// pi/4 alpar@68: const long double PI_4 = 0.7853981633974483096156608458198757L; alpar@68: /// sqrt(2) alpar@68: const long double SQRT2 = 1.4142135623730950488016887242096981L; alpar@68: /// 1/sqrt(2) alpar@68: const long double SQRT1_2 = 0.7071067811865475244008443621048490L; alpar@209: alpar@493: ///Check whether the parameter is NaN or not alpar@956: alpar@493: ///This function checks whether the parameter is NaN or not. alpar@493: ///Is should be equivalent with std::isnan(), but it is not alpar@493: ///provided by all compilers. alpar@558: inline bool isNaN(double v) alpar@493: { alpar@493: return v!=v; alpar@493: } alpar@68: alpar@1222: ///Round a value to its closest integer alpar@1222: inline double round(double r) { alpar@1311: return (r > 0.0) ? std::floor(r + 0.5) : std::ceil(r - 0.5); alpar@1222: } alpar@1222: alpar@68: /// @} alpar@68: alpar@68: } //namespace lemon alpar@68: alpar@1222: #endif //LEMON_MATH_H