2
0
mirror of https://github.com/boostorg/math.git synced 2026-01-19 04:22:09 +00:00
Files
math/example/c_error_policy_example.cpp
John Maddock 4ba0027365 Fixed lots of "inspect" issues: bad hyperlinks, tabs in source and missing licenses.
Tweaked some error levels again.

[SVN r40079]
2007-10-16 09:32:28 +00:00

75 lines
2.2 KiB
C++

// C_error_policy_example.cpp
// Copyright Paul A. Bristow 2007.
// 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 <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;
// 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.
> 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
Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\c_error_policy_example.exe"
tgamma(4., C_error_policy() = 6
tgamma(4., make_policy( ...) = 6
*/