Boost logo

Boost-Commit :

From: john_at_[hidden]
Date: 2007-08-03 09:13:36


Author: johnmaddock
Date: 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
New Revision: 38414
URL: http://svn.boost.org/trac/boost/changeset/38414

Log:
Added new files
Added:
   sandbox/math_toolkit/libs/math/example/policy_eg_1.cpp (contents, props changed)
   sandbox/math_toolkit/libs/math/example/policy_eg_2.cpp (contents, props changed)
   sandbox/math_toolkit/libs/math/example/policy_eg_3.cpp (contents, props changed)
   sandbox/math_toolkit/libs/math/example/policy_eg_4.cpp (contents, props changed)
   sandbox/math_toolkit/libs/math/example/policy_eg_5.cpp (contents, props changed)

Added: sandbox/math_toolkit/libs/math/example/policy_eg_1.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/policy_eg_1.cpp 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,35 @@
+// 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)
+
+#include <iostream>
+
+//[policy_eg_1
+
+#include <boost/math/special_functions/gamma.hpp>
+//
+// Define the policy to use:
+//
+using namespace boost::math::policies;
+typedef policy<
+ domain_error<errno_on_error>,
+ pole_error<errno_on_error>,
+ overflow_error<errno_on_error>,
+ evaluation_error<errno_on_error>
+> c_policy;
+//
+// Now use the policy when calling tgamma:
+//
+int main()
+{
+ errno = 0;
+ std::cout << "Result of tgamma(30000) is: "
+ << boost::math::tgamma(30000, c_policy()) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+ std::cout << "Result of tgamma(-10) is: "
+ << boost::math::tgamma(-10, c_policy()) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+}
+
+//]
\ No newline at end of file

Added: sandbox/math_toolkit/libs/math/example/policy_eg_2.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/policy_eg_2.cpp 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,43 @@
+// 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)
+
+#include <iostream>
+
+//[policy_eg_2
+
+#include <boost/math/special_functions/gamma.hpp>
+
+int main()
+{
+ using namespace boost::math::policies;
+ errno = 0;
+ std::cout << "Result of tgamma(30000) is: "
+ << boost::math::tgamma(
+ 30000,
+ make_policy(
+ domain_error<errno_on_error>(),
+ pole_error<errno_on_error>(),
+ overflow_error<errno_on_error>(),
+ evaluation_error<errno_on_error>()
+ )
+ ) << std::endl;
+ // Check errno was set:
+ std::cout << "errno = " << errno << std::endl;
+ // and again with evaluation at a pole:
+ std::cout << "Result of tgamma(-10) is: "
+ << boost::math::tgamma(
+ -10,
+ make_policy(
+ domain_error<errno_on_error>(),
+ pole_error<errno_on_error>(),
+ overflow_error<errno_on_error>(),
+ evaluation_error<errno_on_error>()
+ )
+ ) << std::endl;
+ // Check errno was set:
+ std::cout << "errno = " << errno << std::endl;
+}
+
+//]
\ No newline at end of file

Added: sandbox/math_toolkit/libs/math/example/policy_eg_3.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/policy_eg_3.cpp 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,34 @@
+// 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)
+
+#include <iostream>
+
+//[policy_eg_3
+
+#include <boost/math/distributions/binomial.hpp>
+
+//
+// Begin by defining a policy type, that gives the
+// behaviour we want:
+//
+using namespace boost::math::policies;
+typedef policy<
+ promote_float<false>,
+ discrete_quantile<integer_nearest>
+> mypolicy;
+//
+// Then define a distribution that uses it:
+//
+typedef boost::math::binomial_distribution<float, mypolicy> mybinom;
+//
+// And now use it to get the quantile:
+//
+int main()
+{
+ std::cout << "quantile is: " <<
+ quantile(mybinom(200, 0.25), 0.05) << std::endl;
+}
+
+//]
\ No newline at end of file

Added: sandbox/math_toolkit/libs/math/example/policy_eg_4.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/policy_eg_4.cpp 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,101 @@
+// 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)
+
+// Note that this file contains quickbook markup as well as code
+// and comments, don't change any of the special comment markups!
+
+#include <iostream>
+
+//[policy_eg_4
+
+/*`
+Suppose we want `C::foo()` to behave in a C-compatible way and set
+`::errno` on error rather than throwing any exceptions.
+
+We'll begin by including the needed header:
+*/
+
+#include <boost/math/special_functions.hpp>
+
+/*`
+
+Open up the "C" namespace that we'll use for our functions, and
+define the policy type we want: in this case one that sets
+::errno rather than throwing exceptions. Any policies we don't
+specify here will inherit the defaults:
+
+*/
+
+namespace C{
+
+using namespace boost::math::policies;
+
+typedef policy<
+ domain_error<errno_on_error>,
+ pole_error<errno_on_error>,
+ overflow_error<errno_on_error>,
+ evaluation_error<errno_on_error>
+> c_policy;
+
+/*`
+
+All we need do now is invoke the BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS
+macro passing our policy type as the single argument:
+
+*/
+
+BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(c_policy)
+
+} // close namespace C
+
+/*`
+
+We now have a set of forwarding functions defined in namespace C
+that all look something like this:
+
+``
+template <class RealType>
+inline typename boost::math::tools::promote_args<RT>::type
+ tgamma(RT z)
+{
+ return boost::math::tgamma(z, c_policy());
+}
+``
+
+So that when we call `C::tgamma(z)` we really end up calling
+`boost::math::tgamma(z, C::c_policy())`:
+
+*/
+
+
+int main()
+{
+ errno = 0;
+ std::cout << "Result of tgamma(30000) is: "
+ << C::tgamma(30000) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+ std::cout << "Result of tgamma(-10) is: "
+ << C::tgamma(-10) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+}
+
+/*`
+
+Which outputs:
+
+[pre
+Result of C::tgamma(30000) is: 1.#INF
+errno = 34
+Result of C::tgamma(-10) is: 1.#QNAN
+errno = 33
+]
+
+This mechanism is particularly useful when we want to define a
+project-wide policy, and don't want to modify the Boost source
+or set - possibly fragile and easy to forget - project wide
+build macros.
+
+*/ //] ends quickbook imported section
+

Added: sandbox/math_toolkit/libs/math/example/policy_eg_5.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/example/policy_eg_5.cpp 2007-08-03 09:13:34 EDT (Fri, 03 Aug 2007)
@@ -0,0 +1,41 @@
+// 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)
+
+// Note that this file contains quickbook markup as well as code
+// and comments, don't change any of the special comment markups!
+
+#include <iostream>
+
+//[policy_eg_5
+
+#include <boost/math/special_functions.hpp>
+
+namespace {
+
+using namespace boost::math::policies;
+
+typedef policy<
+ domain_error<errno_on_error>,
+ pole_error<errno_on_error>,
+ overflow_error<errno_on_error>,
+ evaluation_error<errno_on_error>
+> c_policy;
+
+BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(c_policy)
+
+} // close unnamed namespace
+
+int main()
+{
+ errno = 0;
+ std::cout << "Result of tgamma(30000) is: "
+ << tgamma(30000) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+ std::cout << "Result of tgamma(-10) is: "
+ << tgamma(-10) << std::endl;
+ std::cout << "errno = " << errno << std::endl;
+}
+
+//]


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