// Copyright John Maddock 2007. // Copyright Paul A. Bristow 2010 // 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) // Note that this file contains quickbook mark-up as well as code // and comments, don't change any of the special comment mark-ups! // Define tgamma function with a no overflow policy // into a specific namespace-scope. #include using std::cout; using std::endl; //[policy_ref_snip12 #include //using boost::math::tgamma; // Need not declare using boost::math::tgamma here, // because will define tgamma in myspace using macro below. namespace myspace { using namespace boost::math::policies; // Define a policy that does not throw on overflow: typedef policy > my_policy; // Define the special functions in this scope to use the policy: BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(my_policy) } // Now we can use myspace::tgamma etc. // They will automatically use "my_policy": // double t = myspace::tgamma(30.0); // Will *not* throw on overflow, // despite the large value of factorial 30 = 265252859812191058636308480000000 // unlike default policy boost::math::tgamma; //] int main() { cout << "myspace::tgamma(30.0) = " << t << endl; } /* Output: myspace::tgamma(30.0) = 8.84176e+030 */