4a15d84228
2017-07-23 François Dumont <fdumont@gcc.gnu.org> PR libstdc++/81064 * include/bits/algorithmfwd.h: Reorganize versioned namespace. * include/bits/basic_string.h: Likewise. * include/bits/c++config: Likewise. * include/bits/deque.tcc: Likewise. * include/bits/forward_list.h: Likewise. * include/bits/forward_list.tcc: Likewise. * include/bits/hashtable_policy.h: Likewise. * include/bits/list.tcc: Likewise. * include/bits/move.h: Likewise. * include/bits/quoted_string.h: Likewise. * include/bits/random.h: Likewise. * include/bits/random.tcc: Likewise. * include/bits/regex.h: Likewise. * include/bits/regex.tcc: Likewise. * include/bits/regex_automaton.h: Likewise. * include/bits/regex_automaton.tcc: Likewise. * include/bits/regex_compiler.h: Likewise. * include/bits/regex_compiler.tcc: Likewise. * include/bits/regex_constants.h: Likewise. * include/bits/regex_error.h: Likewise. * include/bits/regex_executor.h: Likewise. * include/bits/regex_executor.tcc: Likewise. * include/bits/regex_scanner.h: Likewise. * include/bits/regex_scanner.tcc: Likewise. * include/bits/specfun.h: Likewise. * include/bits/stl_algo.h: Likewise. * include/bits/stl_algobase.h: Likewise. * include/bits/stl_bvector.h: Likewise. * include/bits/stl_deque.h: Likewise. * include/bits/stl_iterator.h: Likewise. * include/bits/stl_iterator_base_funcs.h: Likewise. * include/bits/stl_list.h: Likewise. * include/bits/stl_map.h: Likewise. * include/bits/stl_multimap.h: Likewise. * include/bits/stl_multiset.h: Likewise. * include/bits/stl_relops.h: Likewise. * include/bits/stl_set.h: Likewise. * include/bits/stl_vector.h: Likewise. * include/bits/uniform_int_dist.h: Likewise. * include/bits/unordered_map.h: Likewise. * include/bits/unordered_set.h: Likewise. * include/bits/vector.tcc: Likewise. * include/c_global/cmath: Likewise. * include/c_std/cmath: Likewise. * include/decimal/decimal: Likewise. * include/decimal/decimal.h: Likewise. * include/experimental/algorithm: Likewise. * include/experimental/any: Likewise. * include/experimental/array: Likewise. * include/experimental/bits/erase_if.h: Likewise. * include/experimental/bits/fs_dir.h: Likewise. * include/experimental/bits/fs_fwd.h: Likewise. * include/experimental/bits/fs_ops.h: Likewise. * include/experimental/bits/fs_path.h: Likewise. * include/experimental/bits/lfts_config.h: Likewise. * include/experimental/bits/shared_ptr.h: Likewise. * include/experimental/bits/string_view.tcc: Likewise. * include/experimental/chrono: Likewise. * include/experimental/deque: Likewise. * include/experimental/filesystem: Likewise. * include/experimental/forward_list: Likewise. * include/experimental/functional: Likewise. * include/experimental/iterator: Likewise. * include/experimental/list: Likewise. * include/experimental/map: Likewise. * include/experimental/memory: Likewise. * include/experimental/memory_resource: Likewise. * include/experimental/numeric: Likewise. * include/experimental/optional: Likewise. * include/experimental/propagate_const: Likewise. * include/experimental/random: Likewise. * include/experimental/ratio: Likewise. * include/experimental/regex: Likewise. * include/experimental/set: Likewise. * include/experimental/source_location: Likewise. * include/experimental/string: Likewise. * include/experimental/string_view: Likewise. * include/experimental/system_error: Likewise. * include/experimental/tuple: Likewise. * include/experimental/type_traits: Likewise. * include/experimental/unordered_map: Likewise. * include/experimental/unordered_set: Likewise. * include/experimental/utility: Likewise. * include/experimental/vector: Likewise. * include/ext/bitmap_allocator.h: Likewise. * include/ext/codecvt_specializations.h: Likewise. * include/ext/rope: Likewise. * include/ext/typelist.h: Likewise. * include/std/chrono: Likewise. * include/std/complex: Likewise. * include/std/functional: Likewise. * include/std/numeric: Likewise. * include/std/string_view: Likewise. * include/std/thread: Likewise. * include/std/variant: Likewise. * include/tr1/array: Likewise. * include/tr1/bessel_function.tcc: Likewise. * include/tr1/beta_function.tcc: Likewise. * include/tr1/cmath: Likewise. * include/tr1/complex: Likewise. * include/tr1/ell_integral.tcc: Likewise. * include/tr1/exp_integral.tcc: Likewise. * include/tr1/functional: Likewise. * include/tr1/functional_hash.h: Likewise. * include/tr1/gamma.tcc: Likewise. * include/tr1/hashtable.h: Likewise. * include/tr1/hashtable_policy.h: Likewise. * include/tr1/hypergeometric.tcc: Likewise. * include/tr1/legendre_function.tcc: Likewise. * include/tr1/modified_bessel_func.tcc: Likewise. * include/tr1/poly_hermite.tcc: Likewise. * include/tr1/poly_laguerre.tcc: Likewise. * include/tr1/random.h: Likewise. * include/tr1/random.tcc: Likewise. * include/tr1/regex: Likewise. * include/tr1/riemann_zeta.tcc: Likewise. * include/tr1/shared_ptr.h: Likewise. * include/tr1/special_function_util.h: Likewise. * include/tr1/tuple: Likewise. * include/tr1/type_traits: Likewise. * include/tr1/unordered_map.h: Likewise. * include/tr1/unordered_set.h: Likewise. * include/tr1/utility: Likewise. * include/tr2/bool_set: Likewise. * include/tr2/bool_set.tcc: Likewise. * include/tr2/dynamic_bitset: Likewise. * include/tr2/dynamic_bitset.tcc: Likewise. * include/tr2/ratio: Likewise. * include/tr2/type_traits: Likewise. * src/c++11/chrono.cc: Likewise. * src/c++11/compatibility-c++0x.cc: Likewise. * src/c++11/compatibility-chrono.cc: Likewise. * src/c++11/cxx11-shim_facets.cc: Likewise. * src/c++11/hashtable_c++0x.cc: Likewise. * src/c++11/placeholders.cc: Likewise. * src/c++11/thread.cc: Likewise. * src/c++98/bitmap_allocator.cc: Likewise. * src/c++98/hashtable_tr1.cc: Likewise. * src/c++98/list.cc: Likewise. * src/shared/hashtable-aux.cc: Likewise. * testsuite/20_util/duration/literals/range.cc: Adapt line number. * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Likewise. * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise. * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise. * testsuite/20_util/forward/c_neg.cc: Likewise. * testsuite/20_util/forward/f_neg.cc: Likewise. * testsuite/26_numerics/gcd/gcd_neg.cc: Likewise. * testsuite/26_numerics/lcm/lcm_neg.cc: Likewise. * testsuite/26_numerics/random/pr60037-neg.cc: Likewise. * python/libstdcxx/v6/printers.py: Adapt. From-SVN: r250458
143 lines
4.9 KiB
C++
143 lines
4.9 KiB
C++
// Special functions -*- C++ -*-
|
|
|
|
// Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
|
//
|
|
// This file is part of the GNU ISO C++ Library. This library 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, or (at your option)
|
|
// any later version.
|
|
|
|
// This library 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.
|
|
|
|
// Under Section 7 of GPL version 3, you are granted additional
|
|
// permissions described in the GCC Runtime Library Exception, version
|
|
// 3.1, as published by the Free Software Foundation.
|
|
|
|
// You should have received a copy of the GNU General Public License and
|
|
// a copy of the GCC Runtime Library Exception along with this program;
|
|
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
// <http://www.gnu.org/licenses/>.
|
|
|
|
/** @file tr1/special_function_util.h
|
|
* This is an internal header file, included by other library headers.
|
|
* Do not attempt to use it directly. @headername{tr1/cmath}
|
|
*/
|
|
|
|
//
|
|
// ISO C++ 14882 TR1: 5.2 Special functions
|
|
//
|
|
|
|
// Written by Edward Smith-Rowland based on numerous mathematics books.
|
|
|
|
#ifndef _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H
|
|
#define _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H 1
|
|
|
|
namespace std _GLIBCXX_VISIBILITY(default)
|
|
{
|
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|
|
|
#if _GLIBCXX_USE_STD_SPEC_FUNCS
|
|
#elif defined(_GLIBCXX_TR1_CMATH)
|
|
namespace tr1
|
|
{
|
|
#else
|
|
# error do not include this header directly, use <cmath> or <tr1/cmath>
|
|
#endif
|
|
namespace __detail
|
|
{
|
|
/// A class to encapsulate type dependent floating point
|
|
/// constants. Not everything will be able to be expressed as
|
|
/// type logic.
|
|
template<typename _Tp>
|
|
struct __floating_point_constant
|
|
{
|
|
static const _Tp __value;
|
|
};
|
|
|
|
|
|
/// A structure for numeric constants.
|
|
template<typename _Tp>
|
|
struct __numeric_constants
|
|
{
|
|
/// Constant @f$ \pi @f$.
|
|
static _Tp __pi() throw()
|
|
{ return static_cast<_Tp>(3.1415926535897932384626433832795029L); }
|
|
/// Constant @f$ \pi / 2 @f$.
|
|
static _Tp __pi_2() throw()
|
|
{ return static_cast<_Tp>(1.5707963267948966192313216916397514L); }
|
|
/// Constant @f$ \pi / 3 @f$.
|
|
static _Tp __pi_3() throw()
|
|
{ return static_cast<_Tp>(1.0471975511965977461542144610931676L); }
|
|
/// Constant @f$ \pi / 4 @f$.
|
|
static _Tp __pi_4() throw()
|
|
{ return static_cast<_Tp>(0.7853981633974483096156608458198757L); }
|
|
/// Constant @f$ 1 / \pi @f$.
|
|
static _Tp __1_pi() throw()
|
|
{ return static_cast<_Tp>(0.3183098861837906715377675267450287L); }
|
|
/// Constant @f$ 2 / \sqrt(\pi) @f$.
|
|
static _Tp __2_sqrtpi() throw()
|
|
{ return static_cast<_Tp>(1.1283791670955125738961589031215452L); }
|
|
/// Constant @f$ \sqrt(2) @f$.
|
|
static _Tp __sqrt2() throw()
|
|
{ return static_cast<_Tp>(1.4142135623730950488016887242096981L); }
|
|
/// Constant @f$ \sqrt(3) @f$.
|
|
static _Tp __sqrt3() throw()
|
|
{ return static_cast<_Tp>(1.7320508075688772935274463415058723L); }
|
|
/// Constant @f$ \sqrt(\pi/2) @f$.
|
|
static _Tp __sqrtpio2() throw()
|
|
{ return static_cast<_Tp>(1.2533141373155002512078826424055226L); }
|
|
/// Constant @f$ 1 / sqrt(2) @f$.
|
|
static _Tp __sqrt1_2() throw()
|
|
{ return static_cast<_Tp>(0.7071067811865475244008443621048490L); }
|
|
/// Constant @f$ \log(\pi) @f$.
|
|
static _Tp __lnpi() throw()
|
|
{ return static_cast<_Tp>(1.1447298858494001741434273513530587L); }
|
|
/// Constant Euler's constant @f$ \gamma_E @f$.
|
|
static _Tp __gamma_e() throw()
|
|
{ return static_cast<_Tp>(0.5772156649015328606065120900824024L); }
|
|
/// Constant Euler-Mascheroni @f$ e @f$
|
|
static _Tp __euler() throw()
|
|
{ return static_cast<_Tp>(2.7182818284590452353602874713526625L); }
|
|
};
|
|
|
|
|
|
#if _GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
|
|
|
|
/// This is a wrapper for the isnan function. Otherwise, for NaN,
|
|
/// all comparisons result in false. If/when we build a std::isnan
|
|
/// out of intrinsics, this will disappear completely in favor of
|
|
/// std::isnan.
|
|
template<typename _Tp>
|
|
inline bool __isnan(_Tp __x)
|
|
{ return std::isnan(__x); }
|
|
|
|
#else
|
|
|
|
template<typename _Tp>
|
|
inline bool __isnan(const _Tp __x)
|
|
{ return __builtin_isnan(__x); }
|
|
|
|
template<>
|
|
inline bool __isnan<float>(float __x)
|
|
{ return __builtin_isnanf(__x); }
|
|
|
|
template<>
|
|
inline bool __isnan<long double>(long double __x)
|
|
{ return __builtin_isnanl(__x); }
|
|
|
|
#endif
|
|
} // namespace __detail
|
|
#if ! _GLIBCXX_USE_STD_SPEC_FUNCS && defined(_GLIBCXX_TR1_CMATH)
|
|
} // namespace tr1
|
|
#endif
|
|
|
|
_GLIBCXX_END_NAMESPACE_VERSION
|
|
}
|
|
|
|
#endif // _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H
|
|
|