⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 std_real_concept_check.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
//  Copyright John Maddock 2006.//  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)#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false#include <boost/math/concepts/std_real_concept.hpp>#include <boost/math/concepts/distributions.hpp>#include "compile_test/instantiate.hpp"//// The purpose of this test is to verify that our code compiles// cleanly with a type whose std lib functions are in namespace// std and can *not* be found by ADL.  This verifies that we're// not finding std lib functions that are in the global namespace// for example calling ::pow(double) rather than std::pow(long double).// This is a silent error that does the wrong thing at runtime, and// of course we can't call std::pow() directly because we want// the functions to be found by ADL when that's appropriate.//// Furthermore our code does different things internally depending// on numeric_limits<>::digits, so there are some macros that can// be defined that cause our concept-archetype to emulate various// floating point types://// EMULATE32: 32-bit float// EMULATE64: 64-bit double// EMULATE80: 80-bit long double// EMULATE128: 128-bit long double//// In order to ensure total code coverage this file must be// compiled with each of the above macros in turn, and then // without any of the above as well!//#define NULL_MACRO /**/#ifdef EMULATE32namespace std{template<>struct numeric_limits<boost::math::concepts::std_real_concept>{   static const bool is_specialized = true;   static boost::math::concepts::std_real_concept min NULL_MACRO() throw();   static boost::math::concepts::std_real_concept max NULL_MACRO() throw();   static const int digits = 24;   static const int digits10 = 6;   static const bool is_signed = true;   static const bool is_integer = false;   static const bool is_exact = false;   static const int radix = 2;   static boost::math::concepts::std_real_concept epsilon() throw();   static boost::math::concepts::std_real_concept round_error() throw();   static const int min_exponent = -125;   static const int min_exponent10 = -37;   static const int max_exponent = 128;   static const int max_exponent10 = 38;   static const bool has_infinity = true;   static const bool has_quiet_NaN = true;   static const bool has_signaling_NaN = true;   static const float_denorm_style has_denorm = denorm_absent;   static const bool has_denorm_loss = false;   static boost::math::concepts::std_real_concept infinity() throw();   static boost::math::concepts::std_real_concept quiet_NaN() throw();   static boost::math::concepts::std_real_concept signaling_NaN() throw();   static boost::math::concepts::std_real_concept denorm_min() throw();   static const bool is_iec559 = true;   static const bool is_bounded = false;   static const bool is_modulo = false;   static const bool traps = false;   static const bool tinyness_before = false;   static const float_round_style round_style = round_toward_zero;};}#endif#ifdef EMULATE64namespace std{template<>struct numeric_limits<boost::math::concepts::std_real_concept>{   static const bool is_specialized = true;   static boost::math::concepts::std_real_concept min NULL_MACRO() throw();   static boost::math::concepts::std_real_concept max NULL_MACRO() throw();   static const int digits = 53;   static const int digits10 = 15;   static const bool is_signed = true;   static const bool is_integer = false;   static const bool is_exact = false;   static const int radix = 2;   static boost::math::concepts::std_real_concept epsilon() throw();   static boost::math::concepts::std_real_concept round_error() throw();   static const int min_exponent = -1021;   static const int min_exponent10 = -307;   static const int max_exponent = 1024;   static const int max_exponent10 = 308;   static const bool has_infinity = true;   static const bool has_quiet_NaN = true;   static const bool has_signaling_NaN = true;   static const float_denorm_style has_denorm = denorm_absent;   static const bool has_denorm_loss = false;   static boost::math::concepts::std_real_concept infinity() throw();   static boost::math::concepts::std_real_concept quiet_NaN() throw();   static boost::math::concepts::std_real_concept signaling_NaN() throw();   static boost::math::concepts::std_real_concept denorm_min() throw();   static const bool is_iec559 = true;   static const bool is_bounded = false;   static const bool is_modulo = false;   static const bool traps = false;   static const bool tinyness_before = false;   static const float_round_style round_style = round_toward_zero;};}#endif#ifdef EMULATE80namespace std{template<>struct numeric_limits<boost::math::concepts::std_real_concept>{   static const bool is_specialized = true;   static boost::math::concepts::std_real_concept min NULL_MACRO() throw();   static boost::math::concepts::std_real_concept max NULL_MACRO() throw();   static const int digits = 64;   static const int digits10 = 18;   static const bool is_signed = true;   static const bool is_integer = false;   static const bool is_exact = false;   static const int radix = 2;   static boost::math::concepts::std_real_concept epsilon() throw();   static boost::math::concepts::std_real_concept round_error() throw();   static const int min_exponent = -16381;   static const int min_exponent10 = -4931;   static const int max_exponent = 16384;   static const int max_exponent10 = 4932;   static const bool has_infinity = true;   static const bool has_quiet_NaN = true;   static const bool has_signaling_NaN = true;   static const float_denorm_style has_denorm = denorm_absent;   static const bool has_denorm_loss = false;   static boost::math::concepts::std_real_concept infinity() throw();   static boost::math::concepts::std_real_concept quiet_NaN() throw();   static boost::math::concepts::std_real_concept signaling_NaN() throw();   static boost::math::concepts::std_real_concept denorm_min() throw();   static const bool is_iec559 = true;   static const bool is_bounded = false;   static const bool is_modulo = false;   static const bool traps = false;   static const bool tinyness_before = false;   static const float_round_style round_style = round_toward_zero;};}#endif#ifdef EMULATE128namespace std{template<>struct numeric_limits<boost::math::concepts::std_real_concept>{   static const bool is_specialized = true;   static boost::math::concepts::std_real_concept min NULL_MACRO() throw();   static boost::math::concepts::std_real_concept max NULL_MACRO() throw();   static const int digits = 113;   static const int digits10 = 33;   static const bool is_signed = true;   static const bool is_integer = false;   static const bool is_exact = false;   static const int radix = 2;   static boost::math::concepts::std_real_concept epsilon() throw();   static boost::math::concepts::std_real_concept round_error() throw();   static const int min_exponent = -16381;   static const int min_exponent10 = -4931;   static const int max_exponent = 16384;   static const int max_exponent10 = 4932;   static const bool has_infinity = true;   static const bool has_quiet_NaN = true;   static const bool has_signaling_NaN = true;   static const float_denorm_style has_denorm = denorm_absent;   static const bool has_denorm_loss = false;   static boost::math::concepts::std_real_concept infinity() throw();   static boost::math::concepts::std_real_concept quiet_NaN() throw();   static boost::math::concepts::std_real_concept signaling_NaN() throw();   static boost::math::concepts::std_real_concept denorm_min() throw();   static const bool is_iec559 = true;   static const bool is_bounded = false;   static const bool is_modulo = false;   static const bool traps = false;   static const bool tinyness_before = false;   static const float_round_style round_style = round_toward_zero;};}#endifint main(){   instantiate(boost::math::concepts::std_real_concept(0));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -