mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// C_error_policy_example.cpp
 | 
						|
 | 
						|
// Copyright Paul A. Bristow 2007, 2010.
 | 
						|
// Copyright John Maddock 2007.
 | 
						|
 | 
						|
// 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)
 | 
						|
 | 
						|
// Suppose we want a call to tgamma  to behave in a C-compatible way
 | 
						|
// and set global ::errno rather than throw an exception.
 | 
						|
 | 
						|
#include <cerrno> // for ::errno
 | 
						|
 | 
						|
#include <boost/math/special_functions/gamma.hpp>
 | 
						|
using boost::math::tgamma;
 | 
						|
 | 
						|
using boost::math::policies::policy;
 | 
						|
// Possible errors
 | 
						|
using boost::math::policies::overflow_error;
 | 
						|
using boost::math::policies::underflow_error;
 | 
						|
using boost::math::policies::domain_error;
 | 
						|
using boost::math::policies::pole_error;
 | 
						|
using boost::math::policies::denorm_error;
 | 
						|
using boost::math::policies::evaluation_error;
 | 
						|
 | 
						|
using boost::math::policies::errno_on_error;
 | 
						|
using boost::math::policies::ignore_error;
 | 
						|
 | 
						|
//using namespace boost::math::policies;
 | 
						|
//using namespace boost::math; // avoid potential ambiuity with std:: <random>
 | 
						|
 | 
						|
// Define a policy:
 | 
						|
typedef policy<
 | 
						|
      domain_error<errno_on_error>, // 'bad' arguments.
 | 
						|
      pole_error<errno_on_error>, // argument is pole value.
 | 
						|
      overflow_error<errno_on_error>, // argument value causes overflow.
 | 
						|
      evaluation_error<errno_on_error>  // evaluation does not converge and may be inaccurate, or worse,
 | 
						|
      // or there is no way  known (yet) to implement this evaluation,
 | 
						|
      // for example, kurtosis of non-central beta distribution.
 | 
						|
      > C_error_policy;
 | 
						|
 | 
						|
// std
 | 
						|
#include <iostream>
 | 
						|
   using std::cout;
 | 
						|
   using std::endl;   
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
  // We can achieve this at the function call site
 | 
						|
  // with the previously defined policy C_error_policy.
 | 
						|
  double t = tgamma(4., C_error_policy());
 | 
						|
  cout << "tgamma(4., C_error_policy() = " << t << endl; // 6
 | 
						|
 | 
						|
  // Alternatively we could use the function make_policy,
 | 
						|
  // provided for convenience,
 | 
						|
  // and define everything at the call site:
 | 
						|
  t = tgamma(4., make_policy(
 | 
						|
         domain_error<errno_on_error>(), 
 | 
						|
         pole_error<errno_on_error>(),
 | 
						|
         overflow_error<errno_on_error>(),
 | 
						|
         evaluation_error<errno_on_error>() 
 | 
						|
      ));
 | 
						|
  cout << "tgamma(4., make_policy(...) = " << t << endl; // 6
 | 
						|
 | 
						|
  return 0;
 | 
						|
} // int main()
 | 
						|
 | 
						|
/*
 | 
						|
 | 
						|
Output
 | 
						|
 | 
						|
  c_error_policy_example.cpp
 | 
						|
  Generating code
 | 
						|
  Finished generating code
 | 
						|
  c_error_policy_example.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Release\c_error_policy_example.exe
 | 
						|
  tgamma(4., C_error_policy() = 6
 | 
						|
  tgamma(4., make_policy(...) = 6
 | 
						|
  tgamma(4., C_error_policy() = 6
 | 
						|
  tgamma(4., make_policy(...) = 6
 | 
						|
 | 
						|
*/
 |