mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 |