diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /boost/math/concepts/real_type_concept.hpp | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'boost/math/concepts/real_type_concept.hpp')
-rw-r--r-- | boost/math/concepts/real_type_concept.hpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/boost/math/concepts/real_type_concept.hpp b/boost/math/concepts/real_type_concept.hpp new file mode 100644 index 0000000000..f6ec016211 --- /dev/null +++ b/boost/math/concepts/real_type_concept.hpp @@ -0,0 +1,121 @@ +// Copyright John Maddock 2007-8. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_REAL_TYPE_CONCEPT_HPP +#define BOOST_MATH_REAL_TYPE_CONCEPT_HPP + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable: 4100) +#pragma warning(disable: 4510) +#pragma warning(disable: 4610) +#endif +#include <boost/concept_check.hpp> +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif +#include <boost/math/tools/config.hpp> +#include <boost/math/tools/precision.hpp> + + +namespace boost{ namespace math{ namespace concepts{ + +template <class RealType> +struct RealTypeConcept +{ + template <class Other> + void check_binary_ops(Other o) + { + RealType r(o); + r = o; + r -= o; + r += o; + r *= o; + r /= o; + r = r - o; + r = o - r; + r = r + o; + r = o + r; + r = o * r; + r = r * o; + r = r / o; + r = o / r; + bool b; + b = r == o; + suppress_unused_variable_warning(b); + b = o == r; + suppress_unused_variable_warning(b); + b = r != o; + suppress_unused_variable_warning(b); + b = o != r; + suppress_unused_variable_warning(b); + b = r <= o; + suppress_unused_variable_warning(b); + b = o <= r; + suppress_unused_variable_warning(b); + b = r >= o; + suppress_unused_variable_warning(b); + b = o >= r; + suppress_unused_variable_warning(b); + b = r < o; + suppress_unused_variable_warning(b); + b = o < r; + suppress_unused_variable_warning(b); + b = r > o; + suppress_unused_variable_warning(b); + b = o > r; + suppress_unused_variable_warning(b); + } + + void constraints() + { + BOOST_MATH_STD_USING + + RealType r; + check_binary_ops(r); + check_binary_ops(0.5f); + check_binary_ops(0.5); + //check_binary_ops(0.5L); + check_binary_ops(1); + //check_binary_ops(1u); + check_binary_ops(1L); + //check_binary_ops(1uL); +#ifndef BOOST_HAS_LONG_LONG + check_binary_ops(1LL); +#endif + RealType r2 = +r; + r2 = -r; + + r2 = fabs(r); + r2 = abs(r); + r2 = ceil(r); + r2 = floor(r); + r2 = exp(r); + r2 = pow(r, r2); + r2 = sqrt(r); + r2 = log(r); + r2 = cos(r); + r2 = sin(r); + r2 = tan(r); + r2 = asin(r); + r2 = acos(r); + r2 = atan(r); + int i; + r2 = ldexp(r, i); + r2 = frexp(r, &i); + i = boost::math::tools::digits<RealType>(); + r2 = boost::math::tools::max_value<RealType>(); + r2 = boost::math::tools::min_value<RealType>(); + r2 = boost::math::tools::log_max_value<RealType>(); + r2 = boost::math::tools::log_min_value<RealType>(); + r2 = boost::math::tools::epsilon<RealType>(); + } +}; // struct DistributionConcept + + +}}} // namespaces + +#endif + |