mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | //  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!
 | ||
|  | 
 | ||
|  | #ifdef _MSC_VER
 | ||
|  | #  pragma warning (disable : 4189) //  'd' : local variable is initialized but not referenced
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include <iostream>
 | ||
|  | using std::cout; using std::endl; | ||
|  | 
 | ||
|  | #include <stdexcept>
 | ||
|  | using std::domain_error; | ||
|  | 
 | ||
|  | //[policy_ref_snip13
 | ||
|  | 
 | ||
|  | #include <boost/math/distributions/cauchy.hpp>
 | ||
|  | 
 | ||
|  | namespace myspace | ||
|  | { // using namespace boost::math::policies; // May be convenient in myspace.
 | ||
|  | 
 | ||
|  |   // Define a policy called my_policy to use.
 | ||
|  |   using boost::math::policies::policy; | ||
|  |    | ||
|  | // In this case we want all the distribution accessor functions to compile,
 | ||
|  | // even if they are mathematically undefined, so
 | ||
|  | // make the policy assert_undefined.
 | ||
|  |   using boost::math::policies::assert_undefined; | ||
|  | 
 | ||
|  | typedef policy<assert_undefined<false> > my_policy; | ||
|  | 
 | ||
|  | // Finally apply this policy to type double.
 | ||
|  | BOOST_MATH_DECLARE_DISTRIBUTIONS(double, my_policy) | ||
|  | } // namespace myspace
 | ||
|  | 
 | ||
|  | // Now we can use myspace::cauchy etc, which will use policy
 | ||
|  | // myspace::mypolicy:
 | ||
|  | //
 | ||
|  | // This compiles but throws a domain error exception at runtime.
 | ||
|  | // Caution! If you omit the try'n'catch blocks, 
 | ||
|  | // it will just silently terminate, giving no clues as to why! 
 | ||
|  | // So try'n'catch blocks are very strongly recommended.
 | ||
|  | 
 | ||
|  | void test_cauchy() | ||
|  | { | ||
|  |    try | ||
|  |    { | ||
|  |       double d = mean(myspace::cauchy());  // Cauchy does not have a mean!
 | ||
|  |    } | ||
|  |    catch(const std::domain_error& e) | ||
|  |    { | ||
|  |       cout << e.what() << endl; | ||
|  |    } | ||
|  | } | ||
|  | 
 | ||
|  | //] //[/policy_ref_snip13]
 | ||
|  | 
 | ||
|  | int main() | ||
|  | { | ||
|  |    test_cauchy(); | ||
|  | } | ||
|  | 
 | ||
|  | /*
 | ||
|  | 
 | ||
|  | Output: | ||
|  | 
 | ||
|  | policy_snip_13.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Release\policy_snip_13.exe | ||
|  |   Error in function boost::math::mean(cauchy<double>&): The Cauchy distribution does not have a mean: the only possible return value is 1.#QNAN. | ||
|  | 
 | ||
|  |   */ | ||
|  | 
 |