Boost logo

Boost-Commit :

From: pbristow_at_[hidden]
Date: 2007-07-30 09:19:44


Author: pbristow
Date: 2007-07-30 09:19:43 EDT (Mon, 30 Jul 2007)
New Revision: 7593
URL: http://svn.boost.org/trac/boost/changeset/7593

Log:
New example of C policy
Added:
   sandbox/math_toolkit/libs/math/example/C_error_policy_example.cpp (contents, props changed)

Added: sandbox/math_toolkit/libs/math/example/C_error_policy_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/C_error_policy_example.cpp 2007-07-30 09:19:43 EDT (Mon, 30 Jul 2007)
@@ -0,0 +1,74 @@
+// 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::policy::policy;
+// Possible errors
+using boost::math::policy::overflow_error;
+using boost::math::policy::underflow_error;
+using boost::math::policy::domain_error;
+using boost::math::policy::pole_error;
+using boost::math::policy::denorm_error;
+using boost::math::policy::evaluation_error;
+
+using boost::math::policy::errno_on_error;
+//using boost::math::policy::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
+
+*/


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk