Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
83 lines (66 loc) · 2.56 KB

File metadata and controls

83 lines (66 loc) · 2.56 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 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
*/
Morty Proxy This is a proxified and sanitized view of the page, visit original site.