Boost logo

Boost-Commit :

From: johnmaddock_at_[hidden]
Date: 2007-07-12 11:57:13


Author: johnmaddock
Date: 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
New Revision: 7417
URL: http://svn.boost.org/trac/boost/changeset/7417

Log:
Big Policy-enabling update: all the distributions along with the special functions that they rely on are now policy-enabled.

Added:
   sandbox/math_toolkit/policy/boost/math/distributions/detail/inv_discrete_quantile.hpp
   sandbox/math_toolkit/policy/libs/math/test/binomial_quantile.ipp
   sandbox/math_toolkit/policy/libs/math/test/negative_binomial_quantile.ipp
   sandbox/math_toolkit/policy/libs/math/test/poisson_quantile.ipp
Text files modified:
   sandbox/math_toolkit/policy/boost/math/concepts/real_concept.hpp | 28 ++
   sandbox/math_toolkit/policy/boost/math/concepts/std_real_concept.hpp | 16 +
   sandbox/math_toolkit/policy/boost/math/distributions/bernoulli.hpp | 116 +++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/beta.hpp | 229 +++++++++++---------
   sandbox/math_toolkit/policy/boost/math/distributions/binomial.hpp | 431 +++++++++++++++------------------------
   sandbox/math_toolkit/policy/boost/math/distributions/cauchy.hpp | 139 +++++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/chi_squared.hpp | 139 ++++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/detail/common_error_handling.hpp | 26 +-
   sandbox/math_toolkit/policy/boost/math/distributions/detail/derived_accessors.hpp | 14
   sandbox/math_toolkit/policy/boost/math/distributions/exponential.hpp | 119 ++++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/extreme_value.hpp | 103 +++++----
   sandbox/math_toolkit/policy/boost/math/distributions/fisher_f.hpp | 174 ++++++++-------
   sandbox/math_toolkit/policy/boost/math/distributions/gamma.hpp | 153 ++++++++------
   sandbox/math_toolkit/policy/boost/math/distributions/lognormal.hpp | 119 ++++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/negative_binomial.hpp | 329 +++++++++++++++++++-----------
   sandbox/math_toolkit/policy/boost/math/distributions/normal.hpp | 71 +++---
   sandbox/math_toolkit/policy/boost/math/distributions/pareto.hpp | 213 +++++++++++--------
   sandbox/math_toolkit/policy/boost/math/distributions/poisson.hpp | 295 +++++++++++++++++++-------
   sandbox/math_toolkit/policy/boost/math/distributions/rayleigh.hpp | 116 +++++-----
   sandbox/math_toolkit/policy/boost/math/distributions/students_t.hpp | 140 ++++++------
   sandbox/math_toolkit/policy/boost/math/distributions/triangular.hpp | 179 ++++++++-------
   sandbox/math_toolkit/policy/boost/math/distributions/uniform.hpp | 149 ++++++------
   sandbox/math_toolkit/policy/boost/math/distributions/weibull.hpp | 166 ++++++++------
   sandbox/math_toolkit/policy/boost/math/policy/error_handling.hpp | 5
   sandbox/math_toolkit/policy/boost/math/policy/policy.hpp | 31 ++
   sandbox/math_toolkit/policy/boost/math/special_functions/bessel.hpp | 4
   sandbox/math_toolkit/policy/boost/math/special_functions/beta.hpp | 401 +++++++++++++++++++++++--------------
   sandbox/math_toolkit/policy/boost/math/special_functions/detail/erf_inv.hpp | 21 +
   sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inv_ab.hpp | 58 +++-
   sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inverse.hpp | 133 +++++++-----
   sandbox/math_toolkit/policy/boost/math/special_functions/detail/igamma_inverse.hpp | 12
   sandbox/math_toolkit/policy/boost/math/special_functions/detail/t_distribution_inv.hpp | 80 +++---
   sandbox/math_toolkit/policy/boost/math/special_functions/erf.hpp | 20 +
   sandbox/math_toolkit/policy/boost/math/special_functions/expm1.hpp | 10
   sandbox/math_toolkit/policy/boost/math/special_functions/gamma.hpp | 108 ++++++++-
   sandbox/math_toolkit/policy/boost/math/special_functions/lanczos.hpp | 4
   sandbox/math_toolkit/policy/boost/math/special_functions/math_fwd.hpp | 10
   sandbox/math_toolkit/policy/boost/math/tools/ntl.hpp | 17 +
   sandbox/math_toolkit/policy/boost/math/tools/toms748_solve.hpp | 24 ++
   sandbox/math_toolkit/policy/libs/math/test/Jamfile.v2 | 3
   sandbox/math_toolkit/policy/libs/math/test/compile_test/distribution_concept_check.cpp | 18 +
   sandbox/math_toolkit/policy/libs/math/test/compile_test/instantiate.hpp | 4
   sandbox/math_toolkit/policy/libs/math/test/compile_test/std_real_concept_check.cpp | 2
   sandbox/math_toolkit/policy/libs/math/test/test_beta.cpp | 8
   sandbox/math_toolkit/policy/libs/math/test/test_binomial.cpp | 65 ++++++
   sandbox/math_toolkit/policy/libs/math/test/test_cauchy.cpp | 1
   sandbox/math_toolkit/policy/libs/math/test/test_chi_squared.cpp | 1
   sandbox/math_toolkit/policy/libs/math/test/test_factorials.cpp | 4
   sandbox/math_toolkit/policy/libs/math/test/test_gamma_dist.cpp | 2
   sandbox/math_toolkit/policy/libs/math/test/test_ibeta.cpp | 8
   sandbox/math_toolkit/policy/libs/math/test/test_ibeta_inv_ab.cpp | 2
   sandbox/math_toolkit/policy/libs/math/test/test_negative_binomial.cpp | 75 ++++++
   sandbox/math_toolkit/policy/libs/math/test/test_pareto.cpp | 4
   sandbox/math_toolkit/policy/libs/math/test/test_poisson.cpp | 68 ++++++
   sandbox/math_toolkit/policy/libs/math/test/test_roots.cpp | 35 +-
   55 files changed, 2807 insertions(+), 1895 deletions(-)

Modified: sandbox/math_toolkit/policy/boost/math/concepts/real_concept.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/concepts/real_concept.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/concepts/real_concept.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -351,6 +351,34 @@
    // and by Boost lexical cast and serialization causing loss of accuracy.
 }
 
+template <>
+inline int digits<concepts::real_concept, policy<detail::forwarding_arg1, detail::forwarding_arg2 > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<real> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<integer_below> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<integer_above> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<integer_outside> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<integer_inside> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
+template <>
+inline int digits<concepts::real_concept, policy<discrete_quantile<integer_nearest> > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
+{ return digits<concepts::real_concept, policy<> >(); }
+
 }
 
 } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/concepts/std_real_concept.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/concepts/std_real_concept.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/concepts/std_real_concept.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -20,6 +20,7 @@
 #include <boost/limits.hpp>
 #include <boost/math/tools/real_cast.hpp>
 #include <boost/math/tools/precision.hpp>
+#include <boost/math/policy/policy.hpp>
 
 #include <ostream>
 #include <istream>
@@ -337,6 +338,21 @@
 
 } // namespace tools
 
+namespace policy{
+
+template <>
+inline int digits<concepts::std_real_concept, boost::math::policy::policy<> >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::std_real_concept))
+{ // Assume number of significand bits is same as long double,
+ // unless std::numeric_limits<T>::is_specialized to provide digits.
+ return tools::digits<long double>();
+}
+template <>
+inline int digits<concepts::std_real_concept, policy<detail::forwarding_arg1, detail::forwarding_arg2 > >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::std_real_concept))
+{ return digits<concepts::std_real_concept, policy<> >(); }
+
+
+}
+
 } // namespace math
 } // namespace boost
 

Modified: sandbox/math_toolkit/policy/boost/math/distributions/bernoulli.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/bernoulli.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/bernoulli.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -48,44 +48,43 @@
     namespace bernoulli_detail
     {
       // Common error checking routines for bernoulli distribution functions:
- template <class RealType>
- inline bool check_success_fraction(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p);
+ "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, Policy());
           return false;
         }
         return true;
       }
- template <class RealType>
- inline bool check_dist(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist(const char* function, const RealType& p, RealType* result, const Policy& pol)
       {
- return check_success_fraction(function, p, result);
-
+ return check_success_fraction(function, p, result, Policy());
       }
- template <class RealType>
- inline bool check_dist_and_k(const char* function, const RealType& p, RealType k, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_k(const char* function, const RealType& p, RealType k, RealType* result, const Policy& pol)
       {
- if(check_dist(function, p, result) == false)
+ if(check_dist(function, p, result, Policy()) == false)
         {
           return false;
         }
         if(!(boost::math::isfinite)(k) || !((k == 0) || (k == 1)))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Number of successes argument is %1%, but must be 0 or 1 !", k);
+ "Number of successes argument is %1%, but must be 0 or 1 !", k, pol);
           return false;
         }
        return true;
       }
- template <class RealType>
- inline bool check_dist_and_prob(const char* function, RealType p, RealType prob, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_prob(const char* function, RealType p, RealType prob, RealType* result, const Policy& Pol)
       {
- if(check_dist(function, p, result) && detail::check_probability(function, prob, result) == false)
+ if(check_dist(function, p, result, Policy()) && detail::check_probability(function, prob, result, Policy()) == false)
         {
           return false;
         }
@@ -94,20 +93,21 @@
     } // namespace bernoulli_detail
 
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class bernoulli_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       bernoulli_distribution(RealType p = 0.5) : m_p(p)
       { // Default probability = half suits 'fair' coin tossing
         // where probability of heads == probability of tails.
         RealType result; // of checks.
         bernoulli_detail::check_dist(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::bernoulli_distribution<%1%>::bernoulli_distribution",
           m_p,
- &result);
+ &result, Policy());
       } // bernoulli_distribution constructor.
 
       RealType success_fraction() const
@@ -121,50 +121,50 @@
 
     typedef bernoulli_distribution<double> bernoulli;
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const bernoulli_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const bernoulli_distribution<RealType, Policy>& /* dist */)
     { // Range of permissible values for random variable k = {0, 1}.
       using boost::math::tools::max_value;
       return std::pair<RealType, RealType>(0, 1);
     }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const bernoulli_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const bernoulli_distribution<RealType, Policy>& /* dist */)
     { // Range of supported values for random variable k = {0, 1}.
       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
       return std::pair<RealType, RealType>(0, 1);
     }
 
- template <class RealType>
- inline RealType mean(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const bernoulli_distribution<RealType, Policy>& dist)
     { // Mean of bernoulli distribution = p (n = 1).
       return dist.success_fraction();
     } // mean
 
     // Rely on dereived_accessors quantile(half)
     //template <class RealType>
- //inline RealType median(const bernoulli_distribution<RealType>& dist)
+ //inline RealType median(const bernoulli_distribution<RealType, Policy>& dist)
     //{ // Median of bernoulli distribution is not defined.
     // return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
     //} // median
 
- template <class RealType>
- inline RealType variance(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const bernoulli_distribution<RealType, Policy>& dist)
     { // Variance of bernoulli distribution =p * q.
       return dist.success_fraction() * (1 - dist.success_fraction());
     } // variance
 
- template <class RealType>
- RealType pdf(const bernoulli_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ RealType pdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType k)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
       // Error check:
       RealType result; // of checks.
       if(false == bernoulli_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::pdf(bernoulli_distribution<%1%>, %1%)",
         dist.success_fraction(), // 0 to 1
         k, // 0 or 1
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -179,17 +179,17 @@
       }
     } // pdf
 
- template <class RealType>
- inline RealType cdf(const bernoulli_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ inline RealType cdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType k)
     { // Cumulative Distribution Function Bernoulli.
       RealType p = dist.success_fraction();
       // Error check:
       RealType result;
       if(false == bernoulli_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(bernoulli_distribution<%1%>, %1%)",
         p,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -203,19 +203,19 @@
       }
     } // bernoulli cdf
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<bernoulli_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<bernoulli_distribution<RealType, Policy>, RealType>& c)
     { // Complemented Cumulative Distribution Function bernoulli.
       RealType const& k = c.param;
- bernoulli_distribution<RealType> const& dist = c.dist;
+ bernoulli_distribution<RealType, Policy> const& dist = c.dist;
       RealType p = dist.success_fraction();
       // Error checks:
       RealType result;
       if(false == bernoulli_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(bernoulli_distribution<%1%>, %1%)",
         p,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -229,18 +229,18 @@
       }
     } // bernoulli cdf complement
 
- template <class RealType>
- inline RealType quantile(const bernoulli_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ inline RealType quantile(const bernoulli_distribution<RealType, Policy>& dist, const RealType& p)
     { // Quantile or Percent Point Bernoulli function.
       // Return the number of expected successes k either 0 or 1.
       // for a given probability p.
 
       RealType result; // of error checks:
       if(false == bernoulli_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(bernoulli_distribution<%1%>, %1%)",
         dist.success_fraction(),
         p,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -254,21 +254,21 @@
       }
     } // quantile
 
- template <class RealType>
- inline RealType quantile(const complemented2_type<bernoulli_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<bernoulli_distribution<RealType, Policy>, RealType>& c)
     { // Quantile or Percent Point bernoulli function.
       // Return the number of expected successes k for a given
       // complement of the probability q.
       //
       // Error checks:
       RealType q = c.param;
- const bernoulli_distribution<RealType>& dist = c.dist;
+ const bernoulli_distribution<RealType, Policy>& dist = c.dist;
       RealType result;
       if(false == bernoulli_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(bernoulli_distribution<%1%>, %1%)",
         dist.success_fraction(),
         q,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -283,22 +283,22 @@
       }
     } // quantile complemented.
 
- template <class RealType>
- inline RealType mode(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const bernoulli_distribution<RealType, Policy>& dist)
     {
       return static_cast<RealType>((dist.success_fraction() <= 0.5) ? 0 : 1); // p = 0.5 can be 0 or 1
     }
 
- template <class RealType>
- inline RealType skewness(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const bernoulli_distribution<RealType, Policy>& dist)
     {
       using namespace std;; // Aid ADL for sqrt.
       RealType p = dist.success_fraction();
       return (1 - 2 * p) / sqrt(p * (1 - p));
     }
 
- template <class RealType>
- inline RealType kurtosis_excess(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const bernoulli_distribution<RealType, Policy>& dist)
     {
       RealType p = dist.success_fraction();
       // Note Wolfram says this is kurtosis in text, but gamma2 is the kurtosis excess,
@@ -308,8 +308,8 @@
       return 1 / (1 - p) + 1/p -6;
     }
 
- template <class RealType>
- inline RealType kurtosis(const bernoulli_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const bernoulli_distribution<RealType, Policy>& dist)
     {
       RealType p = dist.success_fraction();
       return 1 / (1 - p) + 1/p -6 + 3;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/beta.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/beta.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/beta.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -45,99 +45,99 @@
     namespace beta_detail
     {
       // Common error checking routines for beta distribution functions:
- template <class RealType>
- inline bool check_alpha(const char* function, const RealType& alpha, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_alpha(const char* function, const RealType& alpha, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(alpha) || (alpha <= 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Alpha argument is %1%, but must be > 0 !", alpha);
+ "Alpha argument is %1%, but must be > 0 !", alpha, pol);
           return false;
         }
         return true;
       } // bool check_alpha
 
- template <class RealType>
- inline bool check_beta(const char* function, const RealType& beta, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_beta(const char* function, const RealType& beta, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(beta) || (beta <= 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Beta argument is %1%, but must be > 0 !", beta);
+ "Beta argument is %1%, but must be > 0 !", beta, pol);
           return false;
         }
         return true;
       } // bool check_beta
 
- template <class RealType>
- inline bool check_prob(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_prob(const char* function, const RealType& p, RealType* result, const Policy& pol)
       {
         if((p < 0) || (p > 1) || !(boost::math::isfinite)(p))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Probability argument is %1%, but must be >= 0 and <= 1 !", p);
+ "Probability argument is %1%, but must be >= 0 and <= 1 !", p, pol);
           return false;
         }
         return true;
       } // bool check_prob
 
- template <class RealType>
- inline bool check_x(const char* function, const RealType& x, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_x(const char* function, const RealType& x, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(x) || (x < 0) || (x > 1))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "x argument is %1%, but must be >= 0 and <= 1 !", x);
+ "x argument is %1%, but must be >= 0 and <= 1 !", x, pol);
           return false;
         }
         return true;
       } // bool check_x
 
- template <class RealType>
- inline bool check_dist(const char* function, const RealType& alpha, const RealType& beta, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist(const char* function, const RealType& alpha, const RealType& beta, RealType* result, const Policy& pol)
       { // Check both alpha and beta.
- return check_alpha(function, alpha, result)
- && check_beta(function, beta, result);
+ return check_alpha(function, alpha, result, pol)
+ && check_beta(function, beta, result, pol);
       } // bool check_dist
 
- template <class RealType>
- inline bool check_dist_and_x(const char* function, const RealType& alpha, const RealType& beta, RealType x, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_x(const char* function, const RealType& alpha, const RealType& beta, RealType x, RealType* result, const Policy& pol)
       {
- return check_dist(function, alpha, beta, result)
- && check_x(function, x, result);
+ return check_dist(function, alpha, beta, result, pol)
+ && check_x(function, x, result, pol);
       } // bool check_dist_and_x
 
- template <class RealType>
- inline bool check_dist_and_prob(const char* function, const RealType& alpha, const RealType& beta, RealType p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_prob(const char* function, const RealType& alpha, const RealType& beta, RealType p, RealType* result, const Policy& pol)
       {
- return check_dist(function, alpha, beta, result)
- && check_prob(function, p, result);
+ return check_dist(function, alpha, beta, result, pol)
+ && check_prob(function, p, result, pol);
       } // bool check_dist_and_prob
 
- template <class RealType>
- inline bool check_mean(const char* function, const RealType& mean, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_mean(const char* function, const RealType& mean, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(mean) || (mean <= 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "mean argument is %1%, but must be > 0 !", mean);
+ "mean argument is %1%, but must be > 0 !", mean, pol);
           return false;
         }
         return true;
       } // bool check_mean
- template <class RealType>
- inline bool check_variance(const char* function, const RealType& variance, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_variance(const char* function, const RealType& variance, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(variance) || (variance <= 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "variance argument is %1%, but must be > 0 !", variance);
+ "variance argument is %1%, but must be > 0 !", variance, pol);
           return false;
         }
         return true;
@@ -148,20 +148,21 @@
     // is deliberately NOT included to avoid a name clash with the beta function.
     // Use beta_distribution<> mybeta(...) to construct type double.
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class beta_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       beta_distribution(RealType alpha = 1, RealType beta = 1) : m_alpha(alpha), m_beta(beta)
       {
         RealType result;
         beta_detail::check_dist(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::beta_distribution<%1%>::beta_distribution",
           m_alpha,
           m_beta,
- &result);
+ &result, Policy());
       } // beta_distribution constructor.
       // Accessor functions:
       RealType alpha() const
@@ -184,13 +185,14 @@
         RealType mean, // Expected value of mean.
         RealType variance) // Expected value of variance.
       {
+ static const char* function = "boost::math::beta_distribution<%1%>::estimate_alpha";
         RealType result; // of error checks.
         if(false ==
           beta_detail::check_mean(
- BOOST_CURRENT_FUNCTION, mean, &result)
+ function, mean, &result, Policy())
           &&
           beta_detail::check_variance(
- BOOST_CURRENT_FUNCTION, variance, &result)
+ function, variance, &result, Policy())
           )
         {
           return result;
@@ -202,13 +204,14 @@
         RealType mean, // Expected value of mean.
         RealType variance) // Expected value of variance.
       {
+ static const char* function = "boost::math::beta_distribution<%1%>::estimate_beta";
         RealType result; // of error checks.
         if(false ==
           beta_detail::check_mean(
- BOOST_CURRENT_FUNCTION, mean, &result)
+ function, mean, &result, Policy())
           &&
           beta_detail::check_variance(
- BOOST_CURRENT_FUNCTION, variance, &result)
+ function, variance, &result, Policy())
           )
         {
           return result;
@@ -224,21 +227,22 @@
         RealType x, // x.
         RealType probability) // cdf
       {
+ static const char* function = "boost::math::beta_distribution<%1%>::estimate_alpha";
         RealType result; // of error checks.
         if(false ==
           beta_detail::check_prob(
- BOOST_CURRENT_FUNCTION, probability, &result)
+ function, probability, &result, Policy())
           &&
           beta_detail::check_beta(
- BOOST_CURRENT_FUNCTION, beta, &result)
+ function, beta, &result, Policy())
           &&
           beta_detail::check_x(
- BOOST_CURRENT_FUNCTION, x, &result)
+ function, x, &result, Policy())
           )
         {
           return result;
         }
- return ibeta_inva(beta, x, probability);
+ return ibeta_inva(beta, x, probability, Policy());
       } // RealType estimate_alpha(beta, a, probability)
 
       static RealType estimate_beta(
@@ -247,73 +251,76 @@
         RealType x, // probability x.
         RealType probability) // probability cdf.
       {
+ static const char* function = "boost::math::beta_distribution<%1%>::estimate_beta";
         RealType result; // of error checks.
         if(false ==
           beta_detail::check_prob(
- BOOST_CURRENT_FUNCTION, probability, &result)
+ function, probability, &result, Policy())
           &&
           beta_detail::check_alpha(
- BOOST_CURRENT_FUNCTION, alpha, &result)
+ function, alpha, &result, Policy())
           &&
           beta_detail::check_x(
- BOOST_CURRENT_FUNCTION, x, &result)
+ function, x, &result, Policy())
           )
         {
           return result;
         }
- return ibeta_invb(alpha, x, probability);
+ return ibeta_invb(alpha, x, probability, Policy());
       } // RealType estimate_beta(alpha, x, probability)
 
     private:
       RealType m_alpha; // Two parameters of the beta distribution.
       RealType m_beta;
- }; // template <class RealType> class beta_distribution
+ }; // template <class RealType, class Policy> class beta_distribution
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const beta_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const beta_distribution<RealType, Policy>& /* dist */)
     { // Range of permissible values for random variable x.
       using boost::math::tools::max_value;
       return std::pair<RealType, RealType>(0, 1);
     }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const beta_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const beta_distribution<RealType, Policy>& /* dist */)
     { // Range of supported values for random variable x.
       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
       return std::pair<RealType, RealType>(0, 1);
     }
 
- template <class RealType>
- inline RealType mean(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const beta_distribution<RealType, Policy>& dist)
     { // Mean of beta distribution = np.
       return dist.alpha() / (dist.alpha() + dist.beta());
     } // mean
 
- template <class RealType>
- inline RealType variance(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const beta_distribution<RealType, Policy>& dist)
     { // Variance of beta distribution = np(1-p).
       RealType a = dist.alpha();
       RealType b = dist.beta();
       return (a * b) / ((a + b ) * (a + b) * (a + b + 1));
     } // variance
 
- template <class RealType>
- inline RealType mode(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const beta_distribution<RealType, Policy>& dist)
     {
+ static const char* function = "boost::math::mode(beta_distribution<%1%> const&)";
+
       RealType result;
       if ((dist.alpha() <= 1))
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "mode undefined for alpha = %1%, must be > 1!", dist.alpha());
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "mode undefined for alpha = %1%, must be > 1!", dist.alpha(), Policy());
         return result;
       }
 
       if ((dist.beta() <= 1))
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "mode undefined for beta = %1%, must be > 1!", dist.beta());
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "mode undefined for beta = %1%, must be > 1!", dist.beta(), Policy());
         return result;
       }
       RealType a = dist.alpha();
@@ -321,16 +328,16 @@
       return (a-1) / (a + b - 2);
     } // mode
 
- //template <class RealType>
- //inline RealType median(const beta_distribution<RealType>& dist)
+ //template <class RealType, class Policy>
+ //inline RealType median(const beta_distribution<RealType, Policy>& dist)
     //{ // Median of beta distribution is not defined.
- // return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
+ // return tools::domain_error<RealType>(function, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
     //} // median
 
     //But WILL be provided by the derived accessor as quantile(0.5).
 
- template <class RealType>
- inline RealType skewness(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const beta_distribution<RealType, Policy>& dist)
     {
       using namespace std; // ADL of std functions.
       RealType a = dist.alpha();
@@ -338,8 +345,8 @@
       return (2 * (b-a) * sqrt(a + b + 1)) / ((a + b + 2) * sqrt(a * b));
     } // skewness
 
- template <class RealType>
- inline RealType kurtosis_excess(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const beta_distribution<RealType, Policy>& dist)
     {
       RealType a = dist.alpha();
       RealType b = dist.beta();
@@ -349,18 +356,19 @@
       return n / d;
     } // kurtosis_excess
 
- template <class RealType>
- inline RealType kurtosis(const beta_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const beta_distribution<RealType, Policy>& dist)
     {
       return 3 + kurtosis_excess(dist);
     } // kurtosis
 
- template <class RealType>
- inline RealType pdf(const beta_distribution<RealType>& dist, const RealType x)
+ template <class RealType, class Policy>
+ inline RealType pdf(const beta_distribution<RealType, Policy>& dist, const RealType x)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
 
- using boost::math::tools::domain_error;
+ static const char* function = "boost::math::pdf(beta_distribution<%1%> const&, %1%)";
+
       using namespace std; // for ADL of std functions
 
       RealType a = dist.alpha();
@@ -369,31 +377,32 @@
       // Argument checks:
       RealType result;
       if(false == beta_detail::check_dist_and_x(
- BOOST_CURRENT_FUNCTION,
+ function,
         a, b, x,
- &result))
+ &result, Policy()))
       {
         return result;
       }
       using boost::math::beta;
- return ibeta_derivative(a, b, x);
+ return ibeta_derivative(a, b, x, Policy());
     } // pdf
 
- template <class RealType>
- inline RealType cdf(const beta_distribution<RealType>& dist, const RealType x)
+ template <class RealType, class Policy>
+ inline RealType cdf(const beta_distribution<RealType, Policy>& dist, const RealType x)
     { // Cumulative Distribution Function beta.
- using boost::math::tools::domain_error;
       using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(beta_distribution<%1%> const&, %1%)";
+
       RealType a = dist.alpha();
       RealType b = dist.beta();
 
       // Argument checks:
       RealType result;
       if(false == beta_detail::check_dist_and_x(
- BOOST_CURRENT_FUNCTION,
+ function,
         a, b, x,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -406,27 +415,28 @@
       {
         return 1;
       }
- return ibeta(a, b, x);
+ return ibeta(a, b, x, Policy());
     } // beta cdf
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<beta_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<beta_distribution<RealType, Policy>, RealType>& c)
     { // Complemented Cumulative Distribution Function beta.
 
- using boost::math::tools::domain_error;
       using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(beta_distribution<%1%> const&, %1%)";
+
       RealType const& x = c.param;
- beta_distribution<RealType> const& dist = c.dist;
+ beta_distribution<RealType, Policy> const& dist = c.dist;
       RealType a = dist.alpha();
       RealType b = dist.beta();
 
       // Argument checks:
       RealType result;
       if(false == beta_detail::check_dist_and_x(
- BOOST_CURRENT_FUNCTION,
+ function,
         a, b, x,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -441,11 +451,11 @@
       // Calculate cdf beta using the incomplete beta function.
       // Use of ibeta here prevents cancellation errors in calculating
       // 1 - x if x is very small, perhaps smaller than machine epsilon.
- return ibetac(a, b, x);
+ return ibetac(a, b, x, Policy());
     } // beta cdf
 
- template <class RealType>
- inline RealType quantile(const beta_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ inline RealType quantile(const beta_distribution<RealType, Policy>& dist, const RealType& p)
     { // Quantile or Percent Point beta function or
       // Inverse Cumulative probability distribution function CDF.
       // Return x (0 <= x <= 1),
@@ -455,13 +465,15 @@
       // will be less than or equal to that value
       // is whatever probability you supplied as an argument.
 
+ static const char* function = "boost::math::quantile(beta_distribution<%1%> const&, %1%)";
+
       RealType result; // of argument checks:
       RealType a = dist.alpha();
       RealType b = dist.beta();
       if(false == beta_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
+ function,
         a, b, p,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -474,27 +486,30 @@
       {
         return 1;
       }
- return ibeta_inv(a, b, p);
+ return ibeta_inv(a, b, p, static_cast<RealType*>(0), Policy());
     } // quantile
 
- template <class RealType>
- inline RealType quantile(const complemented2_type<beta_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<beta_distribution<RealType, Policy>, RealType>& c)
     { // Complement Quantile or Percent Point beta function .
       // Return the number of expected x for a given
       // complement of the probability q.
+
+ static const char* function = "boost::math::quantile(beta_distribution<%1%> const&, %1%)";
+
       //
       // Error checks:
       RealType q = c.param;
- const beta_distribution<RealType>& dist = c.dist;
+ const beta_distribution<RealType, Policy>& dist = c.dist;
       RealType result;
       RealType a = dist.alpha();
       RealType b = dist.beta();
       if(false == beta_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
+ function,
         a,
         b,
         q,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -508,7 +523,7 @@
         return 1;
       }
 
- return ibetac_inv(a, b, q);
+ return ibetac_inv(a, b, q, static_cast<RealType*>(0), Policy());
     } // Quantile Complement
 
   } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/distributions/binomial.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/binomial.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/binomial.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -83,6 +83,7 @@
 #include <boost/math/special_functions/beta.hpp> // for incomplete beta.
 #include <boost/math/distributions/complement.hpp> // complements
 #include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
+#include <boost/math/distributions/detail/inv_discrete_quantile.hpp> // error checks
 #include <boost/math/special_functions/fpclassify.hpp> // isnan.
 #include <boost/math/tools/roots.hpp> // for root finding.
 
@@ -98,71 +99,75 @@
 {
   namespace math
   {
+
+ template <class RealType, class Policy>
+ class binomial_distribution;
+
      namespace binomial_detail{
         // common error checking routines for binomial distribution functions:
- template <class RealType>
- inline bool check_N(const char* function, const RealType& N, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_N(const char* function, const RealType& N, RealType* result, const Policy& pol)
         {
            if((N < 0) || !(boost::math::isfinite)(N))
            {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
                   function,
- "Number of Trials argument is %1%, but must be >= 0 !", N);
+ "Number of Trials argument is %1%, but must be >= 0 !", N, pol);
                return false;
            }
            return true;
         }
- template <class RealType>
- inline bool check_success_fraction(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
         {
            if((p < 0) || (p > 1) || !(boost::math::isfinite)(p))
            {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
                   function,
- "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p);
+ "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, pol);
                return false;
            }
            return true;
         }
- template <class RealType>
- inline bool check_dist(const char* function, const RealType& N, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist(const char* function, const RealType& N, const RealType& p, RealType* result, const Policy& pol)
         {
            return check_success_fraction(
- function, p, result)
+ function, p, result, pol)
               && check_N(
- function, N, result);
+ function, N, result, pol);
         }
- template <class RealType>
- inline bool check_dist_and_k(const char* function, const RealType& N, const RealType& p, RealType k, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_k(const char* function, const RealType& N, const RealType& p, RealType k, RealType* result, const Policy& pol)
         {
- if(check_dist(function, N, p, result) == false)
+ if(check_dist(function, N, p, result, pol) == false)
               return false;
            if((k < 0) || !(boost::math::isfinite)(k))
            {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
                   function,
- "Number of Successes argument is %1%, but must be >= 0 !", k);
+ "Number of Successes argument is %1%, but must be >= 0 !", k, pol);
                return false;
            }
            if(k > N)
            {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
                   function,
- "Number of Successes argument is %1%, but must be <= Number of Trials !", k);
+ "Number of Successes argument is %1%, but must be <= Number of Trials !", k, pol);
                return false;
            }
            return true;
         }
- template <class RealType>
- inline bool check_dist_and_prob(const char* function, const RealType& N, RealType p, RealType prob, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_prob(const char* function, const RealType& N, RealType p, RealType prob, RealType* result, const Policy& pol)
         {
- if(check_dist(function, N, p, result) && detail::check_probability(function, prob, result) == false)
+ if(check_dist(function, N, p, result, pol) && detail::check_probability(function, prob, result, pol) == false)
               return false;
            return true;
         }
 
- template <class T>
- T inverse_binomial_cornish_fisher(T n, T sf, T p, T q)
+ template <class T, class Policy>
+ T inverse_binomial_cornish_fisher(T n, T sf, T p, T q, const Policy& pol)
          {
             using namespace std;
             // mean:
@@ -174,7 +179,7 @@
             // kurtosis:
             // T k = (1 - 6 * sf * (1 - sf) ) / (n * sf * (1 - sf));
             // Get the inverse of a std normal distribution:
- T x = boost::math::erfc_inv(p > q ? 2 * q : 2 * p) * constants::root_two<T>();
+ T x = boost::math::erfc_inv(p > q ? 2 * q : 2 * p, pol) * constants::root_two<T>();
             // Set the sign:
             if(p < 0.5)
                x = -x;
@@ -196,27 +201,102 @@
             return w;
          }
 
+ template <class RealType, class Policy>
+ RealType quantile_imp(const binomial_distribution<RealType, Policy>& dist, const RealType& p, const RealType& q)
+ { // Quantile or Percent Point Binomial function.
+ // Return the number of expected successes k,
+ // for a given probability p.
+ //
+ // Error checks:
+ using namespace std; // ADL of std names
+ RealType result;
+ RealType trials = dist.trials();
+ RealType success_fraction = dist.success_fraction();
+ if(false == binomial_detail::check_dist_and_prob(
+ "boost::math::quantile(binomial_distribution<%1%> const&, %1%)",
+ trials,
+ success_fraction,
+ p,
+ &result, Policy()))
+ {
+ return result;
+ }
+
+ // Special cases:
+ //
+ if(p == 0)
+ { // There may actually be no answer to this question,
+ // since the probability of zero successes may be non-zero,
+ // but zero is the best we can do:
+ return 0;
+ }
+ if(p == 1)
+ { // Probability of n or fewer successes is always one,
+ // so n is the most sensible answer here:
+ return trials;
+ }
+ if (p <= pow(1 - success_fraction, trials))
+ { // p <= pdf(dist, 0) == cdf(dist, 0)
+ return 0; // So the only reasonable result is zero.
+ } // And root finder would fail otherwise.
+
+ // Solve for quantile numerically:
+ //
+ RealType guess = binomial_detail::inverse_binomial_cornish_fisher(trials, success_fraction, p, q, Policy());
+ RealType factor = 8;
+ if(trials > 100)
+ factor = 1.01f; // guess is pretty accurate
+ else if((trials > 10) && (trials - 1 > guess) && (guess > 3))
+ factor = 1.15f; // less accurate but OK.
+ else if(trials < 10)
+ {
+ // pretty inaccurate guess in this area:
+ if(guess > trials / 64)
+ {
+ guess = trials / 4;
+ factor = 2;
+ }
+ else
+ guess = trials / 1024;
+ }
+ else
+ factor = 2; // trials largish, but in far tails.
+
+ typedef typename Policy::discrete_quantile_type discrete_quantile_type;
+ boost::uintmax_t max_iter = 1000;
+ return detail::inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ guess,
+ factor,
+ RealType(1),
+ discrete_quantile_type(),
+ max_iter);
+ } // quantile
+
      }
 
     // typedef binomial_distribution<double> binomial;
     // is deliberately NOT included to avoid a name clash with function.
     //typedef binomial_distribution<double> binomial; // Reserved name of type double.
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class binomial_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       binomial_distribution(RealType n = 1, RealType p = 0.5) : m_n(n), m_p(p)
       { // Default n = 1 is the Bernoulli distribution
         // with equal probability of 'heads' or 'tails.
          RealType r;
          binomial_detail::check_dist(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::binomial_distribution<%1%>::binomial_distribution",
             m_n,
             m_p,
- &r);
+ &r, Policy());
       } // binomial_distribution constructor.
 
       RealType success_fraction() const
@@ -245,13 +325,14 @@
          RealType probability,
          interval_type t = clopper_pearson_exact_interval)
       {
+ static const char* function = "boost::math::binomial_distribution<%1%>::estimate_lower_bound_on_p";
         // Error checks:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, trials, RealType(0), successes, &result)
+ function, trials, RealType(0), successes, &result, Policy())
             &&
            binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION, trials, RealType(0), probability, &result))
+ function, trials, RealType(0), probability, &result, Policy()))
         { return result; }
 
         if(successes == 0)
@@ -260,8 +341,8 @@
         // NOTE!!! The Clopper Pearson formula uses "successes" not
         // "successes+1" as usual to get the lower bound,
         // see http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
- return (t == clopper_pearson_exact_interval) ? ibeta_inv(successes, trials - successes + 1, probability)
- : ibeta_inv(successes + 0.5f, trials - successes + 0.5f, probability);
+ return (t == clopper_pearson_exact_interval) ? ibeta_inv(successes, trials - successes + 1, probability, static_cast<RealType*>(0), Policy())
+ : ibeta_inv(successes + 0.5f, trials - successes + 0.5f, probability, static_cast<RealType*>(0), Policy());
       }
       static RealType estimate_upper_bound_on_p(
          RealType trials,
@@ -269,20 +350,21 @@
          RealType probability,
          interval_type t = clopper_pearson_exact_interval)
       {
+ static const char* function = "boost::math::binomial_distribution<%1%>::estimate_upper_bound_on_p";
         // Error checks:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, trials, RealType(0), successes, &result)
+ function, trials, RealType(0), successes, &result, Policy())
             &&
            binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION, trials, RealType(0), probability, &result))
+ function, trials, RealType(0), probability, &result, Policy()))
         { return result; }
 
         if(trials == successes)
            return 1;
 
- return (t == clopper_pearson_exact_interval) ? ibetac_inv(successes + 1, trials - successes, probability)
- : ibetac_inv(successes + 0.5f, trials - successes + 0.5f, probability);
+ return (t == clopper_pearson_exact_interval) ? ibetac_inv(successes + 1, trials - successes, probability, static_cast<RealType*>(0), Policy())
+ : ibetac_inv(successes + 0.5f, trials - successes + 0.5f, probability, static_cast<RealType*>(0), Policy());
       }
       // Estimate number of trials parameter:
       //
@@ -295,16 +377,17 @@
          RealType p, // success fraction
          RealType alpha) // risk level
       {
+ static const char* function = "boost::math::binomial_distribution<%1%>::estimate_minimum_number_of_trials";
         // Error checks:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, k, p, k, &result)
+ function, k, p, k, &result, Policy())
             &&
            binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION, k, p, alpha, &result))
+ function, k, p, alpha, &result, Policy()))
         { return result; }
 
- result = ibetac_invb(k + 1, p, alpha); // returns n - k
+ result = ibetac_invb(k + 1, p, alpha, Policy()); // returns n - k
         return result + k;
       }
 
@@ -313,56 +396,56 @@
          RealType p, // success fraction
          RealType alpha) // risk level
       {
+ static const char* function = "boost::math::binomial_distribution<%1%>::estimate_maximum_number_of_trials";
         // Error checks:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, k, p, k, &result)
+ function, k, p, k, &result, Policy())
             &&
            binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION, k, p, alpha, &result))
+ function, k, p, alpha, &result, Policy()))
         { return result; }
 
- result = ibeta_invb(k + 1, p, alpha); // returns n - k
+ result = ibeta_invb(k + 1, p, alpha, Policy()); // returns n - k
         return result + k;
       }
 
     private:
         RealType m_n; // Not sure if this shouldn't be an int?
         RealType m_p; // success_fraction
- }; // template <class RealType> class binomial_distribution
+ }; // template <class RealType, class Policy> class binomial_distribution
 
- template <class RealType>
- const std::pair<RealType, RealType> range(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ const std::pair<RealType, RealType> range(const binomial_distribution<RealType, Policy>& dist)
       { // Range of permissible values for random variable k.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(static_cast<RealType>(0), dist.trials());
       }
 
- template <class RealType>
- const std::pair<RealType, RealType> support(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ const std::pair<RealType, RealType> support(const binomial_distribution<RealType, Policy>& dist)
       { // Range of supported values for random variable k.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         return std::pair<RealType, RealType>(0, dist.trials());
       }
 
- template <class RealType>
- inline RealType mean(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const binomial_distribution<RealType, Policy>& dist)
       { // Mean of Binomial distribution = np.
         return dist.trials() * dist.success_fraction();
       } // mean
 
- template <class RealType>
- inline RealType variance(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const binomial_distribution<RealType, Policy>& dist)
       { // Variance of Binomial distribution = np(1-p).
         return dist.trials() * dist.success_fraction() * (1 - dist.success_fraction());
       } // variance
 
- template <class RealType>
- RealType pdf(const binomial_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ RealType pdf(const binomial_distribution<RealType, Policy>& dist, const RealType k)
       { // Probability Density/Mass Function.
         BOOST_FPU_EXCEPTION_GUARD
 
- using boost::math::tools::domain_error;
         using namespace std; // for ADL of std functions
 
         RealType n = dist.trials();
@@ -370,11 +453,11 @@
         // Error check:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::pdf(binomial_distribution<%1%> const&, %1%)",
            n,
            dist.success_fraction(),
            k,
- &result))
+ &result, Policy()))
         {
            return result;
         }
@@ -415,12 +498,12 @@
         // = ibeta_derivative(k+1, n-k+1, p) / (n+1)
         //
         using boost::math::ibeta_derivative; // a, b, x
- return ibeta_derivative(k+1, n-k+1, dist.success_fraction()) / (n+1);
+ return ibeta_derivative(k+1, n-k+1, dist.success_fraction(), Policy()) / (n+1);
 
       } // pdf
 
- template <class RealType>
- inline RealType cdf(const binomial_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ inline RealType cdf(const binomial_distribution<RealType, Policy>& dist, const RealType k)
       { // Cumulative Distribution Function Binomial.
         // The random variate k is the number of successes in n trials.
         // k argument may be integral, signed, or unsigned, or floating point.
@@ -449,11 +532,11 @@
         // Error check:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(binomial_distribution<%1%> const&, %1%)",
            n,
            p,
            k,
- &result))
+ &result, Policy()))
         {
            return result;
         }
@@ -489,11 +572,11 @@
         // beta uses a finite sum internally for integer arguments, so
         // we'll just let it take care of the necessary logic.
         //
- return ibetac(k + 1, n - k, p);
+ return ibetac(k + 1, n - k, p, Policy());
       } // binomial cdf
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<binomial_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<binomial_distribution<RealType, Policy>, RealType>& c)
       { // Complemented Cumulative Distribution Function Binomial.
         // The random variate k is the number of successes in n trials.
         // k argument may be integral, signed, or unsigned, or floating point.
@@ -517,18 +600,18 @@
         using namespace std; // for ADL of std functions
 
         RealType const& k = c.param;
- binomial_distribution<RealType> const& dist = c.dist;
+ binomial_distribution<RealType, Policy> const& dist = c.dist;
         RealType n = dist.trials();
         RealType p = dist.success_fraction();
 
         // Error checks:
         RealType result;
         if(false == binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(binomial_distribution<%1%> const&, %1%)",
            n,
            p,
            k,
- &result))
+ &result, Policy()))
         {
            return result;
         }
@@ -567,199 +650,23 @@
         // beta uses a finite sum internally for integer arguments, so
         // we'll just let it take care of the necessary logic.
         //
- return ibeta(k + 1, n - k, p);
+ return ibeta(k + 1, n - k, p, Policy());
       } // binomial cdf
 
- namespace detail
- {
- template <class RealType>
- struct binomial_functor
- {
- binomial_functor(const binomial_distribution<RealType>& d, const RealType& target, bool c = false)
- : dist(d), t(target), complement(c) {}
-
- RealType operator()(const RealType k)
- {
- if(k >= dist.trials())
- return 1; // any positive value will do.
- return complement ? t - cdf(boost::math::complement(dist, k)) : cdf(dist, k) - t;
- }
- private:
- const binomial_distribution<RealType>& dist;
- RealType t;
- bool complement;
-
- binomial_functor& operator=(const binomial_functor&);
- }; // struct binomial_functor
- } // namespace detail
-
- template <class RealType>
- RealType quantile(const binomial_distribution<RealType>& dist, const RealType& p)
- { // Quantile or Percent Point Binomial function.
- // Return the number of expected successes k,
- // for a given probability p.
- //
- // Error checks:
- using namespace std; // ADL of std names
- RealType result;
- RealType trials = dist.trials();
- if(false == binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
- trials,
- dist.success_fraction(),
- p,
- &result))
- {
- return result;
- }
-
- // Special cases:
- //
- if(p == 0)
- { // There may actually be no answer to this question,
- // since the probability of zero successes may be non-zero,
- // but zero is the best we can do:
- return 0;
- }
- if(p == 1)
- { // Probability of n or fewer successes is always one,
- // so n is the most sensible answer here:
- return dist.trials();
- }
- if (p <= pow(1 - dist.success_fraction(), trials))
- { // p <= pdf(dist, 0) == cdf(dist, 0)
- return 0; // So the only reasonable result is zero.
- } // And root finder would fail otherwise.
-
- // Solve for quantile numerically:
- //
- RealType guess = binomial_detail::inverse_binomial_cornish_fisher(trials, dist.success_fraction(), p, 1-p);
- RealType factor = 8;
- if(trials > 100)
- factor = 1.01f; // guess is pretty accurate
- else if((trials > 10) && (trials - 1 > guess) && (guess > 3))
- factor = 1.15f; // less accurate but OK.
- else if(trials < 10)
- {
- // pretty inaccurate guess in this area:
- if(guess > trials / 64)
- {
- guess = trials / 4;
- factor = 2;
- }
- else
- guess = trials / 1024;
- }
- else
- factor = 2; // trials largish, but in far tails.
-
- detail::binomial_functor<RealType> f(dist, p);
- tools::eps_tolerance<RealType> tol(tools::digits<RealType>());
- boost::uintmax_t max_iter = 1000;
- std::pair<RealType, RealType> r = tools::bracket_and_solve_root(
- f,
- guess,
- factor,
- true,
- tol,
- max_iter,
- policy::policy<>());
- if(max_iter >= 1000)
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first);
- // return centre point of range found:
- return r.first + (r.second - r.first) / 2;
+ template <class RealType, class Policy>
+ inline RealType quantile(const binomial_distribution<RealType, Policy>& dist, const RealType& p)
+ {
+ return binomial_detail::quantile_imp(dist, p, 1-p);
       } // quantile
 
- template <class RealType>
- RealType quantile(const complemented2_type<binomial_distribution<RealType>, RealType>& c)
- { // Quantile or Percent Point Binomial function.
- // Return the number of expected successes k for a given
- // complement of the probability q.
- //
- // Error checks:
- RealType q = c.param;
- const binomial_distribution<RealType>& dist = c.dist;
- RealType trials = dist.trials();
- RealType result;
- if(false == binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
- trials,
- dist.success_fraction(),
- q,
- &result))
- {
- return result;
- }
-
- // Special cases:
- //
- if(q == 1)
- { // There may actually be no answer to this question,
- // since the probability of zero successes may be non-zero,
- // but zero is the best we can do:
- return 0;
- }
- if(q == 0)
- { // Probability of greater than n successes is always zero,
- // so n is the most sensible answer here:
- return dist.trials();
- }
- if(trials == 1)
- {
- if(-q <= -dist.success_fraction())
- return 0;
- }
- else
- {
- if (-q <= boost::math::expm1(boost::math::log1p(-dist.success_fraction()) * trials))
- { // // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
- return 0; // So the only reasonable result is zero.
- } // And root finder would fail otherwise.
- }
-
- // Need to consider the case where
- //
- // Solve for quantile numerically:
- //
- RealType guess = binomial_detail::inverse_binomial_cornish_fisher(trials, dist.success_fraction(), 1-q, q);
- RealType factor = 8;
- if(trials > 100)
- factor = 1.01f; // guess is pretty accurate
- else if((trials > 10) && (trials - 1 > guess) && (guess > 3))
- factor = 1.15f; // less accurate but OK.
- else if(trials < 10)
- {
- // pretty inaccurate guess in this area:
- if(guess > trials / 64)
- {
- guess = trials / 4;
- factor = 2;
- }
- else
- guess = trials / 1024;
- }
- else
- factor = 2; // trials largish, but in far tails.
-
- detail::binomial_functor<RealType> f(dist, q, true);
- tools::eps_tolerance<RealType> tol(tools::digits<RealType>());
- boost::uintmax_t max_iter = 1000;
- std::pair<RealType, RealType> r = tools::bracket_and_solve_root(
- f,
- guess,
- factor,
- true,
- tol,
- max_iter,
- policy::policy<>());
- if(max_iter >= 1000)
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first);
- // return centre point of range found:
- return r.first + (r.second - r.first) / 2;
+ template <class RealType, class Policy>
+ RealType quantile(const complemented2_type<binomial_distribution<RealType, Policy>, RealType>& c)
+ {
+ return binomial_detail::quantile_imp(c.dist, 1-c.param, c.param);
       } // quantile
 
- template <class RealType>
- inline RealType mode(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const binomial_distribution<RealType, Policy>& dist)
       {
          using namespace std; // ADL of std functions.
          RealType p = dist.success_fraction();
@@ -767,8 +674,8 @@
          return floor(p * (n + 1));
       }
 
- template <class RealType>
- inline RealType median(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType median(const binomial_distribution<RealType, Policy>& dist)
       { // Bounds for the median of the negative binomial distribution
         // VAN DE VEN R. ; WEBER N. C. ;
         // Univ. Sydney, school mathematics statistics, Sydney N.S.W. 2006, AUSTRALIE
@@ -785,8 +692,8 @@
          return floor(p * n); // Chose the middle value.
       }
 
- template <class RealType>
- inline RealType skewness(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const binomial_distribution<RealType, Policy>& dist)
       {
          using namespace std; // ADL of std functions.
          RealType p = dist.success_fraction();
@@ -794,16 +701,16 @@
          return (1 - 2 * p) / sqrt(n * p * (1 - p));
       }
 
- template <class RealType>
- inline RealType kurtosis(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const binomial_distribution<RealType, Policy>& dist)
       {
          RealType p = dist.success_fraction();
          RealType n = dist.trials();
          return 3 - 6 / n + 1 / (n * p * (1 - p));
       }
 
- template <class RealType>
- inline RealType kurtosis_excess(const binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const binomial_distribution<RealType, Policy>& dist)
       {
          RealType p = dist.success_fraction();
          RealType q = 1 - p;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/cauchy.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/cauchy.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/cauchy.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -13,7 +13,7 @@
 
 #ifdef BOOST_MSVC
 # pragma warning(push)
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
+# pragma warning(disable: 4702) // unreachable code (return after raise_domain_error throw).
 #endif
 
 #include <utility>
@@ -21,28 +21,28 @@
 namespace boost{ namespace math
 {
 
-template <class RealType>
+template <class RealType, class Policy>
 class cauchy_distribution;
 
 namespace detail
 {
 
-template <class RealType>
-inline bool check_cauchy_scale(const char* func, RealType scale, RealType* result)
+template <class RealType, class Policy>
+inline bool check_cauchy_scale(const char* func, RealType scale, RealType* result, const Policy& pol)
 {
    if(scale <= 0)
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          func,
          "The scale parameter for the Cauchy distribution must be > 0 but got %1%.",
- scale);
+ scale, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
-RealType cdf_imp(const cauchy_distribution<RealType>& dist, const RealType& x, bool complement)
+template <class RealType, class Policy>
+RealType cdf_imp(const cauchy_distribution<RealType, Policy>& dist, const RealType& x, bool complement)
 {
    //
    // This calculates the cdf of the Cauchy distribution and/or its complement.
@@ -70,7 +70,7 @@
    RealType result;
    RealType loc = dist.location();
    RealType scale = dist.scale();
- if(0 == detail::check_cauchy_scale(BOOST_CURRENT_FUNCTION, scale, &result))
+ if(0 == detail::check_cauchy_scale("boost::math::cdf(cauchy<%1%>&, %1%)", scale, &result, Policy()))
       return result;
    RealType mx = -fabs((x - loc) / scale);
 
@@ -83,9 +83,9 @@
    return (((x > loc) != complement) ? 1 - result : result);
 } // cdf
 
-template <class RealType>
+template <class RealType, class Policy>
 RealType quantile_imp(
- const cauchy_distribution<RealType>& dist,
+ const cauchy_distribution<RealType, Policy>& dist,
       const RealType& p,
       bool complement)
 {
@@ -98,19 +98,20 @@
    // mid-point of the distribution. This is either added or subtracted
    // from the location parameter depending on whether `complement` is true.
    //
+ static const char* function = "boost::math::quantile(cauchy<%1%>&, %1%)";
    using namespace std; // for ADL of std functions
    // Special cases:
    if(p == 1)
- return (complement ? -1 : 1) * tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return (complement ? -1 : 1) * policy::raise_overflow_error<RealType>(function, 0, Policy());
    if(p == 0)
- return (complement ? 1 : -1) * tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return (complement ? 1 : -1) * policy::raise_overflow_error<RealType>(function, 0, Policy());
 
    RealType result;
    RealType loc = dist.location();
    RealType scale = dist.scale();
- if(0 == detail::check_cauchy_scale(BOOST_CURRENT_FUNCTION, scale, &result))
+ if(0 == detail::check_cauchy_scale(function, scale, &result, Policy()))
       return result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(0 == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    // argument reduction of p:
@@ -126,17 +127,18 @@
 
 }
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class cauchy_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    cauchy_distribution(RealType a = 0, RealType b = 1)
       : m_a(a), m_hg(b)
    {
       RealType r;
- detail::check_cauchy_scale(BOOST_CURRENT_FUNCTION, b, &r);
+ detail::check_cauchy_scale("boost::math::cauchy<%1%>::cauchy", b, &r, Policy());
    } // cauchy_distribution
 
    RealType location()const
@@ -155,27 +157,27 @@
 
 typedef cauchy_distribution<double> cauchy;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const cauchy_distribution<RealType, Policy>&)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity.
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const cauchy_distribution<RealType, Policy>& )
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
    return std::pair<RealType, RealType>(-tools::max_value<RealType>(), tools::max_value<RealType>()); // - to + infinity.
 }
 
-template <class RealType>
-inline RealType pdf(const cauchy_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const cauchy_distribution<RealType, Policy>& dist, const RealType& x)
 {
    RealType result;
    RealType loc = dist.location();
    RealType scale = dist.scale();
- if(0 == detail::check_cauchy_scale(BOOST_CURRENT_FUNCTION, scale, &result))
+ if(0 == detail::check_cauchy_scale("boost::math::pdf(cauchy<%1%>&, %1%)", scale, &result, Policy()))
       return result;
 
    RealType xs = (x - loc) / scale;
@@ -184,94 +186,109 @@
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const cauchy_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const cauchy_distribution<RealType, Policy>& dist, const RealType& x)
 {
    return detail::cdf_imp(dist, x, false);
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const cauchy_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const cauchy_distribution<RealType, Policy>& dist, const RealType& p)
 {
    return detail::quantile_imp(dist, p, false);
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<cauchy_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<cauchy_distribution<RealType, Policy>, RealType>& c)
 {
    return detail::cdf_imp(c.dist, c.param, true);
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<cauchy_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<cauchy_distribution<RealType, Policy>, RealType>& c)
 {
    return detail::quantile_imp(c.dist, c.param, true);
 }
 
-template <class RealType>
-inline RealType mean(const cauchy_distribution<RealType>& )
+template <class RealType, class Policy>
+inline RealType mean(const cauchy_distribution<RealType, Policy>&)
 {
    // There is no mean:
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ typedef typename Policy::assert_undefined_type assert_type;
+ BOOST_STATIC_ASSERT(assert_type::value == 0);
+
+ return policy::raise_domain_error<RealType>(
+ "boost::math::mean(cauchy<%1%>&)",
       "The Cauchy distribution does not have a mean: "
       "the only possible return value is %1%.",
- std::numeric_limits<RealType>::quiet_NaN());
+ std::numeric_limits<RealType>::quiet_NaN(), Policy());
 }
 
-template <class RealType>
-inline RealType variance(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType variance(const cauchy_distribution<RealType, Policy>& /*dist*/)
 {
    // There is no variance:
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ typedef typename Policy::assert_undefined_type assert_type;
+ BOOST_STATIC_ASSERT(assert_type::value == 0);
+
+ return policy::raise_domain_error<RealType>(
+ "boost::math::variance(cauchy<%1%>&)",
       "The Cauchy distribution does not have a variance: "
       "the only possible return value is %1%.",
- std::numeric_limits<RealType>::quiet_NaN());
+ std::numeric_limits<RealType>::quiet_NaN(), Policy());
 }
 
-template <class RealType>
-inline RealType mode(const cauchy_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const cauchy_distribution<RealType, Policy>& dist)
 {
    return dist.location();
 }
 
-template <class RealType>
-inline RealType median(const cauchy_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const cauchy_distribution<RealType, Policy>& dist)
 {
    return dist.location();
 }
-template <class RealType>
-inline RealType skewness(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType skewness(const cauchy_distribution<RealType, Policy>& /*dist*/)
 {
    // There is no skewness:
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ typedef typename Policy::assert_undefined_type assert_type;
+ BOOST_STATIC_ASSERT(assert_type::value == 0);
+
+ return policy::raise_domain_error<RealType>(
+ "boost::math::skewness(cauchy<%1%>&)",
       "The Cauchy distribution does not have a skewness: "
       "the only possible return value is %1%.",
- std::numeric_limits<RealType>::quiet_NaN()); // infinity?
+ std::numeric_limits<RealType>::quiet_NaN(), Policy()); // infinity?
 }
 
-template <class RealType>
-inline RealType kurtosis(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis(const cauchy_distribution<RealType, Policy>& /*dist*/)
 {
    // There is no kurtosis:
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ typedef typename Policy::assert_undefined_type assert_type;
+ BOOST_STATIC_ASSERT(assert_type::value == 0);
+
+ return policy::raise_domain_error<RealType>(
+ "boost::math::kurtosis(cauchy<%1%>&)",
       "The Cauchy distribution does not have a kurtosis: "
       "the only possible return value is %1%.",
- std::numeric_limits<RealType>::quiet_NaN());
+ std::numeric_limits<RealType>::quiet_NaN(), Policy());
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const cauchy_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const cauchy_distribution<RealType, Policy>& /*dist*/)
 {
    // There is no kurtosis excess:
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ typedef typename Policy::assert_undefined_type assert_type;
+ BOOST_STATIC_ASSERT(assert_type::value == 0);
+
+ return policy::raise_domain_error<RealType>(
+ "boost::math::kurtosis_excess(cauchy<%1%>&)",
       "The Cauchy distribution does not have a kurtosis: "
       "the only possible return value is %1%.",
- std::numeric_limits<RealType>::quiet_NaN());
+ std::numeric_limits<RealType>::quiet_NaN(), Policy());
 }
 
 } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/distributions/chi_squared.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/chi_squared.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/chi_squared.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -17,17 +17,18 @@
 
 namespace boost{ namespace math{
 
-template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
 class chi_squared_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    chi_squared_distribution(RealType i) : m_df(i)
    {
       RealType result;
       detail::check_df(
- BOOST_CURRENT_FUNCTION, m_df, &result);
+ "boost::math::chi_squared_distribution<%1%>::chi_squared_distribution", m_df, &result, Policy());
    } // chi_squared_distribution
 
    RealType degrees_of_freedom()const
@@ -52,35 +53,38 @@
 
 typedef chi_squared_distribution<double> chi_squared;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const chi_squared_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const chi_squared_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>()); // 0 to + infinity.
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const chi_squared_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const chi_squared_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
    return std::pair<RealType, RealType>(0, tools::max_value<RealType>()); // 0 to + infinity.
 }
 
-template <class RealType>
-RealType pdf(const chi_squared_distribution<RealType>& dist, const RealType& chi_square)
+template <class RealType, class Policy>
+RealType pdf(const chi_squared_distribution<RealType, Policy>& dist, const RealType& chi_square)
 {
    using namespace std; // for ADL of std functions
    RealType degrees_of_freedom = dist.degrees_of_freedom();
    // Error check:
    RealType error_result;
+
+ static const char* function = "boost::math::pdf(const chi_squared_distribution<%1%>&, %1%)";
+
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result))
+ function, degrees_of_freedom, &error_result, Policy()))
       return error_result;
 
    if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Chi Square parameter was %1%, but must be > 0 !", chi_square);
+ return policy::raise_domain_error<RealType>(
+ function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
    }
 
    if(chi_square == 0)
@@ -88,8 +92,8 @@
       // Handle special cases:
       if(degrees_of_freedom < 2)
       {
- return tools::overflow_error<RealType>(
- BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(
+ function, 0, Policy());
       }
       else if(degrees_of_freedom == 2)
       {
@@ -101,105 +105,111 @@
       }
    }
 
- return gamma_p_derivative(degrees_of_freedom / 2, chi_square / 2) / 2;
+ return gamma_p_derivative(degrees_of_freedom / 2, chi_square / 2, Policy()) / 2;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const chi_squared_distribution<RealType>& dist, const RealType& chi_square)
+template <class RealType, class Policy>
+inline RealType cdf(const chi_squared_distribution<RealType, Policy>& dist, const RealType& chi_square)
 {
    RealType degrees_of_freedom = dist.degrees_of_freedom();
    // Error check:
    RealType error_result;
+ static const char* function = "boost::math::cdf(const chi_squared_distribution<%1%>&, %1%)";
+
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result))
+ function, degrees_of_freedom, &error_result, Policy()))
       return error_result;
 
    if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Chi Square parameter was %1%, but must be > 0 !", chi_square);
+ return policy::raise_domain_error<RealType>(
+ function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
    }
 
- return boost::math::gamma_p(degrees_of_freedom / 2, chi_square / 2);
+ return boost::math::gamma_p(degrees_of_freedom / 2, chi_square / 2, Policy());
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const chi_squared_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const chi_squared_distribution<RealType, Policy>& dist, const RealType& p)
 {
    RealType degrees_of_freedom = dist.degrees_of_freedom();
+ static const char* function = "boost::math::quantile(const chi_squared_distribution<%1%>&, %1%)";
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result)
+ function, degrees_of_freedom, &error_result, Policy())
          && detail::check_probability(
- BOOST_CURRENT_FUNCTION, p, &error_result))
+ function, p, &error_result, Policy()))
       return error_result;
 
- return 2 * boost::math::gamma_p_inv(degrees_of_freedom / 2, p);
+ return 2 * boost::math::gamma_p_inv(degrees_of_freedom / 2, p, Policy());
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<chi_squared_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<chi_squared_distribution<RealType, Policy>, RealType>& c)
 {
    RealType const& degrees_of_freedom = c.dist.degrees_of_freedom();
    RealType const& chi_square = c.param;
+ static const char* function = "boost::math::cdf(const chi_squared_distribution<%1%>&, %1%)";
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result))
+ function, degrees_of_freedom, &error_result, Policy()))
       return error_result;
 
    if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Chi Square parameter was %1%, but must be > 0 !", chi_square);
+ return policy::raise_domain_error<RealType>(
+ function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
    }
 
- return boost::math::gamma_q(degrees_of_freedom / 2, chi_square / 2);
+ return boost::math::gamma_q(degrees_of_freedom / 2, chi_square / 2, Policy());
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<chi_squared_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<chi_squared_distribution<RealType, Policy>, RealType>& c)
 {
    RealType const& degrees_of_freedom = c.dist.degrees_of_freedom();
    RealType const& q = c.param;
+ static const char* function = "boost::math::quantile(const chi_squared_distribution<%1%>&, %1%)";
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result)
+ function, degrees_of_freedom, &error_result, Policy())
          && detail::check_probability(
- BOOST_CURRENT_FUNCTION, q, &error_result))
+ function, q, &error_result, Policy()))
       return error_result;
 
- return 2 * boost::math::gamma_q_inv(degrees_of_freedom / 2, q);
+ return 2 * boost::math::gamma_q_inv(degrees_of_freedom / 2, q, Policy());
 }
 
-template <class RealType>
-inline RealType mean(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const chi_squared_distribution<RealType, Policy>& dist)
 { // Mean of Chi-Squared distribution = v.
   return dist.degrees_of_freedom();
 } // mean
 
-template <class RealType>
-inline RealType variance(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const chi_squared_distribution<RealType, Policy>& dist)
 { // Variance of Chi-Squared distribution = 2v.
   return 2 * dist.degrees_of_freedom();
 } // variance
 
-template <class RealType>
-inline RealType mode(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const chi_squared_distribution<RealType, Policy>& dist)
 {
    RealType df = dist.degrees_of_freedom();
+ static const char* function = "boost::math::mode(const chi_squared_distribution<%1%>&)";
    if(df <= 2)
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ return policy::raise_domain_error<RealType>(
+ function,
          "The Chi-Squared distribution only has a mode for degrees of freedom >= 2, but got degrees of freedom = %1%.",
- df);
+ df, Policy());
    return df - 2;
 }
 
-//template <class RealType>
-//inline RealType median(const chi_squared_distribution<RealType>& dist)
+//template <class RealType, class Policy>
+//inline RealType median(const chi_squared_distribution<RealType, Policy>& dist)
 //{ // Median is given by Quantile[dist, 1/2]
 // RealType df = dist.degrees_of_freedom();
 // if(df <= 1)
@@ -211,23 +221,23 @@
 //}
 // Now implemented via quantile(half) in derived accessors.
 
-template <class RealType>
-inline RealType skewness(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const chi_squared_distribution<RealType, Policy>& dist)
 {
    using namespace std; // For ADL
    RealType df = dist.degrees_of_freedom();
    return sqrt (8 / df); // == 2 * sqrt(2 / df);
 }
 
-template <class RealType>
-inline RealType kurtosis(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const chi_squared_distribution<RealType, Policy>& dist)
 {
    RealType df = dist.degrees_of_freedom();
    return 3 + 12 / df;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const chi_squared_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const chi_squared_distribution<RealType, Policy>& dist)
 {
    RealType df = dist.degrees_of_freedom();
    return 12 / df;
@@ -238,7 +248,7 @@
 //
 namespace detail{
 
-template <class RealType>
+template <class RealType, class Policy>
 struct df_estimator
 {
    df_estimator(RealType a, RealType b, RealType variance, RealType delta)
@@ -248,7 +258,7 @@
    {
       if(df <= tools::min_value<RealType>())
          return 1;
- chi_squared_distribution<RealType> cs(df);
+ chi_squared_distribution<RealType, Policy> cs(df);
 
       RealType result;
       if(ratio > 0)
@@ -269,34 +279,35 @@
 
 }
 
-template <class RealType>
-RealType chi_squared_distribution<RealType>::estimate_degrees_of_freedom(
+template <class RealType, class Policy>
+RealType chi_squared_distribution<RealType, Policy>::estimate_degrees_of_freedom(
    RealType difference_from_variance,
    RealType alpha,
    RealType beta,
    RealType variance,
    RealType hint)
 {
+ static const char* function = "boost::math::chi_squared_distribution<%1%>::estimate_degrees_of_freedom(%1%,%1%,%1%,%1%,%1%)";
    // Check for domain errors:
    RealType error_result;
    if(false == detail::check_probability(
- BOOST_CURRENT_FUNCTION, alpha, &error_result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, beta, &error_result))
+ function, alpha, &error_result, Policy())
+ && detail::check_probability(BOOST_CURRENT_FUNCTION, beta, &error_result, Policy()))
       return error_result;
 
    if(hint <= 0)
       hint = 1;
 
- detail::df_estimator<RealType> f(alpha, beta, variance, difference_from_variance);
- tools::eps_tolerance<RealType> tol(tools::digits<RealType>());
+ detail::df_estimator<RealType, Policy> f(alpha, beta, variance, difference_from_variance);
+ tools::eps_tolerance<RealType> tol(policy::digits<RealType, Policy>());
    boost::uintmax_t max_iter = 10000;
- std::pair<RealType, RealType> r = tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, policy::policy<>());
+ std::pair<RealType, RealType> r = tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, Policy());
    RealType result = r.first + (r.second - r.first) / 2;
    if(max_iter == 10000)
    {
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "Unable to locate solution in a reasonable time:"
+ policy::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
          " either there is no answer to how many degrees of freedom are required"
- " or the answer is infinite. Current best guess is %1%", result);
+ " or the answer is infinite. Current best guess is %1%", result, Policy());
    }
    return result;
 }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/detail/common_error_handling.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/detail/common_error_handling.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/detail/common_error_handling.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -9,6 +9,7 @@
 #define BOOST_MATH_DISTRIBUTIONS_COMMON_ERROR_HANDLING_HPP
 
 #include <boost/math/tools/error_handling.hpp>
+#include <boost/math/policy/error_handling.hpp>
 #include <boost/math/special_functions/fpclassify.hpp>
 
 #ifdef BOOST_MSVC
@@ -18,43 +19,44 @@
 
 namespace boost{ namespace math{ namespace detail{
 
-template <class RealType>
-inline bool check_probability(const char* function, RealType const& prob, RealType* result)
+template <class RealType, class Policy>
+inline bool check_probability(const char* function, RealType const& prob, RealType* result, const Policy& pol)
 {
    if((prob < 0) || (prob > 1) || !(boost::math::isfinite)(prob))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Probability argument is %1%, but must be >= 0 and <= 1 !", prob);
+ "Probability argument is %1%, but must be >= 0 and <= 1 !", prob, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
-inline bool check_df(const char* function, RealType const& df, RealType* result)
+template <class RealType, class Policy>
+inline bool check_df(const char* function, RealType const& df, RealType* result, const Policy& pol)
 {
    if((df <= 0) || !(boost::math::isfinite)(df))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Degrees of freedom argument is %1%, but must be > 0 !", df);
+ "Degrees of freedom argument is %1%, but must be > 0 !", df, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_scale(
       const char* function,
       RealType scale,
- RealType* result)
+ RealType* result,
+ const Policy& pol)
 {
    if((scale < 0) || !(boost::math::isfinite)(scale))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Scale parameter is %1%, but must be > 0 !", scale);
+ "Scale parameter is %1%, but must be > 0 !", scale, pol);
       return false;
    }
    return true;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/detail/derived_accessors.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/detail/derived_accessors.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/detail/derived_accessors.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -60,11 +60,12 @@
 { // hazard function
   // http://www.itl.nist.gov/div898/handbook/eda/section3/eda362.htm#HAZ
    typedef typename Distribution::value_type value_type;
+ typedef typename Distribution::policy_type policy_type;
    value_type p = cdf(complement(dist, x));
    value_type d = pdf(dist, x);
    if(d > p * tools::max_value<value_type>())
- return tools::overflow_error<value_type>(
- BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<value_type>(
+ "boost::math::hazard(const Distribution&, %1%)", 0, policy_type());
    if(d == 0)
    {
       // This protects against 0/0, but is it the right thing to do?
@@ -85,6 +86,7 @@
 inline typename Distribution::value_type coefficient_of_variation(const Distribution& dist)
 {
    typedef typename Distribution::value_type value_type;
+ typedef typename Distribution::policy_type policy_type;
 
    using std::abs;
 
@@ -92,7 +94,7 @@
    value_type d = standard_deviation(dist);
    if((abs(m) < 1) && (d > abs(m) * tools::max_value<value_type>()))
    { // Checks too that m is not zero,
- return tools::overflow_error<value_type>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<value_type>("boost::math::coefficient_of_variation(const Distribution&, %1%)", 0, policy_type());
    }
    return d / m; // so MSVC warning on zerodivide is spurious, and suppressed.
 }
@@ -105,21 +107,18 @@
 inline typename Distribution::value_type pdf(const Distribution& dist, const RealType& x)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return pdf(dist, static_cast<value_type>(x));
 }
 template <class Distribution, class RealType>
 inline typename Distribution::value_type cdf(const Distribution& dist, const RealType& x)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return cdf(dist, static_cast<value_type>(x));
 }
 template <class Distribution, class RealType>
 inline typename Distribution::value_type quantile(const Distribution& dist, const RealType& x)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return quantile(dist, static_cast<value_type>(x));
 }
 /*
@@ -127,7 +126,6 @@
 inline typename Distribution::value_type chf(const Distribution& dist, const RealType& x)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return chf(dist, static_cast<value_type>(x));
 }
 */
@@ -135,7 +133,6 @@
 inline typename Distribution::value_type cdf(const complemented2_type<Distribution, RealType>& c)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return cdf(complement(c.dist, static_cast<value_type>(c.param)));
 }
 
@@ -143,7 +140,6 @@
 inline typename Distribution::value_type quantile(const complemented2_type<Distribution, RealType>& c)
 {
    typedef typename Distribution::value_type value_type;
- BOOST_STATIC_ASSERT((0 == ::boost::is_same<value_type, RealType>::value));
    return quantile(complement(c.dist, static_cast<value_type>(c.param)));
 }
 

Added: sandbox/math_toolkit/policy/boost/math/distributions/detail/inv_discrete_quantile.hpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/policy/boost/math/distributions/detail/inv_discrete_quantile.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -0,0 +1,478 @@
+// 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)
+
+#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
+#define BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
+
+#include <algorithm>
+
+namespace boost{ namespace math{ namespace detail{
+
+//
+// Functor for root finding algorithm:
+//
+template <class Dist>
+struct distribution_quantile_finder
+{
+ typedef typename Dist::value_type value_type;
+ typedef typename Dist::policy_type policy_type;
+
+ distribution_quantile_finder(const Dist d, value_type p, value_type q)
+ : dist(d), target(p < q ? p : q), comp(p < q ? false : true) {}
+
+ value_type operator()(value_type const& x)
+ {
+ return comp ? target - cdf(complement(dist, x)) : cdf(dist, x) - target;
+ }
+
+private:
+ Dist dist;
+ value_type target;
+ bool comp;
+};
+//
+// The purpose of adjust_bounds, is to toggle the last bit of the
+// range so that both ends round to the same integer, if possible.
+// If they do both round the same then we terminate the search
+// for the root *very* quickly when finding an integer result.
+// At the point that this function is called we know that "a" is
+// below the root and "b" above it, so this change can not result
+// in the root no longer being bracketed.
+//
+template <class Real, class Tol>
+void adjust_bounds(Real& a, Real& b, Tol const& tol){}
+
+template <class Real>
+void adjust_bounds(Real& a, Real& b, tools::equal_floor const& tol)
+{
+ using namespace std;
+ b -= tools::epsilon<Real>() * b;
+}
+
+template <class Real>
+void adjust_bounds(Real& a, Real& b, tools::equal_ceil const& tol)
+{
+ using namespace std;
+ a += tools::epsilon<Real>() * a;
+}
+
+template <class Real>
+void adjust_bounds(Real& a, Real& b, tools::equal_nearest_integer const& tol)
+{
+ using namespace std;
+ a += tools::epsilon<Real>() * a;
+ b -= tools::epsilon<Real>() * b;
+}
+//
+// This is where all the work is done:
+//
+template <class Dist, class Tolerance>
+typename Dist::value_type
+ do_inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ typename Dist::value_type guess,
+ const typename Dist::value_type& multiplier,
+ typename Dist::value_type adder,
+ const Tolerance& tol,
+ boost::uintmax_t& max_iter)
+{
+ typedef typename Dist::value_type value_type;
+ typedef typename Dist::policy_type policy_type;
+
+ using namespace std;
+
+ distribution_quantile_finder<Dist> f(dist, p, q);
+ //
+ // Max bounds of the distribution:
+ //
+ value_type min_bound, max_bound;
+ std::tr1::tie(min_bound, max_bound) = support(dist);
+
+ if(guess > max_bound)
+ guess = max_bound;
+ if(guess < min_bound)
+ guess = min_bound;
+
+ value_type fa = f(guess);
+ boost::uintmax_t count = max_iter - 1;
+ value_type fb(fa), a(guess), b;
+
+ if(fa == 0)
+ return guess;
+
+ //
+ // For small expected results, just use a linear search:
+ //
+ if(guess < 10)
+ {
+ b = a;
+ while((a < 10) && (fa * fb >= 0))
+ {
+ if(fb <= 0)
+ {
+ a = b;
+ b = a + 1;
+ if(b > max_bound)
+ b = max_bound;
+ fb = f(b);
+ --count;
+ if(fb == 0)
+ return b;
+ }
+ else
+ {
+ b = a;
+ a = (std::max)(b - 1, value_type(0));
+ if(a < min_bound)
+ a = min_bound;
+ fa = f(a);
+ --count;
+ if(fa == 0)
+ return a;
+ }
+ }
+ }
+ //
+ // Try and bracket using a couple of additions first,
+ // we're assuming that "guess" is likely to be accurate
+ // to the nearest int or so:
+ //
+ else if(adder != 0)
+ {
+ //
+ // If we're looking for a large result, then bump "adder" up
+ // by a bit to increase our chances of bracketing the root:
+ //
+ //adder = (std::max)(adder, 0.001f * guess);
+ if(fa < 0)
+ {
+ b = a + adder;
+ if(b > max_bound)
+ b = max_bound;
+ }
+ else
+ {
+ b = (std::max)(a - adder, value_type(0));
+ if(b < min_bound)
+ b = min_bound;
+ }
+ fb = f(b);
+ --count;
+ if(fb == 0)
+ return b;
+ if(count && (fa * fb >= 0))
+ {
+ //
+ // We didn't bracket the root, try
+ // once more:
+ //
+ a = b;
+ fa = fb;
+ if(fa < 0)
+ {
+ b = a + adder;
+ if(b > max_bound)
+ b = max_bound;
+ }
+ else
+ {
+ b = (std::max)(a - adder, value_type(0));
+ if(b < min_bound)
+ b = min_bound;
+ }
+ fb = f(b);
+ --count;
+ }
+ if(a > b)
+ {
+ using std::swap;
+ swap(a, b);
+ swap(fa, fb);
+ }
+ }
+ //
+ // If the root hasn't been bracketed yet, try again
+ // using the multiplier this time:
+ //
+ if(sign(fb) == sign(fa))
+ {
+ if(fa < 0)
+ {
+ //
+ // Zero is to the right of x2, so walk upwards
+ // until we find it:
+ //
+ while(sign(fb) == sign(fa))
+ {
+ if(count == 0)
+ policy::raise_evaluation_error(BOOST_CURRENT_FUNCTION, "Unable to bracket root, last nearest value was %1%", b, policy_type());
+ a = b;
+ fa = fb;
+ b *= multiplier;
+ if(b > max_bound)
+ b = max_bound;
+ fb = f(b);
+ --count;
+ BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
+ }
+ }
+ else
+ {
+ //
+ // Zero is to the left of a, so walk downwards
+ // until we find it:
+ //
+ while(sign(fb) == sign(fa))
+ {
+ if(fabs(a) < tools::min_value<value_type>())
+ {
+ // Escape route just in case the answer is zero!
+ max_iter -= count;
+ max_iter += 1;
+ return 0;
+ }
+ if(count == 0)
+ policy::raise_evaluation_error(BOOST_CURRENT_FUNCTION, "Unable to bracket root, last nearest value was %1%", a, policy_type());
+ b = a;
+ fb = fa;
+ a /= multiplier;
+ if(a < min_bound)
+ a = min_bound;
+ fa = f(a);
+ --count;
+ BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
+ }
+ }
+ }
+ max_iter -= count;
+ if(fa == 0)
+ return a;
+ if(fb == 0)
+ return b;
+ //
+ // Adjust bounds so that if we're looking for an integer
+ // result, then both ends round the same way:
+ //
+ adjust_bounds(a, b, tol);
+ //
+ // We don't want zero or denorm lower bounds:
+ //
+ if(a < tools::min_value<value_type>())
+ a = tools::min_value<value_type>();
+ //
+ // Go ahead and find the root:
+ //
+ std::pair<value_type, value_type> r = toms748_solve(f, a, b, fa, fb, tol, count, policy_type());
+ max_iter += count;
+ BOOST_MATH_INSTRUMENT_CODE("max_iter = " << max_iter << " count = " << count);
+ return (r.first + r.second) / 2;
+}
+//
+// Now finally are the public API functions.
+// There is one overload for each policy,
+// each one is responsible for selecting the correct
+// termination condition, and rounding the result
+// to an int where required.
+//
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::real>&,
+ boost::uintmax_t& max_iter)
+{
+ if(p <= pdf(dist, 0))
+ return 0;
+ return do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ guess,
+ multiplier,
+ adder,
+ tools::eps_tolerance<typename Dist::value_type>(policy::digits<typename Dist::value_type, typename Dist::policy_type>()),
+ max_iter);
+}
+
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_outside>&,
+ boost::uintmax_t& max_iter)
+{
+ typedef typename Dist::value_type value_type;
+ using namespace std;
+ if(p <= pdf(dist, 0))
+ return 0;
+ //
+ // What happens next depends on whether we're looking for an
+ // upper or lower quantile:
+ //
+ if(p < 0.5f)
+ return floor(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ (guess < 1 ? value_type(1) : floor(guess)),
+ multiplier,
+ adder,
+ tools::equal_floor(),
+ max_iter));
+ // else:
+ return ceil(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ ceil(guess),
+ multiplier,
+ adder,
+ tools::equal_ceil(),
+ max_iter));
+}
+
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_inside>&,
+ boost::uintmax_t& max_iter)
+{
+ typedef typename Dist::value_type value_type;
+ using namespace std;
+ if(p <= pdf(dist, 0))
+ return 0;
+ //
+ // What happens next depends on whether we're looking for an
+ // upper or lower quantile:
+ //
+ if(p < 0.5f)
+ return ceil(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ ceil(guess),
+ multiplier,
+ adder,
+ tools::equal_ceil(),
+ max_iter));
+ // else:
+ return floor(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ (guess < 1 ? value_type(1) : floor(guess)),
+ multiplier,
+ adder,
+ tools::equal_floor(),
+ max_iter));
+}
+
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_below>&,
+ boost::uintmax_t& max_iter)
+{
+ typedef typename Dist::value_type value_type;
+ using namespace std;
+ if(p <= pdf(dist, 0))
+ return 0;
+ return floor(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ (guess < 1 ? value_type(1) : floor(guess)),
+ multiplier,
+ adder,
+ tools::equal_floor(),
+ max_iter));
+}
+
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_above>&,
+ boost::uintmax_t& max_iter)
+{
+ using namespace std;
+ if(p <= pdf(dist, 0))
+ return 0;
+ return ceil(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ ceil(guess),
+ multiplier,
+ adder,
+ tools::equal_ceil(),
+ max_iter));
+}
+
+template <class Dist>
+inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& q,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_nearest>&,
+ boost::uintmax_t& max_iter)
+{
+ typedef typename Dist::value_type value_type;
+ using namespace std;
+ if(p <= pdf(dist, 0))
+ return 0;
+ //
+ // Note that we adjust the guess to the nearest half-integer:
+ // this increase the chances that we will bracket the root
+ // with two results that both round to the same integer quickly.
+ //
+ return floor(do_inverse_discrete_quantile(
+ dist,
+ p,
+ q,
+ (guess < 0.5f ? value_type(1.5f) : floor(guess + 0.5f) + 0.5f),
+ multiplier,
+ adder,
+ tools::equal_nearest_integer(),
+ max_iter) + 0.5f);
+}
+
+}}} // namespaces
+
+#endif // BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
+

Modified: sandbox/math_toolkit/policy/boost/math/distributions/exponential.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/exponential.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/exponential.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -26,27 +26,27 @@
 //
 // Error check:
 //
-template <class RealType>
-inline bool verify_lambda(const char* function, RealType l, RealType* presult)
+template <class RealType, class Policy>
+inline bool verify_lambda(const char* function, RealType l, RealType* presult, const Policy& pol)
 {
    if(l <= 0)
    {
- *presult = tools::domain_error<RealType>(
+ *presult = policy::raise_domain_error<RealType>(
          function,
- "The scale parameter \"lambda\" must be > 0, but was: %1%.", l);
+ "The scale parameter \"lambda\" must be > 0, but was: %1%.", l, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
-inline bool verify_exp_x(const char* function, RealType x, RealType* presult)
+template <class RealType, class Policy>
+inline bool verify_exp_x(const char* function, RealType x, RealType* presult, const Policy& pol)
 {
    if(x < 0)
    {
- *presult = tools::domain_error<RealType>(
+ *presult = policy::raise_domain_error<RealType>(
          function,
- "The random variable must be >= 0, but was: %1%.", x);
+ "The random variable must be >= 0, but was: %1%.", x, pol);
       return false;
    }
    return true;
@@ -54,17 +54,18 @@
 
 } // namespace detail
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class exponential_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    exponential_distribution(RealType lambda = 1)
       : m_lambda(lambda)
    {
       RealType err;
- detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &err);
+ detail::verify_lambda("boost::math::exponential_distribution<%1%>::exponential_distribution", lambda, &err, Policy());
    } // exponential_distribution
 
    RealType lambda()const { return m_lambda; }
@@ -75,159 +76,169 @@
 
 typedef exponential_distribution<double> exponential;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const exponential_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const exponential_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const exponential_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const exponential_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::pdf(const exponential_distribution<%1%>&, %1%)";
+
    RealType lambda = dist.lambda();
    RealType result;
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
       return result;
- if(0 == detail::verify_exp_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(0 == detail::verify_exp_x(function, x, &result, Policy()))
       return result;
    result = lambda * exp(-lambda * x);
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const exponential_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const exponential_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const exponential_distribution<%1%>&, %1%)";
+
    RealType result;
    RealType lambda = dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
       return result;
- if(0 == detail::verify_exp_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(0 == detail::verify_exp_x(function, x, &result, Policy()))
       return result;
- result = -boost::math::expm1(-x * lambda);
+ result = -boost::math::expm1(-x * lambda, Policy());
 
    return result;
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const exponential_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const exponential_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const exponential_distribution<%1%>&, %1%)";
+
    RealType result;
    RealType lambda = dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
       return result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(0 == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 0)
       return 0;
    if(p == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- result = -boost::math::log1p(-p) / lambda;
+ result = -boost::math::log1p(-p, Policy()) / lambda;
    return result;
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<exponential_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<exponential_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const exponential_distribution<%1%>&, %1%)";
+
    RealType result;
    RealType lambda = c.dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
       return result;
- if(0 == detail::verify_exp_x(BOOST_CURRENT_FUNCTION, c.param, &result))
+ if(0 == detail::verify_exp_x(function, c.param, &result, Policy()))
       return result;
    result = exp(-c.param * lambda);
 
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<exponential_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<exponential_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const exponential_distribution<%1%>&, %1%)";
+
    RealType result;
    RealType lambda = c.dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
       return result;
 
    RealType q = c.param;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(0 == detail::check_probability(function, q, &result, Policy()))
       return result;
 
    if(q == 1)
       return 0;
    if(q == 0)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
    result = -log(q) / lambda;
    return result;
 }
 
-template <class RealType>
-inline RealType mean(const exponential_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const exponential_distribution<RealType, Policy>& dist)
 {
    RealType result;
    RealType lambda = dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda("boost::math::mean(const exponential_distribution<%1%>&)", lambda, &result, Policy()))
       return result;
    return 1 / lambda;
 }
 
-template <class RealType>
-inline RealType standard_deviation(const exponential_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType standard_deviation(const exponential_distribution<RealType, Policy>& dist)
 {
    RealType result;
    RealType lambda = dist.lambda();
- if(0 == detail::verify_lambda(BOOST_CURRENT_FUNCTION, lambda, &result))
+ if(0 == detail::verify_lambda("boost::math::standard_deviation(const exponential_distribution<%1%>&)", lambda, &result, Policy()))
       return result;
    return 1 / lambda;
 }
 
-template <class RealType>
-inline RealType mode(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType mode(const exponential_distribution<RealType, Policy>& /*dist*/)
 {
    return 0;
 }
 
-template <class RealType>
-inline RealType median(const exponential_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const exponential_distribution<RealType, Policy>& dist)
 {
    using boost::math::constants::ln_two;
    return ln_two<RealType>() / dist.lambda(); // ln(2) / lambda
 }
 
-template <class RealType>
-inline RealType skewness(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType skewness(const exponential_distribution<RealType, Policy>& /*dist*/)
 {
    return 2;
 }
 
-template <class RealType>
-inline RealType kurtosis(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis(const exponential_distribution<RealType, Policy>& /*dist*/)
 {
    return 9;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const exponential_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const exponential_distribution<RealType, Policy>& /*dist*/)
 {
    return 6;
 }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/extreme_value.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/extreme_value.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/extreme_value.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -33,14 +33,14 @@
 //
 // Error check:
 //
-template <class RealType>
-inline bool verify_scale_b(const char* function, RealType b, RealType* presult)
+template <class RealType, class Policy>
+inline bool verify_scale_b(const char* function, RealType b, RealType* presult, const Policy& pol)
 {
    if(b <= 0)
    {
- *presult = tools::domain_error<RealType>(
+ *presult = policy::raise_domain_error<RealType>(
          function,
- "The scale parameter \"b\" must be > 0, but was: %1%.", b);
+ "The scale parameter \"b\" must be > 0, but was: %1%.", b, pol);
       return false;
    }
    return true;
@@ -48,17 +48,18 @@
 
 } // namespace detail
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class extreme_value_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    extreme_value_distribution(RealType a = 0, RealType b = 1)
       : m_a(a), m_b(b)
    {
       RealType err;
- detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &err);
+ detail::verify_scale_b("boost::math::extreme_value_distribution<%1%>::extreme_value_distribution", b, &err, Policy());
    } // extreme_value_distribution
 
    RealType location()const { return m_a; }
@@ -70,44 +71,44 @@
 
 typedef extreme_value_distribution<double> extreme_value;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const extreme_value_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const extreme_value_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const extreme_value_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const extreme_value_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const extreme_value_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const extreme_value_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
    RealType a = dist.location();
    RealType b = dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b("boost::math::pdf(const extreme_value_distribution<%1%>&, %1%)", b, &result, Policy()))
       return result;
    result = exp((a-x)/b) * exp(-exp((a-x)/b)) / b;
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const extreme_value_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const extreme_value_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
    RealType a = dist.location();
    RealType b = dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b("boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)", b, &result, Policy()))
       return result;
 
    result = exp(-exp((a-x)/b));
@@ -115,107 +116,111 @@
    return result;
 } // cdf
 
-template <class RealType>
-RealType quantile(const extreme_value_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+RealType quantile(const extreme_value_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const extreme_value_distribution<%1%>&, %1%)";
+
    RealType a = dist.location();
    RealType b = dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b(function, b, &result, Policy()))
       return result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(0 == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 0)
- return -tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return -policy::raise_overflow_error<RealType>(function, 0, Policy());
    if(p == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
    result = a - log(-log(p)) * b;
 
    return result;
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<extreme_value_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<extreme_value_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
    RealType a = c.dist.location();
    RealType b = c.dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b("boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)", b, &result, Policy()))
       return result;
 
- result = -boost::math::expm1(-exp((a-c.param)/b));
+ result = -boost::math::expm1(-exp((a-c.param)/b), Policy());
 
    return result;
 }
 
-template <class RealType>
-RealType quantile(const complemented2_type<extreme_value_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+RealType quantile(const complemented2_type<extreme_value_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const extreme_value_distribution<%1%>&, %1%)";
+
    RealType a = c.dist.location();
    RealType b = c.dist.scale();
    RealType q = c.param;
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b(function, b, &result, Policy()))
       return result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(0 == detail::check_probability(function, q, &result, Policy()))
       return result;
 
    if(q == 0)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
    if(q == 1)
- return -tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return -policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- result = a - log(-boost::math::log1p(-q)) * b;
+ result = a - log(-boost::math::log1p(-q, Policy())) * b;
 
    return result;
 }
 
-template <class RealType>
-inline RealType mean(const extreme_value_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const extreme_value_distribution<RealType, Policy>& dist)
 {
    RealType a = dist.location();
    RealType b = dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b("boost::math::mean(const extreme_value_distribution<%1%>&)", b, &result, Policy()))
       return result;
    return a + constants::euler<RealType>() * b;
 }
 
-template <class RealType>
-inline RealType standard_deviation(const extreme_value_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType standard_deviation(const extreme_value_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions.
 
    RealType b = dist.scale();
    RealType result;
- if(0 == detail::verify_scale_b(BOOST_CURRENT_FUNCTION, b, &result))
+ if(0 == detail::verify_scale_b("boost::math::standard_deviation(const extreme_value_distribution<%1%>&)", b, &result, Policy()))
       return result;
    return constants::pi<RealType>() * b / sqrt(static_cast<RealType>(6));
 }
 
-template <class RealType>
-inline RealType mode(const extreme_value_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const extreme_value_distribution<RealType, Policy>& dist)
 {
    return dist.location();
 }
 
-template <class RealType>
-inline RealType median(const extreme_value_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const extreme_value_distribution<RealType, Policy>& dist)
 {
   using constants::ln_ln_two;
    return dist.location() - dist.scale() * ln_ln_two<RealType>();
 }
 
-template <class RealType>
-inline RealType skewness(const extreme_value_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType skewness(const extreme_value_distribution<RealType, Policy>& /*dist*/)
 {
    //
    // This is 12 * sqrt(6) * zeta(3) / pi^3:
@@ -224,15 +229,15 @@
    return static_cast<RealType>(1.1395470994046486574927930193898461120875997958366L);
 }
 
-template <class RealType>
-inline RealType kurtosis(const extreme_value_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis(const extreme_value_distribution<RealType, Policy>& /*dist*/)
 {
    // See http://mathworld.wolfram.com/ExtremeValueDistribution.html
    return RealType(27) / 5;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const extreme_value_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const extreme_value_distribution<RealType, Policy>& /*dist*/)
 {
    // See http://mathworld.wolfram.com/ExtremeValueDistribution.html
    return RealType(12) / 5;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/fisher_f.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/fisher_f.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/fisher_f.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -17,19 +17,21 @@
 
 namespace boost{ namespace math{
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class fisher_f_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    fisher_f_distribution(const RealType& i, const RealType& j) : m_df1(i), m_df2(j)
    {
+ static const char* function = "fisher_f_distribution<%1%>::fisher_f_distribution";
       RealType result;
       detail::check_df(
- BOOST_CURRENT_FUNCTION, m_df1, &result);
+ function, m_df1, &result, Policy());
       detail::check_df(
- BOOST_CURRENT_FUNCTION, m_df2, &result);
+ function, m_df2, &result, Policy());
    } // fisher_f_distribution
 
    RealType degrees_of_freedom1()const
@@ -51,47 +53,48 @@
 
 typedef fisher_f_distribution<double> fisher_f;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const fisher_f_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const fisher_f_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const fisher_f_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const fisher_f_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-RealType pdf(const fisher_f_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+RealType pdf(const fisher_f_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
+ static const char* function = "boost::math::pdf(fisher_f_distribution<%1%> const&, %1%)";
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
 
    if((x < 0) || !(boost::math::isfinite)(x))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Random variable parameter was %1%, but must be > 0 !", x);
+ return policy::raise_domain_error<RealType>(
+ function, "Random variable parameter was %1%, but must be > 0 !", x, Policy());
    }
 
    if(x == 0)
    {
       // special cases:
       if(df1 < 2)
- return tools::overflow_error<RealType>(
- BOOST_CURRENT_FUNCTION, 0);
+ return policy::raise_overflow_error<RealType>(
+ function, 0, Policy());
       else if(df1 == 2)
          return 1;
       else
@@ -111,34 +114,35 @@
    if(v1x > df2)
    {
       result = (df2 * df1) / ((df2 + v1x) * (df2 + v1x));
- result *= ibeta_derivative(df2 / 2, df1 / 2, df2 / (df2 + v1x));
+ result *= ibeta_derivative(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy());
    }
    else
    {
       result = df2 + df1 * x;
       result = (result * df1 - x * df1 * df1) / (result * result);
- result *= ibeta_derivative(df1 / 2, df2 / 2, v1x / (df2 + v1x));
+ result *= ibeta_derivative(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
    }
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const fisher_f_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const fisher_f_distribution<RealType, Policy>& dist, const RealType& x)
 {
+ static const char* function = "boost::math::cdf(fisher_f_distribution<%1%> const&, %1%)";
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
 
    if((x < 0) || !(boost::math::isfinite)(x))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Random Variable parameter was %1%, but must be > 0 !", x);
+ return policy::raise_domain_error<RealType>(
+ function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
    }
 
    RealType v1x = df1 * x;
@@ -152,50 +156,52 @@
    // to switch things around so we're passing 1-z instead.
    //
    return v1x > df2
- ? boost::math::ibetac(df2 / 2, df1 / 2, df2 / (df2 + v1x))
- : boost::math::ibeta(df1 / 2, df2 / 2, v1x / (df2 + v1x));
+ ? boost::math::ibetac(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy())
+ : boost::math::ibeta(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const fisher_f_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const fisher_f_distribution<RealType, Policy>& dist, const RealType& p)
 {
+ static const char* function = "boost::math::quantile(fisher_f_distribution<%1%> const&, %1%)";
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result)
+ function, df2, &error_result, Policy())
          && detail::check_probability(
- BOOST_CURRENT_FUNCTION, p, &error_result))
+ function, p, &error_result, Policy()))
       return error_result;
 
    RealType x, y;
 
- x = boost::math::ibeta_inv(df1 / 2, df2 / 2, p, &y);
+ x = boost::math::ibeta_inv(df1 / 2, df2 / 2, p, &y, Policy());
 
    return df2 * x / (df1 * y);
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<fisher_f_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<fisher_f_distribution<RealType, Policy>, RealType>& c)
 {
+ static const char* function = "boost::math::cdf(fisher_f_distribution<%1%> const&, %1%)";
    RealType df1 = c.dist.degrees_of_freedom1();
    RealType df2 = c.dist.degrees_of_freedom2();
    RealType x = c.param;
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
 
    if((x < 0) || !(boost::math::isfinite)(x))
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Random Variable parameter was %1%, but must be > 0 !", x);
+ return policy::raise_domain_error<RealType>(
+ function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
    }
 
    RealType v1x = df1 * x;
@@ -209,104 +215,109 @@
    // to switch things around so we're passing 1-z instead.
    //
    return v1x > df2
- ? boost::math::ibeta(df2 / 2, df1 / 2, df2 / (df2 + v1x))
- : boost::math::ibetac(df1 / 2, df2 / 2, v1x / (df2 + v1x));
+ ? boost::math::ibeta(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy())
+ : boost::math::ibetac(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<fisher_f_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<fisher_f_distribution<RealType, Policy>, RealType>& c)
 {
+ static const char* function = "boost::math::quantile(fisher_f_distribution<%1%> const&, %1%)";
    RealType df1 = c.dist.degrees_of_freedom1();
    RealType df2 = c.dist.degrees_of_freedom2();
    RealType p = c.param;
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result)
+ function, df2, &error_result, Policy())
          && detail::check_probability(
- BOOST_CURRENT_FUNCTION, p, &error_result))
+ function, p, &error_result, Policy()))
       return error_result;
 
    RealType x, y;
 
- x = boost::math::ibetac_inv(df1 / 2, df2 / 2, p, &y);
+ x = boost::math::ibetac_inv(df1 / 2, df2 / 2, p, &y, Policy());
 
    return df2 * x / (df1 * y);
 }
 
-template <class RealType>
-inline RealType mean(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const fisher_f_distribution<RealType, Policy>& dist)
 { // Mean of F distribution = v.
+ static const char* function = "boost::math::mean(fisher_f_distribution<%1%> const&)";
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
    if(df2 <= 2)
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mean.", df2);
+ return policy::raise_domain_error<RealType>(
+ function, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mean.", df2, Policy());
    }
    return df2 / (df2 - 2);
 } // mean
 
-template <class RealType>
-inline RealType variance(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const fisher_f_distribution<RealType, Policy>& dist)
 { // Variance of F distribution.
+ static const char* function = "boost::math::variance(fisher_f_distribution<%1%> const&)";
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
    if(df2 <= 4)
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Second degree of freedom was %1% but must be > 4 in order for the distribution to have a valid variance.", df2);
+ return policy::raise_domain_error<RealType>(
+ function, "Second degree of freedom was %1% but must be > 4 in order for the distribution to have a valid variance.", df2, Policy());
    }
    return 2 * df2 * df2 * (df1 + df2 - 2) / (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));
 } // variance
 
-template <class RealType>
-inline RealType mode(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const fisher_f_distribution<RealType, Policy>& dist)
 {
+ static const char* function = "boost::math::mode(fisher_f_distribution<%1%> const&)";
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
    if(df2 <= 2)
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mode.", df2);
+ return policy::raise_domain_error<RealType>(
+ function, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mode.", df2, Policy());
    }
    return df2 * (df1 - 2) / (df1 * (df2 + 2));
 }
 
-//template <class RealType>
-//inline RealType median(const fisher_f_distribution<RealType>& dist)
+//template <class RealType, class Policy>
+//inline RealType median(const fisher_f_distribution<RealType, Policy>& dist)
 //{ // Median of Fisher F distribution is not defined.
 // return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
 // } // median
 
 // Now implemented via quantile(half) in derived accessors.
 
-template <class RealType>
-inline RealType skewness(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const fisher_f_distribution<RealType, Policy>& dist)
 {
+ static const char* function = "boost::math::skewness(fisher_f_distribution<%1%> const&)";
    using namespace std; // ADL of std names
    // See http://mathworld.wolfram.com/F-Distribution.html
    RealType df1 = dist.degrees_of_freedom1();
@@ -314,44 +325,45 @@
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
    if(df2 <= 6)
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Second degree of freedom was %1% but must be > 6 in order for the distribution to have a skewness.", df2);
+ return policy::raise_domain_error<RealType>(
+ function, "Second degree of freedom was %1% but must be > 6 in order for the distribution to have a skewness.", df2, Policy());
    }
    return 2 * (df2 + 2 * df1 - 2) * sqrt((2 * df2 - 8) / (df1 * (df2 + df1 - 2))) / (df2 - 6);
 }
 
-template <class RealType>
-RealType kurtosis_excess(const fisher_f_distribution<RealType>& dist);
+template <class RealType, class Policy>
+RealType kurtosis_excess(const fisher_f_distribution<RealType, Policy>& dist);
 
-template <class RealType>
-inline RealType kurtosis(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const fisher_f_distribution<RealType, Policy>& dist)
 {
    return 3 + kurtosis_excess(dist);
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const fisher_f_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const fisher_f_distribution<RealType, Policy>& dist)
 {
+ static const char* function = "boost::math::kurtosis_excess(fisher_f_distribution<%1%> const&)";
    // See http://mathworld.wolfram.com/F-Distribution.html
    RealType df1 = dist.degrees_of_freedom1();
    RealType df2 = dist.degrees_of_freedom2();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, df1, &error_result)
+ function, df1, &error_result, Policy())
          && detail::check_df(
- BOOST_CURRENT_FUNCTION, df2, &error_result))
+ function, df2, &error_result, Policy()))
       return error_result;
    if(df2 <= 8)
    {
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION, "Second degree of freedom was %1% but must be > 8 in order for the distribution to have a kutosis.", df2);
+ return policy::raise_domain_error<RealType>(
+ function, "Second degree of freedom was %1% but must be > 8 in order for the distribution to have a kutosis.", df2, Policy());
    }
    RealType df2_2 = df2 * df2;
    RealType df1_2 = df1 * df1;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/gamma.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/gamma.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/gamma.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -21,61 +21,62 @@
 namespace detail
 {
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_gamma_shape(
       const char* function,
       RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
    if((shape <= 0) || !(boost::math::isfinite)(shape))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Shape parameter is %1%, but must be > 0 !", shape);
+ "Shape parameter is %1%, but must be > 0 !", shape, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_gamma_x(
       const char* function,
       RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
    if((x < 0) || !(boost::math::isfinite)(x))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Random variate is %1% but must be >= 0 !", x);
+ "Random variate is %1% but must be >= 0 !", x, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_gamma(
       const char* function,
       RealType scale,
       RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
- return check_scale(function, scale, result) && check_gamma_shape(function, shape, result);
+ return check_scale(function, scale, result, pol) && check_gamma_shape(function, shape, result, pol);
 }
 
 } // namespace detail
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class gamma_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    gamma_distribution(RealType shape, RealType scale = 1)
       : m_shape(shape), m_scale(scale)
    {
       RealType result;
- detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result);
+ detail::check_gamma("boost::math::gamma_distribution<%1%>::gamma_distribution", scale, shape, &result, Policy());
    }
 
    RealType shape()const
@@ -97,218 +98,238 @@
 
 // NO typedef because of clash with name of gamma function.
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const gamma_distribution<RealType>& /* dist */)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const gamma_distribution<RealType, Policy>& /* dist */)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const gamma_distribution<RealType>& /* dist */)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const gamma_distribution<RealType, Policy>& /* dist */)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const gamma_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const gamma_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::pdf(const gamma_distribution<%1%>&, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_gamma_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_gamma_x(function, x, &result, Policy()))
       return result;
 
    if(x == 0)
    {
       return 0;
    }
- result = gamma_p_derivative(shape, x / scale) / scale;
+ result = gamma_p_derivative(shape, x / scale, Policy()) / scale;
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const gamma_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const gamma_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const gamma_distribution<%1%>&, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_gamma_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_gamma_x(function, x, &result, Policy()))
       return result;
 
- result = boost::math::gamma_p(shape, x / scale);
+ result = boost::math::gamma_p(shape, x / scale, Policy());
    return result;
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const gamma_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const gamma_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(false == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- result = gamma_p_inv(shape, p) * scale;
+ result = gamma_p_inv(shape, p, Policy()) * scale;
 
    return result;
 }
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<gamma_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<gamma_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
+
    RealType shape = c.dist.shape();
    RealType scale = c.dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_gamma_x(BOOST_CURRENT_FUNCTION, c.param, &result))
+ if(false == detail::check_gamma_x(function, c.param, &result, Policy()))
       return result;
 
- result = gamma_q(shape, c.param / scale);
+ result = gamma_q(shape, c.param / scale, Policy());
 
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<gamma_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<gamma_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
+
    RealType shape = c.dist.shape();
    RealType scale = c.dist.scale();
    RealType q = c.param;
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(false == detail::check_probability(function, q, &result, Policy()))
       return result;
 
    if(q == 0)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- result = gamma_q_inv(shape, q) * scale;
+ result = gamma_q_inv(shape, q, Policy()) * scale;
 
    return result;
 }
 
-template <class RealType>
-inline RealType mean(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const gamma_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::mean(const gamma_distribution<%1%>&)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
 
    result = shape * scale;
    return result;
 }
 
-template <class RealType>
-inline RealType variance(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const gamma_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::variance(const gamma_distribution<%1%>&)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
 
    result = shape * scale * scale;
    return result;
 }
 
-template <class RealType>
-inline RealType mode(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const gamma_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::mode(const gamma_distribution<%1%>&)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
 
    if(shape < 1)
- return tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ return policy::raise_domain_error<RealType>(
+ function,
          "The mode of the gamma distribution is only defined for values of the shape parameter >= 1, but got %1%.",
- shape);
+ shape, Policy());
 
    result = (shape - 1) * scale;
    return result;
 }
 
-//template <class RealType>
-//inline RealType median(const gamma_distribution<RealType>& dist)
+//template <class RealType, class Policy>
+//inline RealType median(const gamma_distribution<RealType, Policy>& dist)
 //{ // Rely on default definition in derived accessors.
 //}
 
-template <class RealType>
-inline RealType skewness(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const gamma_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::skewness(const gamma_distribution<%1%>&)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
 
    result = 2 / sqrt(shape);
    return result;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const gamma_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::kurtosis_excess(const gamma_distribution<%1%>&)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_gamma(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
       return result;
 
    result = 6 / shape;
    return result;
 }
 
-template <class RealType>
-inline RealType kurtosis(const gamma_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const gamma_distribution<RealType, Policy>& dist)
 {
    return kurtosis_excess(dist) + 3;
 }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/lognormal.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/lognormal.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/lognormal.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -21,17 +21,17 @@
 namespace detail
 {
 
- template <class RealType>
+ template <class RealType, class Policy>
   inline bool check_lognormal_x(
         const char* function,
         RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
   {
      if((x < 0) || !(boost::math::isfinite)(x))
      {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
            function,
- "Random variate is %1% but must be >= 0 !", x);
+ "Random variate is %1% but must be >= 0 !", x, pol);
         return false;
      }
      return true;
@@ -40,17 +40,18 @@
 } // namespace detail
 
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class lognormal_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    lognormal_distribution(RealType location = 0, RealType scale = 1)
       : m_location(location), m_scale(scale)
    {
       RealType result;
- detail::check_scale(BOOST_CURRENT_FUNCTION, scale, &result);
+ detail::check_scale("boost::math::lognormal_distribution<%1%>::lognormal_distribution", scale, &result, Policy());
    }
 
    RealType location()const
@@ -72,33 +73,35 @@
 
 typedef lognormal_distribution<double> lognormal;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const lognormal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const lognormal_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x is >0 to +infinity.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const lognormal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const lognormal_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-RealType pdf(const lognormal_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+RealType pdf(const lognormal_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
    RealType mu = dist.location();
    RealType sigma = dist.scale();
 
+ static const char* function = "boost::math::pdf(const lognormal_distribution<%1%>&, %1%)";
+
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale(function, sigma, &result, Policy()))
       return result;
- if(0 == detail::check_lognormal_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(0 == detail::check_lognormal_x(function, x, &result, Policy()))
       return result;
 
    if(x == 0)
@@ -114,76 +117,84 @@
    return result;
 }
 
-template <class RealType>
-inline RealType cdf(const lognormal_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const lognormal_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const lognormal_distribution<%1%>&, %1%)";
+
    RealType result;
- if(0 == detail::check_lognormal_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(0 == detail::check_lognormal_x(function, x, &result, Policy()))
       return result;
 
    if(x == 0)
       return 0;
 
- normal_distribution<RealType> norm(dist.location(), dist.scale());
+ normal_distribution<RealType, Policy> norm(dist.location(), dist.scale());
    return cdf(norm, log(x));
 }
 
-template <class RealType>
-inline RealType quantile(const lognormal_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const lognormal_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const lognormal_distribution<%1%>&, %1%)";
+
    RealType result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(0 == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 0)
       return 0;
    if(p == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- normal_distribution<RealType> norm(dist.location(), dist.scale());
+ normal_distribution<RealType, Policy> norm(dist.location(), dist.scale());
    return exp(quantile(norm, p));
 }
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<lognormal_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<lognormal_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const lognormal_distribution<%1%>&, %1%)";
+
    RealType result;
- if(0 == detail::check_lognormal_x(BOOST_CURRENT_FUNCTION, c.param, &result))
+ if(0 == detail::check_lognormal_x(function, c.param, &result, Policy()))
       return result;
 
    if(c.param == 0)
       return 1;
 
- normal_distribution<RealType> norm(c.dist.location(), c.dist.scale());
+ normal_distribution<RealType, Policy> norm(c.dist.location(), c.dist.scale());
    return cdf(complement(norm, log(c.param)));
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<lognormal_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<lognormal_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const lognormal_distribution<%1%>&, %1%)";
+
    RealType result;
- if(0 == detail::check_probability(BOOST_CURRENT_FUNCTION, c.param, &result))
+ if(0 == detail::check_probability(function, c.param, &result, Policy()))
       return result;
 
    if(c.param == 1)
       return 0;
    if(c.param == 0)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- normal_distribution<RealType> norm(c.dist.location(), c.dist.scale());
+ normal_distribution<RealType, Policy> norm(c.dist.location(), c.dist.scale());
    return exp(quantile(complement(norm, c.param)));
 }
 
-template <class RealType>
-inline RealType mean(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -191,14 +202,14 @@
    RealType sigma = dist.scale();
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::mean(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
    return exp(mu + sigma * sigma / 2);
 }
 
-template <class RealType>
-inline RealType variance(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -206,14 +217,14 @@
    RealType sigma = dist.scale();
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::variance(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
- return boost::math::expm1(sigma * sigma) * exp(2 * mu + sigma * sigma);
+ return boost::math::expm1(sigma * sigma, Policy()) * exp(2 * mu + sigma * sigma);
 }
 
-template <class RealType>
-inline RealType mode(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -221,22 +232,22 @@
    RealType sigma = dist.scale();
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::mode(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
    return exp(mu - sigma * sigma);
 }
 
-template <class RealType>
-inline RealType median(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
    RealType mu = dist.location();
    return exp(mu); // e^mu
 }
 
-template <class RealType>
-inline RealType skewness(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -247,14 +258,14 @@
    RealType ess = exp(ss);
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::skewness(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
- return (ess + 2) * sqrt(boost::math::expm1(ss));
+ return (ess + 2) * sqrt(boost::math::expm1(ss, Policy()));
 }
 
-template <class RealType>
-inline RealType kurtosis(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -263,14 +274,14 @@
    RealType ss = sigma * sigma;
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::kurtosis(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
    return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 3;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const lognormal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const lognormal_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
@@ -279,7 +290,7 @@
    RealType ss = sigma * sigma;
 
    RealType result;
- if(0 == detail::check_scale(BOOST_CURRENT_FUNCTION, sigma, &result))
+ if(0 == detail::check_scale("boost::math::kurtosis_excess(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
       return result;
 
    return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 6;

Modified: sandbox/math_toolkit/policy/boost/math/distributions/negative_binomial.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/negative_binomial.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/negative_binomial.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -44,6 +44,7 @@
 #include <boost/math/distributions/detail/common_error_handling.hpp> // error checks domain_error & logic_error.
 #include <boost/math/special_functions/fpclassify.hpp> // isnan.
 #include <boost/math/tools/roots.hpp> // for root finding.
+#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
 
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/type_traits/is_integral.hpp>
@@ -66,57 +67,57 @@
     namespace negative_binomial_detail
     {
       // Common error checking routines for negative binomial distribution functions:
- template <class RealType>
- inline bool check_successes(const char* function, const RealType& r, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_successes(const char* function, const RealType& r, RealType* result, const Policy& pol)
       {
         if( !(boost::math::isfinite)(r) || (r <= 0) )
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Number of successes argument is %1%, but must be > 0 !", r);
+ "Number of successes argument is %1%, but must be > 0 !", r, pol);
           return false;
         }
         return true;
       }
- template <class RealType>
- inline bool check_success_fraction(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
       {
         if( !(boost::math::isfinite)(p) || (p < 0) || (p > 1) )
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p);
+ "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, pol);
           return false;
         }
         return true;
       }
- template <class RealType>
- inline bool check_dist(const char* function, const RealType& r, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist(const char* function, const RealType& r, const RealType& p, RealType* result, const Policy& pol)
       {
- return check_success_fraction(function, p, result)
- && check_successes(function, r, result);
+ return check_success_fraction(function, p, result, pol)
+ && check_successes(function, r, result, pol);
       }
- template <class RealType>
- inline bool check_dist_and_k(const char* function, const RealType& r, const RealType& p, RealType k, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_k(const char* function, const RealType& r, const RealType& p, RealType k, RealType* result, const Policy& pol)
       {
- if(check_dist(function, r, p, result) == false)
+ if(check_dist(function, r, p, result, pol) == false)
         {
           return false;
         }
         if( !(boost::math::isfinite)(k) || (k < 0) )
         { // Check k failures.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Number of failures argument is %1%, but must be >= 0 !", k);
+ "Number of failures argument is %1%, but must be >= 0 !", k, pol);
           return false;
         }
         return true;
       } // Check_dist_and_k
 
- template <class RealType>
- inline bool check_dist_and_prob(const char* function, const RealType& r, RealType p, RealType prob, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_prob(const char* function, const RealType& r, RealType p, RealType prob, RealType* result, const Policy& pol)
       {
- if(check_dist(function, r, p, result) && detail::check_probability(function, prob, result) == false)
+ if(check_dist(function, r, p, result, pol) && detail::check_probability(function, prob, result, pol) == false)
         {
           return false;
         }
@@ -124,20 +125,21 @@
       } // check_dist_and_prob
     } // namespace negative_binomial_detail
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class negative_binomial_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       negative_binomial_distribution(RealType r, RealType p) : m_r(r), m_p(p)
       { // Constructor.
         RealType result;
         negative_binomial_detail::check_dist(
- BOOST_CURRENT_FUNCTION,
+ "negative_binomial_distribution<%1%>::negative_binomial_distribution",
           m_r, // Check successes r > 0.
           m_p, // Check success_fraction 0 <= p <= 1.
- &result);
+ &result, Policy());
       } // negative_binomial_distribution constructor.
 
       // Private data getter class member functions.
@@ -155,11 +157,12 @@
         RealType successes,
         RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
       {
+ static const char* function = "boost::math::negative_binomial<%1%>::estimate_lower_bound_on_p";
         RealType result; // of error checks.
         RealType failures = trials - successes;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, alpha, &result)
+ if(false == detail::check_probability(function, alpha, &result, Policy())
           && negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, successes, RealType(0), failures, &result))
+ function, successes, RealType(0), failures, &result, Policy()))
         {
           return result;
         }
@@ -171,7 +174,7 @@
         // Discrete Distributions" Yong CAI and K. KRISHNAMOORTHY
         // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
         //
- return ibeta_inv(successes, failures + 1, alpha);
+ return ibeta_inv(successes, failures + 1, alpha, static_cast<RealType*>(0), Policy());
       } // estimate_lower_bound_on_p
 
       static RealType estimate_upper_bound_on_p(
@@ -179,11 +182,12 @@
         RealType successes,
         RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
       {
+ static const char* function = "boost::math::negative_binomial<%1%>::estimate_upper_bound_on_p";
         RealType result; // of error checks.
         RealType failures = trials - successes;
         if(false == negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, successes, RealType(0), failures, &result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, alpha, &result))
+ function, successes, RealType(0), failures, &result, Policy())
+ && detail::check_probability(function, alpha, &result, Policy()))
         {
           return result;
         }
@@ -198,7 +202,7 @@
         // Discrete Distributions" Yong CAI and K. KRISHNAMOORTHY
         // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
         //
- return ibetac_inv(successes, failures, alpha);
+ return ibetac_inv(successes, failures, alpha, static_cast<RealType*>(0), Policy());
       } // estimate_upper_bound_on_p
 
       // Estimate number of trials :
@@ -209,14 +213,15 @@
         RealType p, // success fraction 0 <= p <= 1.
         RealType alpha) // risk level threshold 0 <= alpha <= 1.
       {
+ static const char* function = "boost::math::negative_binomial<%1%>::estimate_minimum_number_of_trials";
         // Error checks:
         RealType result;
         if(false == negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, RealType(1), p, k, &result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, alpha, &result))
+ function, RealType(1), p, k, &result, Policy())
+ && detail::check_probability(function, alpha, &result, Policy()))
         { return result; }
 
- result = ibeta_inva(k + 1, p, alpha); // returns n - k
+ result = ibeta_inva(k + 1, p, alpha, Policy()); // returns n - k
         return result + k;
       } // RealType estimate_number_of_failures
 
@@ -225,61 +230,62 @@
         RealType p, // success fraction 0 <= p <= 1.
         RealType alpha) // risk level threshold 0 <= alpha <= 1.
       {
+ static const char* function = "boost::math::negative_binomial<%1%>::estimate_maximum_number_of_trials";
         // Error checks:
         RealType result;
         if(false == negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION, RealType(1), p, k, &result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, alpha, &result))
+ function, RealType(1), p, k, &result, Policy())
+ && detail::check_probability(function, alpha, &result, Policy()))
         { return result; }
 
- result = ibetac_inva(k + 1, p, alpha); // returns n - k
+ result = ibetac_inva(k + 1, p, alpha, Policy()); // returns n - k
         return result + k;
       } // RealType estimate_number_of_trials complemented
 
     private:
       RealType m_r; // successes.
       RealType m_p; // success_fraction
- }; // template <class RealType> class negative_binomial_distribution
+ }; // template <class RealType, class Policy> class negative_binomial_distribution
 
     typedef negative_binomial_distribution<double> negative_binomial; // Reserved name of type double.
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const negative_binomial_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const negative_binomial_distribution<RealType, Policy>& /* dist */)
     { // Range of permissible values for random variable k.
             using boost::math::tools::max_value;
             return std::pair<RealType, RealType>(0, max_value<RealType>()); // max_integer?
     }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const negative_binomial_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const negative_binomial_distribution<RealType, Policy>& /* dist */)
     { // Range of supported values for random variable k.
             // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
             using boost::math::tools::max_value;
             return std::pair<RealType, RealType>(0, max_value<RealType>()); // max_integer?
     }
 
- template <class RealType>
- inline RealType mean(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const negative_binomial_distribution<RealType, Policy>& dist)
     { // Mean of Negative Binomial distribution = r(1-p)/p.
       return dist.successes() * (1 - dist.success_fraction() ) / dist.success_fraction();
     } // mean
 
- //template <class RealType>
- //inline RealType median(const negative_binomial_distribution<RealType>& dist)
+ //template <class RealType, class Policy>
+ //inline RealType median(const negative_binomial_distribution<RealType, Policy>& dist)
     //{ // Median of negative_binomial_distribution is not defined.
- // return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
+ // return policy::raise_domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
     //} // median
     // Now implemented via quantile(half) in derived accessors.
 
- template <class RealType>
- inline RealType mode(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const negative_binomial_distribution<RealType, Policy>& dist)
     { // Mode of Negative Binomial distribution = floor[(r-1) * (1 - p)/p]
       using namespace std; // ADL of std functions.
       return floor((dist.successes() -1) * (1 - dist.success_fraction()) / dist.success_fraction());
     } // mode
 
- template <class RealType>
- inline RealType skewness(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const negative_binomial_distribution<RealType, Policy>& dist)
     { // skewness of Negative Binomial distribution = 2-p / (sqrt(r(1-p))
       using namespace std; // ADL of std functions.
       RealType p = dist.success_fraction();
@@ -289,8 +295,8 @@
         sqrt(r * (1 - p));
     } // skewness
 
- template <class RealType>
- inline RealType kurtosis(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const negative_binomial_distribution<RealType, Policy>& dist)
     { // kurtosis of Negative Binomial distribution
       // http://en.wikipedia.org/wiki/Negative_binomial is kurtosis_excess so add 3
       RealType p = dist.success_fraction();
@@ -298,8 +304,8 @@
       return 3 + (6 / r) + ((p * p) / (r * (1 - p)));
     } // kurtosis
 
- template <class RealType>
- inline RealType kurtosis_excess(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const negative_binomial_distribution<RealType, Policy>& dist)
     { // kurtosis excess of Negative Binomial distribution
       // http://mathworld.wolfram.com/Kurtosis.html table of kurtosis_excess
       RealType p = dist.success_fraction();
@@ -307,37 +313,50 @@
       return (6 - p * (6-p)) / (r * (1-p));
     } // kurtosis_excess
 
- template <class RealType>
- inline RealType variance(const negative_binomial_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const negative_binomial_distribution<RealType, Policy>& dist)
     { // Variance of Binomial distribution = r (1-p) / p^2.
       return dist.successes() * (1 - dist.success_fraction())
         / (dist.success_fraction() * dist.success_fraction());
     } // variance
 
- // RealType standard_deviation(const negative_binomial_distribution<RealType>& dist)
+ // RealType standard_deviation(const negative_binomial_distribution<RealType, Policy>& dist)
     // standard_deviation provided by derived accessors.
- // RealType hazard(const negative_binomial_distribution<RealType>& dist)
+ // RealType hazard(const negative_binomial_distribution<RealType, Policy>& dist)
     // hazard of Negative Binomial distribution provided by derived accessors.
- // RealType chf(const negative_binomial_distribution<RealType>& dist)
+ // RealType chf(const negative_binomial_distribution<RealType, Policy>& dist)
     // chf of Negative Binomial distribution provided by derived accessors.
 
- template <class RealType>
- inline RealType pdf(const negative_binomial_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ inline RealType pdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType k)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
 
+ static const char* function = "boost::math::pdf(const negative_binomial_distribution<%1%>&, %1%)";
+
       RealType r = dist.successes();
       RealType p = dist.success_fraction();
+ RealType result;
+ if(false == negative_binomial_detail::check_dist_and_k(
+ function,
+ r,
+ dist.success_fraction(),
+ k,
+ &result, Policy()))
+ {
+ return result;
+ }
 
- RealType result = (p/(r + k)) * ibeta_derivative(r, static_cast<RealType>(k+1), p);
+ result = (p/(r + k)) * ibeta_derivative(r, static_cast<RealType>(k+1), p, Policy());
       // Equivalent to:
       // return exp(lgamma(r + k) - lgamma(r) - lgamma(k+1)) * pow(p, r) * pow((1-p), k);
       return result;
     } // negative_binomial_pdf
 
- template <class RealType>
- inline RealType cdf(const negative_binomial_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ inline RealType cdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType k)
     { // Cumulative Distribution Function of Negative Binomial.
+ static const char* function = "boost::math::cdf(const negative_binomial_distribution<%1%>&, %1%)";
       using boost::math::ibeta; // Regularized incomplete beta function.
       // k argument may be integral, signed, or unsigned, or floating point.
       // If necessary, it has already been promoted from an integral type.
@@ -346,39 +365,40 @@
       // Error check:
       RealType result;
       if(false == negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ function,
         r,
         dist.success_fraction(),
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
 
- RealType probability = ibeta(r, static_cast<RealType>(k+1), p);
+ RealType probability = ibeta(r, static_cast<RealType>(k+1), p, Policy());
       // Ip(r, k+1) = ibeta(r, k+1, p)
       return probability;
     } // cdf Cumulative Distribution Function Negative Binomial.
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<negative_binomial_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<negative_binomial_distribution<RealType, Policy>, RealType>& c)
       { // Complemented Cumulative Distribution Function Negative Binomial.
 
+ static const char* function = "boost::math::cdf(const negative_binomial_distribution<%1%>&, %1%)";
       using boost::math::ibetac; // Regularized incomplete beta function complement.
       // k argument may be integral, signed, or unsigned, or floating point.
       // If necessary, it has already been promoted from an integral type.
       RealType const& k = c.param;
- negative_binomial_distribution<RealType> const& dist = c.dist;
+ negative_binomial_distribution<RealType, Policy> const& dist = c.dist;
       RealType p = dist.success_fraction();
       RealType r = dist.successes();
       // Error check:
       RealType result;
       if(false == negative_binomial_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ function,
         r,
         p,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -387,14 +407,14 @@
       // 1-p if p is very small, perhaps smaller than machine epsilon.
       // Ip(k+1, r) = ibetac(r, k+1, p)
       // constrain_probability here?
- RealType probability = ibetac(r, static_cast<RealType>(k+1), p);
+ RealType probability = ibetac(r, static_cast<RealType>(k+1), p, Policy());
       // Numerical errors might cause probability to be slightly outside the range < 0 or > 1.
       // This might cause trouble downstream, so warn, possibly throw exception, but constrain to the limits.
       return probability;
     } // cdf Cumulative Distribution Function Negative Binomial.
 
- template <class RealType>
- inline RealType quantile(const negative_binomial_distribution<RealType>& dist, const RealType& P)
+ template <class RealType, class Policy>
+ inline RealType quantile(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& P)
     { // Quantile, percentile/100 or Percent Point Negative Binomial function.
       // Return the number of expected failures k for a given probability p.
 
@@ -402,6 +422,7 @@
       // MAthCAD pnbinom return smallest k such that negative_binomial(k, n, p) >= probability.
       // k argument may be integral, signed, or unsigned, or floating point.
       // BUT Cephes/CodeCogs says: finds argument p (0 to 1) such that cdf(k, n, p) = y
+ static const char* function = "boost::math::quantile(const negative_binomial_distribution<%1%>&, %1%)";
       using namespace std; // ADL of std functions.
 
       RealType p = dist.success_fraction();
@@ -409,7 +430,7 @@
       // Check dist and P.
       RealType result;
       if(false == negative_binomial_detail::check_dist_and_prob
- (BOOST_CURRENT_FUNCTION, r, p, P, &result))
+ (function, r, p, P, &result, Policy()))
       {
         return result;
       }
@@ -417,9 +438,9 @@
       // Special cases.
       if (P == 1)
       { // Would need +infinity failures for total confidence.
- result = tools::overflow_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "Probability argument is 1, which implies infinite failures !");
+ result = policy::raise_overflow_error<RealType>(
+ function,
+ "Probability argument is 1, which implies infinite failures !", Policy());
         return result;
        // usually means return +std::numeric_limits<RealType>::infinity();
        // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
@@ -432,56 +453,118 @@
       { // p <= pdf(dist, 0) == cdf(dist, 0)
                            return 0;
       }
+ /*
       // Calculate quantile of negative_binomial using the inverse incomplete beta function.
       using boost::math::ibeta_invb;
- return ibeta_invb(r, p, P) - 1; //
+ return ibeta_invb(r, p, P, Policy()) - 1; //
+ */
+ RealType guess = 0;
+ RealType factor = 5;
+ if(r * r * r * P * p > 0.005)
+ guess = detail::inverse_negative_binomial_cornish_fisher(r, p, 1-p, P, 1-P, Policy());
+
+ if(guess < 10)
+ {
+ //
+ // Cornish-Fisher Negative binomial approximation not accurate in this area:
+ //
+ guess = (std::min)(r * 2, RealType(10));
+ }
+ else
+ factor = (1-P < sqrt(tools::epsilon<RealType>())) ? 2 : (guess < 20 ? 1.2f : 1.1f);
+ BOOST_MATH_INSTRUMENT_CODE("guess = " << guess);
+ //
+ // Max iterations permitted:
+ //
+ boost::uintmax_t max_iter = 200;
+ typedef typename Policy::discrete_quantile_type discrete_type;
+ return detail::inverse_discrete_quantile(
+ dist,
+ P,
+ 1-P,
+ guess,
+ factor,
+ RealType(1),
+ discrete_type(),
+ max_iter);
     } // RealType quantile(const negative_binomial_distribution dist, p)
 
- template <class RealType>
- inline RealType quantile(const complemented2_type<negative_binomial_distribution<RealType>, RealType>& c)
- { // Quantile or Percent Point Binomial function.
- // Return the number of expected failures k for a given
- // complement of the probability Q = 1 - P.
-
- // Error checks:
- RealType Q = c.param;
- const negative_binomial_distribution<RealType>& dist = c.dist;
- RealType p = dist.success_fraction();
- RealType r = dist.successes();
- RealType result;
- if(false == negative_binomial_detail::check_dist_and_prob(
- BOOST_CURRENT_FUNCTION,
- r,
- p,
- Q,
- &result))
- {
- return result;
- }
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<negative_binomial_distribution<RealType, Policy>, RealType>& c)
+ { // Quantile or Percent Point Binomial function.
+ // Return the number of expected failures k for a given
+ // complement of the probability Q = 1 - P.
+ static const char* function = "boost::math::quantile(const negative_binomial_distribution<%1%>&, %1%)";
+ using namespace std;
+
+ // Error checks:
+ RealType Q = c.param;
+ const negative_binomial_distribution<RealType, Policy>& dist = c.dist;
+ RealType p = dist.success_fraction();
+ RealType r = dist.successes();
+ RealType result;
+ if(false == negative_binomial_detail::check_dist_and_prob(
+ function,
+ r,
+ p,
+ Q,
+ &result, Policy()))
+ {
+ return result;
+ }
 
- // Special cases:
- //
- if(Q == 1)
- { // There may actually be no answer to this question,
- // since the probability of zero failures may be non-zero,
- return 0; // but zero is the best we can do:
- }
- if (-Q <= powm1(dist.success_fraction(), dist.successes()))
- { // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
- return 0; //
- }
- if(Q == 0)
- { // Probability 1 - Q == 1 so infinite failures to achieve certainty.
- // Would need +infinity failures for total confidence.
- result = tools::overflow_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "Probability argument complement is 0, which implies infinite failures !");
- return result;
- // usually means return +std::numeric_limits<RealType>::infinity();
- // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
- }
- return ibetac_invb(r, p, Q) -1;
- } // quantile complement
+ // Special cases:
+ //
+ if(Q == 1)
+ { // There may actually be no answer to this question,
+ // since the probability of zero failures may be non-zero,
+ return 0; // but zero is the best we can do:
+ }
+ if (-Q <= powm1(dist.success_fraction(), dist.successes(), Policy()))
+ { // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
+ return 0; //
+ }
+ if(Q == 0)
+ { // Probability 1 - Q == 1 so infinite failures to achieve certainty.
+ // Would need +infinity failures for total confidence.
+ result = policy::raise_overflow_error<RealType>(
+ function,
+ "Probability argument complement is 0, which implies infinite failures !", Policy());
+ return result;
+ // usually means return +std::numeric_limits<RealType>::infinity();
+ // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
+ }
+ //return ibetac_invb(r, p, Q, Policy()) -1;
+ RealType guess = 0;
+ RealType factor = 5;
+ if(r * r * r * (1-Q) * p > 0.005)
+ guess = detail::inverse_negative_binomial_cornish_fisher(r, p, 1-p, 1-Q, Q, Policy());
+
+ if(guess < 10)
+ {
+ //
+ // Cornish-Fisher Negative binomial approximation not accurate in this area:
+ //
+ guess = (std::min)(r * 2, RealType(10));
+ }
+ else
+ factor = (Q < sqrt(tools::epsilon<RealType>())) ? 2 : (guess < 20 ? 1.2f : 1.1f);
+ BOOST_MATH_INSTRUMENT_CODE("guess = " << guess);
+ //
+ // Max iterations permitted:
+ //
+ boost::uintmax_t max_iter = 200;
+ typedef typename Policy::discrete_quantile_type discrete_type;
+ return detail::inverse_discrete_quantile(
+ dist,
+ 1-Q,
+ Q,
+ guess,
+ factor,
+ RealType(1),
+ discrete_type(),
+ max_iter);
+ } // quantile complement
 
  } // namespace math
 } // namespace boost

Modified: sandbox/math_toolkit/policy/boost/math/distributions/normal.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/normal.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/normal.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -18,13 +18,14 @@
 
 #include <utility>
 
-namespace boost{ namespace math
-{
-template <class RealType = double>
+namespace boost{ namespace math{
+
+template <class RealType = double, class Policy = policy::policy<> >
 class normal_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    normal_distribution(RealType mean = 0, RealType sd = 1)
       : m_mean(mean), m_sd(sd) {}
@@ -48,23 +49,23 @@
 
 typedef normal_distribution<double> normal;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const normal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const normal_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity.
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const normal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const normal_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity.
 }
 
-template <class RealType>
-inline RealType pdf(const normal_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const normal_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
@@ -81,8 +82,8 @@
    return result;
 }
 
-template <class RealType>
-inline RealType cdf(const normal_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const normal_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
@@ -92,12 +93,12 @@
    RealType diff = (x - mean) / (sd * constants::root_two<RealType>());
    RealType result;
 
- result = boost::math::erfc(-diff) / 2;
+ result = boost::math::erfc(-diff, Policy()) / 2;
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const normal_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const normal_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
@@ -106,7 +107,7 @@
 
    RealType r;
 
- r = boost::math::erfc_inv(2 * p);
+ r = boost::math::erfc_inv(2 * p, Policy());
    r = -r;
    r *= sd * constants::root_two<RealType>();
    r += mean;
@@ -114,8 +115,8 @@
    return r;
 }
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<normal_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<normal_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
@@ -126,13 +127,13 @@
    RealType diff = (x - mean) / (sd * constants::root_two<RealType>());
    RealType result;
 
- result = boost::math::erfc(diff) / 2;
+ result = boost::math::erfc(diff, Policy()) / 2;
 
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<normal_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<normal_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
@@ -141,50 +142,50 @@
    RealType q = c.param;
 
    RealType r;
- r = boost::math::erfc_inv(2 * q);
+ r = boost::math::erfc_inv(2 * q, Policy());
    r *= sd * constants::root_two<RealType>();
    r += mean;
    return r;
 }
 
-template <class RealType>
-inline RealType mean(const normal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const normal_distribution<RealType, Policy>& dist)
 {
    return dist.mean();
 }
 
-template <class RealType>
-inline RealType standard_deviation(const normal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType standard_deviation(const normal_distribution<RealType, Policy>& dist)
 {
    return dist.standard_deviation();
 }
 
-template <class RealType>
-inline RealType mode(const normal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const normal_distribution<RealType, Policy>& dist)
 {
    return dist.mean();
 }
 
-template <class RealType>
-inline RealType median(const normal_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const normal_distribution<RealType, Policy>& dist)
 {
    return dist.mean();
 }
 
-template <class RealType>
-inline RealType skewness(const normal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType skewness(const normal_distribution<RealType, Policy>& /*dist*/)
 {
    return 0;
 }
 
-template <class RealType>
-inline RealType kurtosis(const normal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis(const normal_distribution<RealType, Policy>& /*dist*/)
 {
    return 3;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const normal_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const normal_distribution<RealType, Policy>& /*dist*/)
 {
    return 0;
 }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/pareto.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/pareto.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/pareto.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -27,11 +27,11 @@
   {
     namespace detail
     { // Parameter checking.
- template <class RealType>
+ template <class RealType, class Policy>
       inline bool check_pareto_location(
         const char* function,
         RealType location,
- RealType* result)
+ RealType* result, const Policy& pol)
       {
         if((boost::math::isfinite)(location))
         { // any > 0 finite value is OK.
@@ -41,26 +41,26 @@
           }
           else
           {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
               function,
- "Location parameter is %1%, but must be > 0!", location);
+ "Location parameter is %1%, but must be > 0!", location, pol);
             return false;
           }
         }
         else
         { // Not finite.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Location parameter is %1%, but must be finite!", location);
+ "Location parameter is %1%, but must be finite!", location, pol);
           return false;
         }
       } // bool check_pareto_location
 
- template <class RealType>
+ template <class RealType, class Policy>
       inline bool check_pareto_shape(
         const char* function,
         RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
       {
         if((boost::math::isfinite)(shape))
         { // Any finite value is OK.
@@ -70,26 +70,26 @@
           }
           else
           {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
               function,
- "Shape parameter is %1%, but must be > 0!", shape);
+ "Shape parameter is %1%, but must be > 0!", shape, pol);
             return false;
           }
         }
         else
         { // Not finite.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Shape parameter is %1%, but must be finite!", shape);
+ "Shape parameter is %1%, but must be finite!", shape, pol);
           return false;
         }
       } // bool check_pareto_shape(
 
- template <class RealType>
+ template <class RealType, class Policy>
       inline bool check_pareto_x(
         const char* function,
         RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
       {
         if((boost::math::isfinite)(x))
         { //
@@ -99,52 +99,46 @@
           }
           else
           {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
               function,
- "x parameter is %1%, but must be > 0 !", x);
+ "x parameter is %1%, but must be > 0 !", x, pol);
             return false;
           }
         }
         else
         { // Not finite..
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "x parameter is %1%, but must be finite!", x);
+ "x parameter is %1%, but must be finite!", x, pol);
           return false;
         }
       } // bool check_pareto_x
 
- template <class RealType>
+ template <class RealType, class Policy>
       inline bool check_pareto( // distribution parameters.
         const char* function,
         RealType location,
         RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
       {
- if(check_pareto_location(function, location, result)
- && check_pareto_shape(function, shape, result) )
- {
- return true;
- }
- else
- {
- return false;
- }
+ return check_pareto_location(function, location, result, pol)
+ && check_pareto_shape(function, shape, result, pol);
       } // bool check_pareto(
 
     } // namespace detail
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class pareto_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       pareto_distribution(RealType location = 1, RealType shape = 1)
         : m_location(location), m_shape(shape)
       { // Constructor.
         RealType result;
- detail::check_pareto(BOOST_CURRENT_FUNCTION, location, shape, &result);
+ detail::check_pareto("boost::math::pareto_distribution<%1%>::pareto_distribution", location, shape, &result, Policy());
       }
 
       RealType location()const
@@ -164,66 +158,77 @@
 
     typedef pareto_distribution<double> pareto; // Convenience to allow pareto(2., 3.);
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const pareto_distribution<RealType>& /*dist*/)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const pareto_distribution<RealType, Policy>& /*dist*/)
     { // Range of permissible values for random variable x.
       using boost::math::tools::max_value;
       return std::pair<RealType, RealType>(0, max_value<RealType>()); // location zero to + infinity.
     } // range
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const pareto_distribution<RealType, Policy>& dist)
     { // Range of supported values for random variable x.
       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
       using boost::math::tools::max_value;
       return std::pair<RealType, RealType>(dist.location(), max_value<RealType>() ); // location to + infinity.
     } // support
 
- template <class RealType>
- inline RealType pdf(const pareto_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ inline RealType pdf(const pareto_distribution<RealType, Policy>& dist, const RealType& x)
     {
       using namespace std; // for ADL of std function pow.
+ static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
       RealType location = dist.location();
+ RealType shape = dist.shape();
       RealType result;
- detail::check_pareto_x(BOOST_CURRENT_FUNCTION, x, &result);
+ if(false == (detail::check_pareto_x(function, x, &result, Policy())
+ && detail::check_pareto(function, location, shape, &result, Policy())))
+ return result;
       if (x < location)
       { // regardless of shape, pdf is zero.
         return 0;
       }
- RealType shape = dist.shape();
 
       result = shape * pow(location, shape) / pow(x, shape+1);
       return result;
     } // pdf
 
- template <class RealType>
- inline RealType cdf(const pareto_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ inline RealType cdf(const pareto_distribution<RealType, Policy>& dist, const RealType& x)
     {
       using namespace std; // for ADL of std function pow.
+ static const char* function = "boost::math::cdf(const pareto_distribution<%1%>&, %1%)";
       RealType location = dist.location();
+ RealType shape = dist.shape();
       RealType result;
- detail::check_pareto_x(BOOST_CURRENT_FUNCTION, x, &result);
+
+ if(false == (detail::check_pareto_x(function, x, &result, Policy())
+ && detail::check_pareto(function, location, shape, &result, Policy())))
+ return result;
+
       if (x <= location)
       { // regardless of shape, cdf is zero.
         return 0;
       }
 
- RealType shape = dist.shape();
       // result = RealType(1) - pow((location / x), shape);
- result = -powm1(location/x, shape); // should be more accurate.
+ result = -powm1(location/x, shape, Policy()); // should be more accurate.
       return result;
     } // cdf
 
- template <class RealType>
- inline RealType quantile(const pareto_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ inline RealType quantile(const pareto_distribution<RealType, Policy>& dist, const RealType& p)
     {
       using namespace std; // for ADL of std function pow.
+ static const char* function = "boost::math::quantile(const pareto_distribution<%1%>&, %1%)";
       RealType result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ RealType location = dist.location();
+ RealType shape = dist.shape();
+ if(false == (detail::check_probability(function, p, &result, Policy())
+ && detail::check_pareto(function, location, shape, &result, Policy())))
       {
         return result;
       }
- RealType location = dist.location();
       if (p == 0)
       {
         return location; // x must be location (or less).
@@ -232,45 +237,48 @@
       {
         return tools::max_value<RealType>(); // x = + infinity.
       }
- RealType shape = dist.shape();
       result = location /
         (pow((1 - p), 1 / shape));
       // K. Krishnamoorthy, ISBN 1-58488-635-8 eq 23.1.3
       return result;
     } // quantile
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<pareto_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<pareto_distribution<RealType, Policy>, RealType>& c)
     {
        using namespace std; // for ADL of std function pow.
+ static const char* function = "boost::math::cdf(const pareto_distribution<%1%>&, %1%)";
        RealType result;
        RealType x = c.param;
- if(false == detail::check_pareto_x(BOOST_CURRENT_FUNCTION, x, &result))
- {
- return result;
- }
        RealType location = c.dist.location();
+ RealType shape = c.dist.shape();
+ if(false == (detail::check_pareto_x(function, x, &result, Policy())
+ && detail::check_pareto(function, location, shape, &result, Policy())))
+ return result;
+
        if (x <= location)
        { // regardless of shape, cdf is zero, and complement is unity.
          return 1;
        }
- RealType shape = c.dist.shape();
        result = pow((location/x), shape);
    
        return result;
     } // cdf complement
     
- template <class RealType>
- inline RealType quantile(const complemented2_type<pareto_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<pareto_distribution<RealType, Policy>, RealType>& c)
     {
       using namespace std; // for ADL of std function pow.
+ static const char* function = "boost::math::quantile(const pareto_distribution<%1%>&, %1%)";
       RealType result;
       RealType q = c.param;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ RealType location = c.dist.location();
+ RealType shape = c.dist.shape();
+ if(false == (detail::check_probability(function, q, &result, Policy())
+ && detail::check_pareto(function, location, shape, &result, Policy())))
       {
         return result;
       }
- RealType location = c.dist.location();
       if (q == 1)
       {
         return location; // x must be location (or less).
@@ -279,15 +287,20 @@
       {
         return tools::max_value<RealType>(); // x = + infinity.
       }
- RealType shape = c.dist.shape();
       result = location / (pow(q, 1 / shape));
       // K. Krishnamoorthy, ISBN 1-58488-635-8 eq 23.1.3
       return result;
     } // quantile complement
 
- template <class RealType>
- inline RealType mean(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const pareto_distribution<RealType, Policy>& dist)
     {
+ RealType result;
+ static const char* function = "boost::math::mean(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, dist.location(), dist.shape(), &result, Policy()))
+ {
+ return result;
+ }
       if (dist.shape() > RealType(1))
       {
         return dist.shape() * dist.location() / (dist.shape() - 1);
@@ -299,25 +312,36 @@
       }
     } // mean
 
- template <class RealType>
- inline RealType mode(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const pareto_distribution<RealType, Policy>& dist)
     {
       return dist.location();
     } // mode
 
- template <class RealType>
- inline RealType median(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType median(const pareto_distribution<RealType, Policy>& dist)
     {
+ RealType result;
+ static const char* function = "boost::math::median(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, dist.location(), dist.shape(), &result, Policy()))
+ {
+ return result;
+ }
       using namespace std;
       return dist.location() * pow(2, (1/dist.shape()));
     } // median
 
- template <class RealType>
- inline RealType variance(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const pareto_distribution<RealType, Policy>& dist)
     {
       RealType result;
       RealType location = dist.location();
       RealType shape = dist.shape();
+ static const char* function = "boost::math::variance(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, location, shape, &result, Policy()))
+ {
+ return result;
+ }
       if (shape > 2)
       {
         result = (location * location * shape) /
@@ -325,19 +349,24 @@
       }
       else
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "variance is undefined for shape <= 2, but got %1%.", dist.shape());
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "variance is undefined for shape <= 2, but got %1%.", dist.shape(), Policy());
       }
       return result;
     } // variance
 
- template <class RealType>
- inline RealType skewness(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const pareto_distribution<RealType, Policy>& dist)
     {
       using namespace std;
       RealType result;
       RealType shape = dist.shape();
+ static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, dist.location(), shape, &result, Policy()))
+ {
+ return result;
+ }
       if (shape > 3)
       {
         result = sqrt((shape - 2) / shape) *
@@ -346,18 +375,23 @@
       }
       else
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "skewness is undefined for shape <= 3, but got %1%.", dist.shape());
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "skewness is undefined for shape <= 3, but got %1%.", dist.shape(), Policy());
       }
       return result;
     } // skewness
 
- template <class RealType>
- inline RealType kurtosis(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const pareto_distribution<RealType, Policy>& dist)
     {
       RealType result;
       RealType shape = dist.shape();
+ static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, dist.location(), shape, &result, Policy()))
+ {
+ return result;
+ }
       if (shape > 4)
       {
         result = 3 * ((shape - 2) * (3 * shape * shape + shape + 2)) /
@@ -365,18 +399,23 @@
       }
       else
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "kurtosis_excess is undefined for shape <= 4, but got %1%.", shape);
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "kurtosis_excess is undefined for shape <= 4, but got %1%.", shape, Policy());
       }
       return result;
     } // kurtosis
 
- template <class RealType>
- inline RealType kurtosis_excess(const pareto_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const pareto_distribution<RealType, Policy>& dist)
     {
       RealType result;
       RealType shape = dist.shape();
+ static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
+ if(false == detail::check_pareto(function, dist.location(), shape, &result, Policy()))
+ {
+ return result;
+ }
       if (shape > 4)
       {
         result = 6 * ((shape * shape * shape) + (shape * shape) - 6 * shape - 2) /
@@ -384,9 +423,9 @@
       }
       else
       {
- result = tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
- "kurtosis_excess is undefined for shape <= 4, but got %1%.", dist.shape());
+ result = policy::raise_domain_error<RealType>(
+ function,
+ "kurtosis_excess is undefined for shape <= 4, but got %1%.", dist.shape(), Policy());
       }
       return result;
     } // kurtosis_excess

Modified: sandbox/math_toolkit/policy/boost/math/distributions/poisson.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/poisson.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/poisson.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -42,6 +42,7 @@
 #include <boost/math/special_functions/fpclassify.hpp> // isnan.
 #include <boost/math/special_functions/factorials.hpp> // factorials.
 #include <boost/math/tools/roots.hpp> // for root finding.
+#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
 
 #include <utility>
 
@@ -56,86 +57,148 @@
 {
   namespace math
   {
+ namespace detail{
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_nearest>&,
+ boost::uintmax_t& max_iter);
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_above>&,
+ boost::uintmax_t& max_iter);
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_below>&,
+ boost::uintmax_t& max_iter);
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_outside>&,
+ boost::uintmax_t& max_iter);
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::integer_inside>&,
+ boost::uintmax_t& max_iter);
+ template <class Dist>
+ inline typename Dist::value_type
+ inverse_discrete_quantile(
+ const Dist& dist,
+ const typename Dist::value_type& p,
+ const typename Dist::value_type& guess,
+ const typename Dist::value_type& multiplier,
+ const typename Dist::value_type& adder,
+ const policy::discrete_quantile<policy::real>&,
+ boost::uintmax_t& max_iter);
+ }
     namespace poisson_detail
     {
       // Common error checking routines for Poisson distribution functions.
       // These are convoluted, & apparently redundant, to try to ensure that
       // checks are always performed, even if exceptions are not enabled.
 
- template <class RealType>
- inline bool check_mean(const char* function, const RealType& mean, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_mean(const char* function, const RealType& mean, RealType* result, const Policy& pol)
       {
         if(!(boost::math::isfinite)(mean) || (mean < 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Mean argument is %1%, but must be >= 0 !", mean);
+ "Mean argument is %1%, but must be >= 0 !", mean, pol);
           return false;
         }
         return true;
       } // bool check_mean
 
- template <class RealType>
- inline bool check_mean_NZ(const char* function, const RealType& mean, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_mean_NZ(const char* function, const RealType& mean, RealType* result, const Policy& pol)
       { // mean == 0 is considered an error.
         if( !(boost::math::isfinite)(mean) || (mean <= 0))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Mean argument is %1%, but must be > 0 !", mean);
+ "Mean argument is %1%, but must be > 0 !", mean, pol);
           return false;
         }
         return true;
       } // bool check_mean_NZ
 
- template <class RealType>
- inline bool check_dist(const char* function, const RealType& mean, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist(const char* function, const RealType& mean, RealType* result, const Policy& pol)
       { // Only one check, so this is redundant really but should be optimized away.
- return check_mean_NZ(function, mean, result);
+ return check_mean_NZ(function, mean, result, pol);
       } // bool check_dist
 
- template <class RealType>
- inline bool check_k(const char* function, const RealType& k, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_k(const char* function, const RealType& k, RealType* result, const Policy& pol)
       {
         if((k < 0) || !(boost::math::isfinite)(k))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Number of events k argument is %1%, but must be >= 0 !", k);
+ "Number of events k argument is %1%, but must be >= 0 !", k, pol);
           return false;
         }
         return true;
       } // bool check_k
 
- template <class RealType>
- inline bool check_dist_and_k(const char* function, RealType mean, RealType k, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_k(const char* function, RealType mean, RealType k, RealType* result, const Policy& pol)
       {
- if((check_dist(function, mean, result) == false) ||
- (check_k(function, k, result) == false))
+ if((check_dist(function, mean, result, pol) == false) ||
+ (check_k(function, k, result, pol) == false))
         {
           return false;
         }
         return true;
       } // bool check_dist_and_k
 
- template <class RealType>
- inline bool check_prob(const char* function, const RealType& p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_prob(const char* function, const RealType& p, RealType* result, const Policy& pol)
       { // Check 0 <= p <= 1
         if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "Probability argument is %1%, but must be >= 0 and <= 1 !", p);
+ "Probability argument is %1%, but must be >= 0 and <= 1 !", p, pol);
           return false;
         }
         return true;
       } // bool check_prob
 
- template <class RealType>
- inline bool check_dist_and_prob(const char* function, RealType mean, RealType p, RealType* result)
+ template <class RealType, class Policy>
+ inline bool check_dist_and_prob(const char* function, RealType mean, RealType p, RealType* result, const Policy& pol)
       {
- if((check_dist(function, mean, result) == false) ||
- (check_prob(function, p, result) == false))
+ if((check_dist(function, mean, result, pol) == false) ||
+ (check_prob(function, p, result, pol) == false))
         {
           return false;
         }
@@ -144,19 +207,20 @@
 
     } // namespace poisson_detail
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
     class poisson_distribution
     {
     public:
       typedef RealType value_type;
+ typedef Policy policy_type;
 
       poisson_distribution(RealType mean = 1) : m_l(mean) // mean (lambda).
       { // Expected mean number of events that occur during the given interval.
         RealType r;
         poisson_detail::check_dist(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::poisson_distribution<%1%>::poisson_distribution",
           m_l,
- &r);
+ &r, Policy());
       } // poisson_distribution constructor.
 
       RealType mean() const
@@ -170,42 +234,42 @@
     private:
       // Data member, initialized by constructor.
       RealType m_l; // mean number of occurrences.
- }; // template <class RealType> class poisson_distribution
+ }; // template <class RealType, class Policy> class poisson_distribution
 
     typedef poisson_distribution<double> poisson; // Reserved name of type double.
 
     // Non-member functions to give properties of the distribution.
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const poisson_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const poisson_distribution<RealType, Policy>& /* dist */)
     { // Range of permissible values for random variable k.
             using boost::math::tools::max_value;
             return std::pair<RealType, RealType>(0, max_value<RealType>()); // Max integer?
     }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const poisson_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const poisson_distribution<RealType, Policy>& /* dist */)
     { // Range of supported values for random variable k.
             // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
             using boost::math::tools::max_value;
             return std::pair<RealType, RealType>(0, max_value<RealType>());
     }
 
- template <class RealType>
- inline RealType mean(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const poisson_distribution<RealType, Policy>& dist)
     { // Mean of poisson distribution = lambda.
       return dist.mean();
     } // mean
 
- template <class RealType>
- inline RealType mode(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const poisson_distribution<RealType, Policy>& dist)
     { // mode.
       using namespace std; // ADL of std functions.
       return floor(dist.mean());
     }
 
- //template <class RealType>
- //inline RealType median(const poisson_distribution<RealType>& dist)
+ //template <class RealType, class Policy>
+ //inline RealType median(const poisson_distribution<RealType, Policy>& dist)
     //{ // median = approximately lambda + 1/3 - 0.2/lambda
     // RealType l = dist.mean();
     // return dist.mean() + static_cast<RealType>(0.3333333333333333333333333333333333333333333333)
@@ -214,24 +278,24 @@
     // Query posted on Wikipedia.
     // Now implemented via quantile(half) in derived accessors.
 
- template <class RealType>
- inline RealType variance(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const poisson_distribution<RealType, Policy>& dist)
     { // variance.
       return dist.mean();
     }
 
- // RealType standard_deviation(const poisson_distribution<RealType>& dist)
+ // RealType standard_deviation(const poisson_distribution<RealType, Policy>& dist)
     // standard_deviation provided by derived accessors.
 
- template <class RealType>
- inline RealType skewness(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const poisson_distribution<RealType, Policy>& dist)
     { // skewness = sqrt(l).
       using namespace std; // ADL of std functions.
       return 1 / sqrt(dist.mean());
     }
 
- template <class RealType>
- inline RealType kurtosis_excess(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const poisson_distribution<RealType, Policy>& dist)
     { // skewness = sqrt(l).
       return 1 / dist.mean(); // kurtosis_excess 1/mean from Wiki & MathWorld eq 31.
       // http://mathworld.wolfram.com/Kurtosis.html explains that the kurtosis excess
@@ -239,8 +303,8 @@
       // whereas the true kurtosis is 3.
     } // RealType kurtosis_excess
 
- template <class RealType>
- inline RealType kurtosis(const poisson_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const poisson_distribution<RealType, Policy>& dist)
     { // kurtosis is 4th moment about the mean = u4 / sd ^ 4
       // http://en.wikipedia.org/wiki/Curtosis
       // kurtosis can range from -2 (flat top) to +infinity (sharp peak & heavy tails).
@@ -251,8 +315,8 @@
       // whereas the true kurtosis is 3.
     } // RealType kurtosis
 
- template <class RealType>
- RealType pdf(const poisson_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ RealType pdf(const poisson_distribution<RealType, Policy>& dist, const RealType k)
     { // Probability Density/Mass Function.
       // Probability that there are EXACTLY k occurrences (or arrivals).
       BOOST_FPU_EXCEPTION_GUARD
@@ -264,10 +328,10 @@
       // Error check:
       RealType result;
       if(false == poisson_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::pdf(const poisson_distribution<%1%>&, %1%)",
         mean,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -294,13 +358,13 @@
         // (e ^ -mean * mean ^ k) / k!
         // == exp(log(e ^ -mean) + log (mean ^ k) - lgamma(k+1))
         // exp( -mean + log(mean) * k - lgamma(k+1))
- return exp(-mean + log(mean) * k - boost::math::lgamma(k+1));
+ return exp(-mean + log(mean) * k - boost::math::lgamma(k+1, Policy()));
         // return gamma_p_derivative(k+1, mean); // equivalent & also passes tests.
       }
     } // pdf
 
- template <class RealType>
- RealType cdf(const poisson_distribution<RealType>& dist, const RealType k)
+ template <class RealType, class Policy>
+ RealType cdf(const poisson_distribution<RealType, Policy>& dist, const RealType k)
     { // Cumulative Distribution Function Poisson.
       // The random variate k is the number of occurrences(or arrivals)
       // k argument may be integral, signed, or unsigned, or floating point.
@@ -325,10 +389,10 @@
       // Error checks:
       RealType result;
       if(false == poisson_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(const poisson_distribution<%1%>&, %1%)",
         mean,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -347,11 +411,11 @@
       // it's cheaper than the gamma function.
       // BUT this is now done efficiently by gamma_q function.
       // Calculate poisson cdf using the gamma_q function.
- return gamma_q(k+1, mean);
+ return gamma_q(k+1, mean, Policy());
     } // binomial cdf
 
- template <class RealType>
- RealType cdf(const complemented2_type<poisson_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ RealType cdf(const complemented2_type<poisson_distribution<RealType, Policy>, RealType>& c)
     { // Complemented Cumulative Distribution Function Poisson
       // The random variate k is the number of events, occurrences or arrivals.
       // k argument may be integral, signed, or unsigned, or floating point.
@@ -370,17 +434,17 @@
       // instead the incomplete gamma integral is employed,
 
       RealType const& k = c.param;
- poisson_distribution<RealType> const& dist = c.dist;
+ poisson_distribution<RealType, Policy> const& dist = c.dist;
 
       RealType mean = dist.mean();
 
       // Error checks:
       RealType result;
       if(false == poisson_detail::check_dist_and_k(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::cdf(const poisson_distribution<%1%>&, %1%)",
         mean,
         k,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -391,24 +455,24 @@
       }
       if (k == 0)
       { // Avoid repeated checks on k and mean in gamma_p.
- return -boost::math::expm1(-mean);
+ return -boost::math::expm1(-mean, Policy());
       }
       // Unlike un-complemented cdf (sum from 0 to k),
       // can't use finite sum from k+1 to infinity for small integral k,
       // anyway it is now done efficiently by gamma_p.
- return gamma_p(k + 1, mean); // Calculate Poisson cdf using the gamma_p function.
+ return gamma_p(k + 1, mean, Policy()); // Calculate Poisson cdf using the gamma_p function.
       // CCDF = gamma_p(k+1, lambda)
     } // poisson ccdf
 
- template <class RealType>
- inline RealType quantile(const poisson_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ inline RealType quantile(const poisson_distribution<RealType, Policy>& dist, const RealType& p)
     { // Quantile (or Percent Point) Poisson function.
       // Return the number of expected events k for a given probability p.
       RealType result; // of Argument checks:
       if(false == poisson_detail::check_prob(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(const poisson_distribution<%1%>&, %1%)",
         p,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -416,13 +480,14 @@
       if (dist.mean() == 0)
       { // if mean = 0 then p = 0, so k can be anything?
          if (false == poisson_detail::check_mean_NZ(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(const poisson_distribution<%1%>&, %1%)",
          dist.mean(),
- &result))
+ &result, Policy()))
         {
           return result;
         }
       }
+ /*
       using namespace std; // ADL of std functions.
       // if(p == 0) NOT necessarily zero!
       // Not necessarily any special value of k because is unlimited.
@@ -430,23 +495,55 @@
                         { // if p <= cdf for 0 events (== pdf for 0 events), then quantile must be zero.
                                 return 0;
                         }
- return gamma_q_inva(dist.mean(), p) - 1;
+ return gamma_q_inva(dist.mean(), p, Policy()) - 1;
+ */
+ typedef typename Policy::discrete_quantile_type discrete_type;
+ boost::uintmax_t max_iter = 200;
+ RealType guess, factor = 8;
+ RealType z = dist.mean();
+ if(z < 1)
+ guess = z;
+ else
+ guess = boost::math::detail::inverse_poisson_cornish_fisher(z, p, 1-p, Policy());
+ if(z > 5)
+ {
+ if(z > 1000)
+ factor = 1.01f;
+ else if(z > 50)
+ factor = 1.1f;
+ else if(guess > 10)
+ factor = 1.25f;
+ else
+ factor = 2;
+ if(guess < 1.1)
+ factor = 8;
+ }
+
+ return detail::inverse_discrete_quantile(
+ dist,
+ p,
+ 1-p,
+ guess,
+ factor,
+ RealType(1),
+ discrete_type(),
+ max_iter);
    } // quantile
 
- template <class RealType>
- inline RealType quantile(const complemented2_type<poisson_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<poisson_distribution<RealType, Policy>, RealType>& c)
     { // Quantile (or Percent Point) of Poisson function.
       // Return the number of expected events k for a given
       // complement of the probability q.
       //
       // Error checks:
       RealType q = c.param;
- const poisson_distribution<RealType>& dist = c.dist;
+ const poisson_distribution<RealType, Policy>& dist = c.dist;
       RealType result; // of argument checks.
       if(false == poisson_detail::check_prob(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(const poisson_distribution<%1%>&, %1%)",
         q,
- &result))
+ &result, Policy()))
       {
         return result;
       }
@@ -454,18 +551,51 @@
       if (dist.mean() == 0)
       { // if mean = 0 then p = 0, so k can be anything?
          if (false == poisson_detail::check_mean_NZ(
- BOOST_CURRENT_FUNCTION,
+ "boost::math::quantile(const poisson_distribution<%1%>&, %1%)",
          dist.mean(),
- &result))
+ &result, Policy()))
         {
           return result;
         }
       }
+ /*
       if (-q <= boost::math::expm1(-dist.mean()))
                         { // if q <= cdf(complement for 0 events, then quantile must be zero.
                                 return 0;
                         }
- return gamma_p_inva(dist.mean(), q) -1;
+ return gamma_p_inva(dist.mean(), q, Policy()) -1;
+ */
+ typedef typename Policy::discrete_quantile_type discrete_type;
+ boost::uintmax_t max_iter = 200;
+ RealType guess, factor = 8;
+ RealType z = dist.mean();
+ if(z < 1)
+ guess = z;
+ else
+ guess = boost::math::detail::inverse_poisson_cornish_fisher(z, 1-q, q, Policy());
+ if(z > 5)
+ {
+ if(z > 1000)
+ factor = 1.01f;
+ else if(z > 50)
+ factor = 1.1f;
+ else if(guess > 10)
+ factor = 1.25f;
+ else
+ factor = 2;
+ if(guess < 1.1)
+ factor = 8;
+ }
+
+ return detail::inverse_discrete_quantile(
+ dist,
+ 1-q,
+ q,
+ guess,
+ factor,
+ RealType(1),
+ discrete_type(),
+ max_iter);
    } // quantile complement.
 
   } // namespace math
@@ -479,6 +609,7 @@
 // for this distribution have been defined, in order to
 // keep compilers that support two-phase lookup happy.
 #include <boost/math/distributions/detail/derived_accessors.hpp>
+#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
 
 #endif // BOOST_MATH_SPECIAL_POISSON_HPP
 

Modified: sandbox/math_toolkit/policy/boost/math/distributions/rayleigh.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/rayleigh.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/rayleigh.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -24,44 +24,45 @@
 
 namespace detail
 { // Error checks:
- template <class RealType>
- inline bool verify_sigma(const char* function, RealType sigma, RealType* presult)
+ template <class RealType, class Policy>
+ inline bool verify_sigma(const char* function, RealType sigma, RealType* presult, const Policy& pol)
   {
      if(sigma <= 0)
      {
- *presult = tools::domain_error<RealType>(
+ *presult = policy::raise_domain_error<RealType>(
            function,
- "The scale parameter \"sigma\" must be > 0, but was: %1%.", sigma);
+ "The scale parameter \"sigma\" must be > 0, but was: %1%.", sigma, pol);
         return false;
      }
      return true;
   } // bool verify_sigma
 
- template <class RealType>
- inline bool verify_rayleigh_x(const char* function, RealType x, RealType* presult)
+ template <class RealType, class Policy>
+ inline bool verify_rayleigh_x(const char* function, RealType x, RealType* presult, const Policy& pol)
   {
      if(x < 0)
      {
- *presult = tools::domain_error<RealType>(
+ *presult = policy::raise_domain_error<RealType>(
            function,
- "The random variable must be >= 0, but was: %1%.", x);
+ "The random variable must be >= 0, but was: %1%.", x, pol);
         return false;
      }
      return true;
   } // bool verify_rayleigh_x
 } // namespace detail
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class rayleigh_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    rayleigh_distribution(RealType sigma = 1)
       : m_sigma(sigma)
    {
       RealType err;
- detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &err);
+ detail::verify_sigma("boost::math::rayleigh_distribution<%1%>::rayleigh_distribution", sigma, &err, Policy());
    } // rayleigh_distribution
 
    RealType sigma()const
@@ -75,33 +76,34 @@
 
 typedef rayleigh_distribution<double> rayleigh;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const rayleigh_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const rayleigh_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(static_cast<RealType>(1), max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const rayleigh_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const rayleigh_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>((1), max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const rayleigh_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const rayleigh_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std function exp.
 
    RealType sigma = dist.sigma();
    RealType result;
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::pdf(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
- if(false == detail::verify_rayleigh_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
    {
       return result;
    }
@@ -110,35 +112,37 @@
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const rayleigh_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const rayleigh_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
    RealType result;
    RealType sigma = dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::cdf(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
- if(false == detail::verify_rayleigh_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
    {
       return result;
    }
- result = -boost::math::expm1(-x * x / ( 2 * sigma * sigma));
+ result = -boost::math::expm1(-x * x / ( 2 * sigma * sigma), Policy());
    return result;
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const rayleigh_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const rayleigh_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
    RealType result;
    RealType sigma = dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::quantile(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
       return result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(false == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 0)
@@ -147,25 +151,26 @@
    }
    if(p == 1)
    {
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
    }
- result = sqrt(-2 * sigma * sigma * boost::math::log1p(-p));
+ result = sqrt(-2 * sigma * sigma * boost::math::log1p(-p, Policy()));
    return result;
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<rayleigh_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<rayleigh_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
    RealType result;
    RealType sigma = c.dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::cdf(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
    RealType x = c.param;
- if(false == detail::verify_rayleigh_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
    {
       return result;
    }
@@ -173,19 +178,20 @@
    return result;
 } // cdf complement
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<rayleigh_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<rayleigh_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions, log & sqrt.
 
    RealType result;
    RealType sigma = c.dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::quantile(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
    RealType q = c.param;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(false == detail::check_probability(function, q, &result, Policy()))
    {
       return result;
    }
@@ -195,18 +201,19 @@
    }
    if(q == 0)
    {
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
    }
    result = sqrt(-2 * sigma * sigma * log(q));
    return result;
 } // quantile complement
 
-template <class RealType>
-inline RealType mean(const rayleigh_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const rayleigh_distribution<RealType, Policy>& dist)
 {
    RealType result;
    RealType sigma = dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::mean(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
@@ -214,12 +221,13 @@
    return sigma * root_half_pi<RealType>();
 } // mean
 
-template <class RealType>
-inline RealType variance(const rayleigh_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const rayleigh_distribution<RealType, Policy>& dist)
 {
    RealType result;
    RealType sigma = dist.sigma();
- if(false == detail::verify_sigma(BOOST_CURRENT_FUNCTION, sigma, &result))
+ static const char* function = "boost::math::variance(const rayleigh_distribution<%1%>&, %1%)";
+ if(false == detail::verify_sigma(function, sigma, &result, Policy()))
    {
       return result;
    }
@@ -227,21 +235,21 @@
    return four_minus_pi<RealType>() * sigma * sigma / 2;
 } // variance
 
-template <class RealType>
-inline RealType mode(const rayleigh_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const rayleigh_distribution<RealType, Policy>& dist)
 {
    return dist.sigma();
 }
 
-template <class RealType>
-inline RealType median(const rayleigh_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const rayleigh_distribution<RealType, Policy>& dist)
 {
    using boost::math::constants::root_ln_four;
    return root_ln_four<RealType>() * dist.sigma();
 }
 
-template <class RealType>
-inline RealType skewness(const rayleigh_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType skewness(const rayleigh_distribution<RealType, Policy>& /*dist*/)
 {
   // using namespace boost::math::constants;
   return static_cast<RealType>(0.63111065781893713819189935154422777984404221106391L);
@@ -249,8 +257,8 @@
   // return 2 * root_pi<RealType>() * pi_minus_three<RealType>() / pow23_four_minus_pi<RealType>();
 }
 
-template <class RealType>
-inline RealType kurtosis(const rayleigh_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis(const rayleigh_distribution<RealType, Policy>& /*dist*/)
 {
   // using namespace boost::math::constants;
   return static_cast<RealType>(3.2450893006876380628486604106197544154170667057995L);
@@ -259,8 +267,8 @@
   // (four_minus_pi<RealType>() * four_minus_pi<RealType>());
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const rayleigh_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const rayleigh_distribution<RealType, Policy>& /*dist*/)
 {
   //using namespace boost::math::constants;
   // Computed using NTL at 150 bit, about 50 decimal digits.

Modified: sandbox/math_toolkit/policy/boost/math/distributions/students_t.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/students_t.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/students_t.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -23,17 +23,18 @@
 
 namespace boost{ namespace math{
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class students_t_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    students_t_distribution(RealType i) : m_df(i)
    { // Constructor.
       RealType result;
       detail::check_df(
- BOOST_CURRENT_FUNCTION, m_df, &result);
+ "boost::math::students_t_distribution<%1%>::students_t_distribution", m_df, &result, Policy());
    } // students_t_distribution
 
    RealType degrees_of_freedom()const
@@ -58,23 +59,23 @@
 
 typedef students_t_distribution<double> students_t;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const students_t_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const students_t_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const students_t_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const students_t_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const students_t_distribution<RealType>& dist, const RealType& t)
+template <class RealType, class Policy>
+inline RealType pdf(const students_t_distribution<RealType, Policy>& dist, const RealType& t)
 {
    BOOST_FPU_EXCEPTION_GUARD
    using namespace std; // for ADL of std functions
@@ -83,31 +84,31 @@
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result))
+ "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", degrees_of_freedom, &error_result, Policy()))
       return error_result;
    // Might conceivably permit df = +infinity and use normal distribution.
    RealType result;
    RealType basem1 = t * t / degrees_of_freedom;
    if(basem1 < 0.125)
    {
- result = exp(-boost::math::log1p(basem1) * (1+degrees_of_freedom) / 2);
+ result = exp(-boost::math::log1p(basem1, Policy()) * (1+degrees_of_freedom) / 2);
    }
    else
    {
       result = pow(1 / (1 + basem1), (degrees_of_freedom + 1) / 2);
    }
- result /= sqrt(degrees_of_freedom) * boost::math::beta(degrees_of_freedom / 2, RealType(0.5f));
+ result /= sqrt(degrees_of_freedom) * boost::math::beta(degrees_of_freedom / 2, RealType(0.5f), Policy());
    return result;
 } // pdf
 
-template <class RealType>
-inline RealType cdf(const students_t_distribution<RealType>& dist, const RealType& t)
+template <class RealType, class Policy>
+inline RealType cdf(const students_t_distribution<RealType, Policy>& dist, const RealType& t)
 {
    RealType degrees_of_freedom = dist.degrees_of_freedom();
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result))
+ "boost::math::cdf(const students_t_distribution<%1%>&, %1%)", degrees_of_freedom, &error_result, Policy()))
       return error_result;
 
    if (t == 0)
@@ -137,31 +138,18 @@
    if(degrees_of_freedom > 2 * t2)
    {
       RealType z = t2 / (degrees_of_freedom + t2);
- probability = ibetac(static_cast<RealType>(0.5), degrees_of_freedom / 2, z) / 2;
+ probability = ibetac(static_cast<RealType>(0.5), degrees_of_freedom / 2, z, Policy()) / 2;
    }
    else
    {
       RealType z = degrees_of_freedom / (degrees_of_freedom + t2);
- probability = ibeta(degrees_of_freedom / 2, static_cast<RealType>(0.5), z) / 2;
- }
- // Check 0 <= probability probability <= 1.
- // Numerical errors might cause probability to be slightly outside the range < 0 or > 1.
- // This might cause trouble downstream, so warn, possibly throw exception, but constrain to the limits.
- if (probability < static_cast<RealType>(0.))
- {
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "probability %1% is < 0, so has been constrained to zero !", probability);
- return static_cast<RealType>(0.); // Constrain to zero if logic_error does not throw.
- }
- if(probability > static_cast<RealType>(1.))
- {
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "probability %1% is > 1, so has been constrained to unity!", probability);
- return static_cast<RealType>(1.); // Constrain to unity if logic_error does not throw.
+ probability = ibeta(degrees_of_freedom / 2, static_cast<RealType>(0.5), z, Policy()) / 2;
    }
    return (t > 0 ? 1 - probability : probability);
 } // cdf
 
-template <class RealType>
-inline RealType quantile(const students_t_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const students_t_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
    //
@@ -172,17 +160,18 @@
    //
    // Check for domain errors:
    //
+ static const char* function = "boost::math::quantile(const students_t_distribution<%1%>&, %1%)";
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, degrees_of_freedom, &error_result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, probability, &error_result))
+ function, degrees_of_freedom, &error_result, Policy())
+ && detail::check_probability(function, probability, &error_result, Policy()))
       return error_result;
 
    // Special cases, regardless of degrees_of_freedom.
    if (probability == 0)
- return -tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return -policy::raise_overflow_error<RealType>(function, 0, Policy());
    if (probability == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
    if (probability == static_cast<RealType>(0.5))
      return 0;
    //
@@ -215,17 +204,17 @@
    // and a couple of epsilon at double precision and in the central
    // region where most use cases will occur...
    //
- return boost::math::detail::fast_students_t_quantile(degrees_of_freedom, probability);
+ return boost::math::detail::fast_students_t_quantile(degrees_of_freedom, probability, Policy());
 } // quantile
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<students_t_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<students_t_distribution<RealType, Policy>, RealType>& c)
 {
    return cdf(c.dist, -c.param);
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<students_t_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<students_t_distribution<RealType, Policy>, RealType>& c)
 {
    return -quantile(c.dist, c.param);
 }
@@ -237,7 +226,7 @@
 //
 // Functors for finding degrees of freedom:
 //
-template <class RealType>
+template <class RealType, class Policy>
 struct sample_size_func
 {
    sample_size_func(RealType a, RealType b, RealType s, RealType d)
@@ -247,7 +236,7 @@
    {
       if(df <= tools::min_value<RealType>())
          return 1;
- students_t_distribution<RealType> t(df);
+ students_t_distribution<RealType, Policy> t(df);
       RealType qa = quantile(complement(t, alpha));
       RealType qb = quantile(complement(t, beta));
       qa += qb;
@@ -261,109 +250,110 @@
 
 } // namespace detail
 
-template <class RealType>
-RealType students_t_distribution<RealType>::estimate_degrees_of_freedom(
+template <class RealType, class Policy>
+RealType students_t_distribution<RealType, Policy>::estimate_degrees_of_freedom(
       RealType difference_from_mean,
       RealType alpha,
       RealType beta,
       RealType sd,
       RealType hint)
 {
+ static const char* function = "boost::math::students_t_distribution<%1%>::estimate_degrees_of_freedom";
    //
    // Check for domain errors:
    //
    RealType error_result;
    if(false == detail::check_probability(
- BOOST_CURRENT_FUNCTION, alpha, &error_result)
- && detail::check_probability(BOOST_CURRENT_FUNCTION, beta, &error_result))
+ function, alpha, &error_result, Policy())
+ && detail::check_probability(function, beta, &error_result, Policy()))
       return error_result;
 
    if(hint <= 0)
       hint = 1;
 
- detail::sample_size_func<RealType> f(alpha, beta, sd, difference_from_mean);
- tools::eps_tolerance<RealType> tol(tools::digits<RealType>());
+ detail::sample_size_func<RealType, Policy> f(alpha, beta, sd, difference_from_mean);
+ tools::eps_tolerance<RealType> tol(policy::digits<RealType, Policy>());
    boost::uintmax_t max_iter = 10000;
- std::pair<RealType, RealType> r = tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, policy::policy<>());
+ std::pair<RealType, RealType> r = tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, Policy());
    RealType result = r.first + (r.second - r.first) / 2;
    if(max_iter == 10000)
    {
- tools::logic_error<RealType>(BOOST_CURRENT_FUNCTION, "Unable to locate solution in a reasonable time:"
+ policy::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
          " either there is no answer to how many degrees of freedom are required"
- " or the answer is infinite. Current best guess is %1%", result);
+ " or the answer is infinite. Current best guess is %1%", result, Policy());
    }
    return result;
 }
 
-template <class RealType>
-inline RealType mean(const students_t_distribution<RealType>& )
+template <class RealType, class Policy>
+inline RealType mean(const students_t_distribution<RealType, Policy>& )
 {
    return 0;
 }
 
-template <class RealType>
-inline RealType variance(const students_t_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const students_t_distribution<RealType, Policy>& dist)
 {
    // Error check:
    RealType error_result;
    if(false == detail::check_df(
- BOOST_CURRENT_FUNCTION, dist.degrees_of_freedom(), &error_result))
+ "boost::math::variance(students_t_distribution<%1%> const&, %1%)", dist.degrees_of_freedom(), &error_result, Policy()))
       return error_result;
 
    RealType v = dist.degrees_of_freedom();
    return v / (v - 2);
 }
 
-template <class RealType>
-inline RealType mode(const students_t_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType mode(const students_t_distribution<RealType, Policy>& /*dist*/)
 {
    return 0;
 }
 
-template <class RealType>
-inline RealType median(const students_t_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline RealType median(const students_t_distribution<RealType, Policy>& /*dist*/)
 {
    return 0;
 }
 
-template <class RealType>
-inline RealType skewness(const students_t_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const students_t_distribution<RealType, Policy>& dist)
 {
    if(dist.degrees_of_freedom() <= 3)
    {
- tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ policy::raise_domain_error<RealType>(
+ "boost::math::skewness(students_t_distribution<%1%> const&, %1%)",
          "Skewness is undefined for degrees of freedom <= 3, but got %1%.",
- dist.degrees_of_freedom());
+ dist.degrees_of_freedom(), Policy());
    }
    return 0;
 }
 
-template <class RealType>
-inline RealType kurtosis(const students_t_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const students_t_distribution<RealType, Policy>& dist)
 {
    RealType df = dist.degrees_of_freedom();
    if(df <= 3)
    {
- tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ policy::raise_domain_error<RealType>(
+ "boost::math::kurtosis(students_t_distribution<%1%> const&, %1%)",
          "Skewness is undefined for degrees of freedom <= 3, but got %1%.",
- df);
+ df, Policy());
    }
    return 3 * (df - 2) / (df - 4);
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const students_t_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const students_t_distribution<RealType, Policy>& dist)
 {
    // see http://mathworld.wolfram.com/Kurtosis.html
    RealType df = dist.degrees_of_freedom();
    if(df <= 3)
    {
- tools::domain_error<RealType>(
- BOOST_CURRENT_FUNCTION,
+ policy::raise_domain_error<RealType>(
+ "boost::math::kurtosis_excess(students_t_distribution<%1%> const&, %1%)",
          "Skewness is undefined for degrees of freedom <= 3, but got %1%.",
- df);
+ df, Policy());
    }
    return 6 / (df - 4);
 }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/triangular.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/triangular.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/triangular.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -21,11 +21,11 @@
 {
   namespace detail
   {
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_triangular_lower(
       const char* function,
       RealType lower,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(lower))
       { // Any finite value is OK.
@@ -33,18 +33,18 @@
       }
       else
       { // Not finite: infinity or NaN.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "Lower parameter is %1%, but must be finite!", lower);
+ "Lower parameter is %1%, but must be finite!", lower, pol);
         return false;
       }
     } // bool check_triangular_lower(
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_triangular_mode(
       const char* function,
       RealType mode,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(mode))
       { // any finite value is OK.
@@ -52,18 +52,18 @@
       }
       else
       { // Not finite: infinity or NaN.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "Mode parameter is %1%, but must be finite!", mode);
+ "Mode parameter is %1%, but must be finite!", mode, pol);
         return false;
       }
     } // bool check_triangular_mode(
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_triangular_upper(
       const char* function,
       RealType upper,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(upper))
       { // any finite value is OK.
@@ -71,18 +71,18 @@
       }
       else
       { // Not finite: infinity or NaN.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "Upper parameter is %1%, but must be finite!", upper);
+ "Upper parameter is %1%, but must be finite!", upper, pol);
         return false;
       }
     } // bool check_triangular_upper(
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_triangular_x(
       const char* function,
       RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(x))
       { // Any finite value is OK
@@ -90,58 +90,59 @@
       }
       else
       { // Not finite: infinity or NaN.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "x parameter is %1%, but must be finite!", x);
+ "x parameter is %1%, but must be finite!", x, pol);
         return false;
       }
     } // bool check_triangular_x
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_triangular(
       const char* function,
       RealType lower,
       RealType mode,
       RealType upper,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
- if(check_triangular_lower(function, lower, result)
- && check_triangular_mode(function, mode, result)
- && check_triangular_upper(function, upper, result)
+ if(check_triangular_lower(function, lower, result, pol)
+ && check_triangular_mode(function, mode, result, pol)
+ && check_triangular_upper(function, upper, result, pol)
         && (lower < upper) // lower == upper NOT useful.
         )
       {
         if (mode < lower)
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "mode parameter is %1%, but must be >= than lower!", lower);
+ "mode parameter is %1%, but must be >= than lower!", lower, pol);
           return false;
         }
         if (mode > upper )
         {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
             function,
- "mode parameter is %1%, but must be <= than upper!", upper);
+ "mode parameter is %1%, but must be <= than upper!", upper, pol);
           return false;
         }
         return true;
       }
       else
       { // upper and lower have each been checked before, so must be lower >= upper.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "lower parameter is %1%, but must be less than upper!", lower);
+ "lower parameter is %1%, but must be less than upper!", lower, pol);
         return false;
       }
     } // bool check_triangular
   } // namespace detail
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
   class triangular_distribution
   {
   public:
     typedef RealType value_type;
+ typedef Policy policy_type;
 
     triangular_distribution(RealType lower = -1, RealType mode = 0, RealType upper = 1)
       : m_lower(lower), m_mode(mode), m_upper(upper) // Constructor.
@@ -150,7 +151,7 @@
       // But this is more useful in most applications to approximate normal distribution,
       // where the central value is the most likely and deviations either side equally likely.
       RealType result;
- detail::check_triangular(BOOST_CURRENT_FUNCTION,lower, mode, upper, &result);
+ detail::check_triangular("boost::math::triangular_distribution<%1%>::triangular_distribution",lower, mode, upper, &result, Policy());
     }
     // Accessor functions.
     RealType lower()const
@@ -174,32 +175,33 @@
 
   typedef triangular_distribution<double> triangular;
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const triangular_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const triangular_distribution<RealType, Policy>& /* dist */)
   { // Range of permissible values for random variable x.
     using boost::math::tools::max_value;
     return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
   }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const triangular_distribution<RealType, Policy>& dist)
   { // Range of supported values for random variable x.
     // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
     return std::pair<RealType, RealType>(dist.lower(), dist.upper());
   }
 
- template <class RealType>
- RealType pdf(const triangular_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ RealType pdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
   {
+ static const char* function = "boost::math::pdf(const triangular_distribution<%1%>&, %1%)";
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, lower, mode, upper, &result))
+ if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_triangular_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_triangular_x(function, x, &result, Policy()))
     {
       return result;
     }
@@ -223,20 +225,21 @@
     { // (x > mode)
       return 2 * (upper - x) / ((upper - lower) * (upper - mode));
     }
- } // RealType pdf(const triangular_distribution<RealType>& dist, const RealType& x)
+ } // RealType pdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
 
- template <class RealType>
- inline RealType cdf(const triangular_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ inline RealType cdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
   {
+ static const char* function = "boost::math::cdf(const triangular_distribution<%1%>&, %1%)";
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, lower, mode, upper, &result))
+ if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_triangular_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_triangular_x(function, x, &result, Policy()))
     {
       return result;
     }
@@ -257,21 +260,22 @@
     {
       return 1 - (upper - x) * (upper - x) / ((upper - lower) * (upper - mode));
     }
- } // RealType cdf(const triangular_distribution<RealType>& dist, const RealType& x)
+ } // RealType cdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
 
- template <class RealType>
- RealType quantile(const triangular_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& p)
   {
     using namespace std; // for ADL of std functions (sqrt).
+ static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION,lower, mode, upper, &result))
+ if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(false == detail::check_probability(function, p, &result, Policy()))
     {
       return result;
     }
@@ -299,21 +303,22 @@
     }
     return result;
 
- } // RealType quantile(const triangular_distribution<RealType>& dist, const RealType& q)
+ } // RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& q)
 
- template <class RealType>
- RealType cdf(const complemented2_type<triangular_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
   {
+ static const char* function = "boost::math::cdf(const triangular_distribution<%1%>&, %1%)";
     RealType lower = c.dist.lower();
     RealType mode = c.dist.mode();
     RealType upper = c.dist.upper();
     RealType x = c.param;
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, lower, mode, upper, &result))
+ if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_triangular_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_triangular_x(function, x, &result, Policy()))
     {
       return result;
     }
@@ -333,22 +338,23 @@
     {
       return (upper - x) * (upper - x) / ((upper - lower) * (upper - mode));
     }
- } // RealType cdf(const complemented2_type<triangular_distribution<RealType>, RealType>& c)
+ } // RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
 
- template <class RealType>
- RealType quantile(const complemented2_type<triangular_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
   {
     using namespace std; // Aid ADL for sqrt.
+ static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";
     RealType l = c.dist.lower();
     RealType m = c.dist.mode();
     RealType u = c.dist.upper();
     RealType q = c.param; // probability 0 to 1.
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, l, m, u, &result))
+ if(false == detail::check_triangular(function, l, m, u, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(false == detail::check_probability(function, q, &result, Policy()))
     {
       return result;
     }
@@ -381,56 +387,60 @@
       result = upper - sqrt((upper - lower) * (upper - mode) * q);
     }
     return result;
- } // RealType quantile(const complemented2_type<triangular_distribution<RealType>, RealType>& c)
+ } // RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
 
- template <class RealType>
- inline RealType mean(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const triangular_distribution<RealType, Policy>& dist)
   {
+ static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, lower, mode, upper, &result))
+ if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
     {
       return result;
     }
     return (lower + upper + mode) / 3;
- } // RealType mean(const triangular_distribution<RealType>& dist)
+ } // RealType mean(const triangular_distribution<RealType, Policy>& dist)
 
 
- template <class RealType>
- inline RealType variance(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const triangular_distribution<RealType, Policy>& dist)
   {
+ static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION, lower, mode, upper, &result))
+ if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
     {
       return result;
     }
     return (lower * lower + upper * upper + mode * mode - lower * upper - lower * mode - upper * mode) / 18;
- } // RealType variance(const triangular_distribution<RealType>& dist)
+ } // RealType variance(const triangular_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType mode(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const triangular_distribution<RealType, Policy>& dist)
   {
+ static const char* function = "boost::math::mode(const triangular_distribution<%1%>&)";
     RealType mode = dist.mode();
     RealType result; // of checks.
- if(false == detail::check_triangular_mode(BOOST_CURRENT_FUNCTION, mode, &result))
+ if(false == detail::check_triangular_mode(function, mode, &result, Policy()))
     { // This should never happen!
       return result;
     }
     return mode;
   } // RealType mode
 
- template <class RealType>
- inline RealType median(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType median(const triangular_distribution<RealType, Policy>& dist)
   {
     using namespace std; // ADL of std functions.
+ static const char* function = "boost::math::median(const triangular_distribution<%1%>&)";
     RealType mode = dist.mode();
     RealType result; // of checks.
- if(false == detail::check_triangular_mode(BOOST_CURRENT_FUNCTION, mode, &result))
+ if(false == detail::check_triangular_mode(function, mode, &result, Policy()))
     { // This should never happen!
       return result;
     }
@@ -446,46 +456,49 @@
     }
   } // RealType mode
 
- template <class RealType>
- inline RealType skewness(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const triangular_distribution<RealType, Policy>& dist)
   {
     using namespace std; // for ADL of std functions
     using namespace boost::math::constants; // for root_two
+ static const char* function = "boost::math::skewness(const triangular_distribution<%1%>&)";
 
     RealType lower = dist.lower();
     RealType mode = dist.mode();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION,lower, mode, upper, &result))
+ if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
     {
       return result;
     }
     return root_two<RealType>() * (lower + upper - 2 * mode) * (2 * lower - upper - mode) * (lower - 2 * upper + mode) /
       (5 * pow((lower * lower + upper + upper + mode * mode - lower * upper - lower * mode - upper * mode), RealType(3)/RealType(2)));
- } // RealType skewness(const triangular_distribution<RealType>& dist)
+ } // RealType skewness(const triangular_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType kurtosis(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const triangular_distribution<RealType, Policy>& dist)
   { // These checks may be belt and braces as should have been checked on construction?
+ static const char* function = "boost::math::kurtosis(const triangular_distribution<%1%>&)";
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType mode = dist.mode();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION,lower, mode, upper, &result))
+ if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
     {
       return result;
     }
     return static_cast<RealType>(12)/5; // 12/5 = 2.4;
- } // RealType kurtosis_excess(const triangular_distribution<RealType>& dist)
+ } // RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType kurtosis_excess(const triangular_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)
   { // These checks may be belt and braces as should have been checked on construction?
+ static const char* function = "boost::math::kurtosis_excess(const triangular_distribution<%1%>&)";
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType mode = dist.mode();
     RealType result; // of checks.
- if(false == detail::check_triangular(BOOST_CURRENT_FUNCTION,lower, mode, upper, &result))
+ if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
     {
       return result;
     }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/uniform.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/uniform.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/uniform.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -15,8 +15,6 @@
 // http://documents.wolfram.com/calculationcenter/v2/Functions/ListsMatrices/Statistics/UniformDistribution.html
 // http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29
 
-#include <boost/math/special_functions/gamma.hpp>
-#include <boost/math/special_functions/expm1.hpp>
 #include <boost/math/distributions/detail/common_error_handling.hpp>
 #include <boost/math/distributions/complement.hpp>
 
@@ -26,11 +24,11 @@
 {
   namespace detail
   {
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_uniform_lower(
       const char* function,
       RealType lower,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(lower))
       { // any finite value is OK.
@@ -38,18 +36,18 @@
       }
       else
       { // Not finite.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "Lower parameter is %1%, but must be finite!", lower);
+ "Lower parameter is %1%, but must be finite!", lower, pol);
         return false;
       }
     } // bool check_uniform_lower(
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_uniform_upper(
       const char* function,
       RealType upper,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(upper))
       { // Any finite value is OK.
@@ -57,18 +55,18 @@
       }
       else
       { // Not finite.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "Upper parameter is %1%, but must be finite!", upper);
+ "Upper parameter is %1%, but must be finite!", upper, pol);
         return false;
       }
     } // bool check_uniform_upper(
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_uniform_x(
       const char* function,
       RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
       if((boost::math::isfinite)(x))
       { // Any finite value is OK
@@ -76,48 +74,49 @@
       }
       else
       { // Not finite..
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "x parameter is %1%, but must be finite!", x);
+ "x parameter is %1%, but must be finite!", x, pol);
         return false;
       }
     } // bool check_uniform_x
 
- template <class RealType>
+ template <class RealType, class Policy>
     inline bool check_uniform(
       const char* function,
       RealType lower,
       RealType upper,
- RealType* result)
+ RealType* result, const Policy& pol)
     {
- if(check_uniform_lower(function, lower, result)
- && check_uniform_upper(function, upper, result)
+ if(check_uniform_lower(function, lower, result, pol)
+ && check_uniform_upper(function, upper, result, pol)
         && (lower < upper)) // If lower == upper then 1 / (upper-lower) = 1/0 = +infinity!
       {
         return true;
       }
       else
       { // upper and lower have been checked before, so must be lower >= upper.
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
           function,
- "lower parameter is %1%, but must be less than upper!", lower);
+ "lower parameter is %1%, but must be less than upper!", lower, pol);
         return false;
       }
     } // bool check_uniform(
 
   } // namespace detail
 
- template <class RealType = double>
+ template <class RealType = double, class Policy = policy::policy<> >
   class uniform_distribution
   {
   public:
     typedef RealType value_type;
+ typedef Policy policy_type;
 
     uniform_distribution(RealType lower = 0, RealType upper = 1) // Constructor.
       : m_lower(lower), m_upper(upper) // Default is standard uniform distribution.
     {
       RealType result;
- detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result);
+ detail::check_uniform("boost::math::uniform_distribution<%1%>::uniform_distribution", lower, upper, &result, Policy());
     }
     // Accessor functions.
     RealType lower()const
@@ -137,32 +136,32 @@
 
   typedef uniform_distribution<double> uniform;
 
- template <class RealType>
- inline const std::pair<RealType, RealType> range(const uniform_distribution<RealType>& /* dist */)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> range(const uniform_distribution<RealType, Policy>& /* dist */)
   { // Range of permissible values for random variable x.
           using boost::math::tools::max_value;
           return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity
   }
 
- template <class RealType>
- inline const std::pair<RealType, RealType> support(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline const std::pair<RealType, RealType> support(const uniform_distribution<RealType, Policy>& dist)
   { // Range of supported values for random variable x.
           // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
           using boost::math::tools::max_value;
           return std::pair<RealType, RealType>(dist.lower(), dist.upper());
   }
 
- template <class RealType>
- inline RealType pdf(const uniform_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ inline RealType pdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::pdf(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_uniform_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_uniform_x("boost::math::pdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
     {
       return result;
     }
@@ -175,19 +174,19 @@
     {
       return 1 / (upper - lower);
     }
- } // RealType pdf(const uniform_distribution<RealType>& dist, const RealType& x)
+ } // RealType pdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
 
- template <class RealType>
- inline RealType cdf(const uniform_distribution<RealType>& dist, const RealType& x)
+ template <class RealType, class Policy>
+ inline RealType cdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION,lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::cdf(const uniform_distribution<%1%>&, %1%)",lower, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_uniform_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_uniform_x("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
     {
       return result;
     }
@@ -200,19 +199,19 @@
       return 1;
     }
     return (x - lower) / (upper - lower); // lower <= x <= upper
- } // RealType cdf(const uniform_distribution<RealType>& dist, const RealType& x)
+ } // RealType cdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
 
- template <class RealType>
- inline RealType quantile(const uniform_distribution<RealType>& dist, const RealType& p)
+ template <class RealType, class Policy>
+ inline RealType quantile(const uniform_distribution<RealType, Policy>& dist, const RealType& p)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION,lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::quantile(const uniform_distribution<%1%>&, %1%)",lower, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(false == detail::check_probability("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", p, &result, Policy()))
     {
       return result;
     }
@@ -225,20 +224,20 @@
       return upper;
     }
     return p * (upper - lower) + lower;
- } // RealType quantile(const uniform_distribution<RealType>& dist, const RealType& p)
+ } // RealType quantile(const uniform_distribution<RealType, Policy>& dist, const RealType& p)
 
- template <class RealType>
- inline RealType cdf(const complemented2_type<uniform_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType cdf(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
   {
     RealType lower = c.dist.lower();
     RealType upper = c.dist.upper();
     RealType x = c.param;
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_uniform_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_uniform_x("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
     {
       return result;
     }
@@ -251,20 +250,20 @@
       return 1;
     }
     return (upper - x) / (upper - lower);
- } // RealType cdf(const complemented2_type<uniform_distribution<RealType>, RealType>& c)
+ } // RealType cdf(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
 
- template <class RealType>
- inline RealType quantile(const complemented2_type<uniform_distribution<RealType>, RealType>& c)
+ template <class RealType, class Policy>
+ inline RealType quantile(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
   {
     RealType lower = c.dist.lower();
     RealType upper = c.dist.upper();
     RealType q = c.param;
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
     {
       return result;
     }
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(false == detail::check_probability("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", q, &result, Policy()))
       if(q == 0)
       {
         return lower;
@@ -274,42 +273,42 @@
         return upper;
       }
       return -q * (upper - lower) + upper;
- } // RealType quantile(const complemented2_type<uniform_distribution<RealType>, RealType>& c)
+ } // RealType quantile(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
 
- template <class RealType>
- inline RealType mean(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mean(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::mean(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
     {
       return result;
     }
     return (lower + upper ) / 2;
- } // RealType mean(const uniform_distribution<RealType>& dist)
+ } // RealType mean(const uniform_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType variance(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType variance(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::variance(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
     {
       return result;
     }
     return (upper - lower) * ( upper - lower) / 12;
     // for standard uniform = 0.833333333333333333333333333333333333333333;
- } // RealType variance(const uniform_distribution<RealType>& dist)
+ } // RealType variance(const uniform_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType mode(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType mode(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::mode(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
     {
       return result;
     }
@@ -317,46 +316,46 @@
     return result;
   }
 
- template <class RealType>
- inline RealType median(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType median(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::median(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
     {
       return result;
     }
     return (lower + upper) / 2; //
   }
- template <class RealType>
- inline RealType skewness(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType skewness(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION,lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::skewness(const uniform_distribution<%1%>&)",lower, upper, &result, Policy()))
     {
       return result;
     }
     return 0;
- } // RealType skewness(const uniform_distribution<RealType>& dist)
+ } // RealType skewness(const uniform_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType kurtosis_excess(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis_excess(const uniform_distribution<RealType, Policy>& dist)
   {
     RealType lower = dist.lower();
     RealType upper = dist.upper();
     RealType result; // of checks.
- if(false == detail::check_uniform(BOOST_CURRENT_FUNCTION, lower, upper, &result))
+ if(false == detail::check_uniform("boost::math::kurtosis_execess(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
     {
       return result;
     }
     return static_cast<RealType>(-6)/5; // -6/5 = -1.2;
- } // RealType kurtosis_excess(const uniform_distribution<RealType>& dist)
+ } // RealType kurtosis_excess(const uniform_distribution<RealType, Policy>& dist)
 
- template <class RealType>
- inline RealType kurtosis(const uniform_distribution<RealType>& dist)
+ template <class RealType, class Policy>
+ inline RealType kurtosis(const uniform_distribution<RealType, Policy>& dist)
   {
     return kurtosis_excess(dist) + 3;
   }

Modified: sandbox/math_toolkit/policy/boost/math/distributions/weibull.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/distributions/weibull.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/distributions/weibull.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -10,6 +10,7 @@
 // http://mathworld.wolfram.com/WeibullDistribution.html
 
 #include <boost/math/special_functions/gamma.hpp>
+#include <boost/math/special_functions/log1p.hpp>
 #include <boost/math/special_functions/expm1.hpp>
 #include <boost/math/distributions/detail/common_error_handling.hpp>
 #include <boost/math/distributions/complement.hpp>
@@ -20,61 +21,62 @@
 {
 namespace detail{
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_weibull_shape(
       const char* function,
       RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
    if((shape < 0) || !(boost::math::isfinite)(shape))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Shape parameter is %1%, but must be > 0 !", shape);
+ "Shape parameter is %1%, but must be > 0 !", shape, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_weibull_x(
       const char* function,
       RealType const& x,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
    if((x < 0) || !(boost::math::isfinite)(x))
    {
- *result = tools::domain_error<RealType>(
+ *result = policy::raise_domain_error<RealType>(
          function,
- "Random variate is %1% but must be >= 0 !", x);
+ "Random variate is %1% but must be >= 0 !", x, pol);
       return false;
    }
    return true;
 }
 
-template <class RealType>
+template <class RealType, class Policy>
 inline bool check_weibull(
       const char* function,
       RealType scale,
       RealType shape,
- RealType* result)
+ RealType* result, const Policy& pol)
 {
- return check_scale(function, scale, result) && check_weibull_shape(function, shape, result);
+ return check_scale(function, scale, result, pol) && check_weibull_shape(function, shape, result, pol);
 }
 
 } // namespace detail
 
-template <class RealType = double>
+template <class RealType = double, class Policy = policy::policy<> >
 class weibull_distribution
 {
 public:
    typedef RealType value_type;
+ typedef Policy policy_type;
 
    weibull_distribution(RealType shape, RealType scale = 1)
       : m_shape(shape), m_scale(scale)
    {
       RealType result;
- detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result);
+ detail::check_weibull("boost::math::weibull_distribution<%1%>::weibull_distribution", scale, shape, &result, Policy());
    }
 
    RealType shape()const
@@ -96,33 +98,35 @@
 
 typedef weibull_distribution<double> weibull;
 
-template <class RealType>
-inline const std::pair<RealType, RealType> range(const weibull_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> range(const weibull_distribution<RealType, Policy>& /*dist*/)
 { // Range of permissible values for random variable x.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline const std::pair<RealType, RealType> support(const weibull_distribution<RealType>& /*dist*/)
+template <class RealType, class Policy>
+inline const std::pair<RealType, RealType> support(const weibull_distribution<RealType, Policy>& /*dist*/)
 { // Range of supported values for random variable x.
         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
         using boost::math::tools::max_value;
         return std::pair<RealType, RealType>(0, max_value<RealType>());
 }
 
-template <class RealType>
-inline RealType pdf(const weibull_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType pdf(const weibull_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::pdf(const weibull_distribution<%1%>, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_weibull_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_weibull_x(function, x, &result, Policy()))
       return result;
 
    if(x == 0)
@@ -134,59 +138,65 @@
    return result;
 }
 
-template <class RealType>
-inline RealType cdf(const weibull_distribution<RealType>& dist, const RealType& x)
+template <class RealType, class Policy>
+inline RealType cdf(const weibull_distribution<RealType, Policy>& dist, const RealType& x)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const weibull_distribution<%1%>, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_weibull_x(BOOST_CURRENT_FUNCTION, x, &result))
+ if(false == detail::check_weibull_x(function, x, &result, Policy()))
       return result;
 
- result = -boost::math::expm1(-pow(x / scale, shape));
+ result = -boost::math::expm1(-pow(x / scale, shape), Policy());
 
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const weibull_distribution<RealType>& dist, const RealType& p)
+template <class RealType, class Policy>
+inline RealType quantile(const weibull_distribution<RealType, Policy>& dist, const RealType& p)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const weibull_distribution<%1%>, %1%)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, p, &result))
+ if(false == detail::check_probability(function, p, &result, Policy()))
       return result;
 
    if(p == 1)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
- result = scale * pow(-boost::math::log1p(-p), 1 / shape);
+ result = scale * pow(-boost::math::log1p(-p, Policy()), 1 / shape);
 
    return result;
 }
 
-template <class RealType>
-inline RealType cdf(const complemented2_type<weibull_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType cdf(const complemented2_type<weibull_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::cdf(const weibull_distribution<%1%>, %1%)";
+
    RealType shape = c.dist.shape();
    RealType scale = c.dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_weibull_x(BOOST_CURRENT_FUNCTION, c.param, &result))
+ if(false == detail::check_weibull_x(function, c.param, &result, Policy()))
       return result;
 
    result = exp(-pow(c.param / scale, shape));
@@ -194,73 +204,81 @@
    return result;
 }
 
-template <class RealType>
-inline RealType quantile(const complemented2_type<weibull_distribution<RealType>, RealType>& c)
+template <class RealType, class Policy>
+inline RealType quantile(const complemented2_type<weibull_distribution<RealType, Policy>, RealType>& c)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::quantile(const weibull_distribution<%1%>, %1%)";
+
    RealType shape = c.dist.shape();
    RealType scale = c.dist.scale();
    RealType q = c.param;
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
- if(false == detail::check_probability(BOOST_CURRENT_FUNCTION, q, &result))
+ if(false == detail::check_probability(function, q, &result, Policy()))
       return result;
 
    if(q == 0)
- return tools::overflow_error<RealType>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<RealType>(function, 0, Policy());
 
    result = scale * pow(-log(q), 1 / shape);
 
    return result;
 }
 
-template <class RealType>
-inline RealType mean(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mean(const weibull_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::mean(const weibull_distribution<%1%>)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
 
- result = scale * boost::math::tgamma(1 + 1 / shape);
+ result = scale * boost::math::tgamma(1 + 1 / shape, Policy());
    return result;
 }
 
-template <class RealType>
-inline RealType variance(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType variance(const weibull_distribution<RealType, Policy>& dist)
 {
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
+ static const char* function = "boost::math::variance(const weibull_distribution<%1%>)";
+
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
    {
       return result;
    }
- result = boost::math::tgamma(1 + 1 / shape);
+ result = boost::math::tgamma(1 + 1 / shape, Policy());
    result *= -result;
- result += boost::math::tgamma(1 + 2 / shape);
+ result += boost::math::tgamma(1 + 2 / shape, Policy());
    result *= scale * scale;
    return result;
 }
 
-template <class RealType>
-inline RealType mode(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType mode(const weibull_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std function pow.
 
+ static const char* function = "boost::math::mode(const weibull_distribution<%1%>)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
    {
       return result;
    }
@@ -268,16 +286,18 @@
    return result;
 }
 
-template <class RealType>
-inline RealType median(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType median(const weibull_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std function pow.
 
+ static const char* function = "boost::math::median(const weibull_distribution<%1%>)";
+
    RealType shape = dist.shape(); // Wikipedia k
    RealType scale = dist.scale(); // Wikipedia lambda
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
    {
       return result;
    }
@@ -286,48 +306,52 @@
    return result;
 }
 
-template <class RealType>
-inline RealType skewness(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType skewness(const weibull_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::skewness(const weibull_distribution<%1%>)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
    {
       return result;
    }
    RealType g1, g2, g3, d;
 
- g1 = boost::math::tgamma(1 + 1 / shape);
- g2 = boost::math::tgamma(1 + 2 / shape);
- g3 = boost::math::tgamma(1 + 3 / shape);
+ g1 = boost::math::tgamma(1 + 1 / shape, Policy());
+ g2 = boost::math::tgamma(1 + 2 / shape, Policy());
+ g3 = boost::math::tgamma(1 + 3 / shape, Policy());
    d = pow(g2 - g1 * g1, RealType(1.5));
 
    result = (2 * g1 * g1 * g1 - 3 * g1 * g2 + g3) / d;
    return result;
 }
 
-template <class RealType>
-inline RealType kurtosis_excess(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis_excess(const weibull_distribution<RealType, Policy>& dist)
 {
    using namespace std; // for ADL of std functions
 
+ static const char* function = "boost::math::kurtosis_excess(const weibull_distribution<%1%>)";
+
    RealType shape = dist.shape();
    RealType scale = dist.scale();
 
    RealType result;
- if(false == detail::check_weibull(BOOST_CURRENT_FUNCTION, scale, shape, &result))
+ if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
       return result;
 
    RealType g1, g2, g3, g4, d, g1_2, g1_4;
 
- g1 = boost::math::tgamma(1 + 1 / shape);
- g2 = boost::math::tgamma(1 + 2 / shape);
- g3 = boost::math::tgamma(1 + 3 / shape);
- g4 = boost::math::tgamma(1 + 4 / shape);
+ g1 = boost::math::tgamma(1 + 1 / shape, Policy());
+ g2 = boost::math::tgamma(1 + 2 / shape, Policy());
+ g3 = boost::math::tgamma(1 + 3 / shape, Policy());
+ g4 = boost::math::tgamma(1 + 4 / shape, Policy());
    g1_2 = g1 * g1;
    g1_4 = g1_2 * g1_2;
    d = g2 - g1_2;
@@ -338,8 +362,8 @@
    return result;
 }
 
-template <class RealType>
-inline RealType kurtosis(const weibull_distribution<RealType>& dist)
+template <class RealType, class Policy>
+inline RealType kurtosis(const weibull_distribution<RealType, Policy>& dist)
 {
    return kurtosis_excess(dist) + 3;
 }

Modified: sandbox/math_toolkit/policy/boost/math/policy/error_handling.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/policy/error_handling.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/policy/error_handling.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -1,3 +1,7 @@
+// 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)
 
 #ifndef BOOST_MATH_POLICY_ERROR_HANDLING_HPP
 #define BOOST_MATH_POLICY_ERROR_HANDLING_HPP
@@ -489,3 +493,4 @@
 }} // namespaces boost/math
 
 #endif // BOOST_MATH_POLICY_ERROR_HANDLING_HPP
+

Modified: sandbox/math_toolkit/policy/boost/math/policy/policy.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/policy/policy.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/policy/policy.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -1,3 +1,7 @@
+// 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)
 
 #ifndef BOOST_MATH_POLICY_HPP
 #define BOOST_MATH_POLICY_HPP
@@ -56,6 +60,9 @@
 #ifndef BOOST_MATH_DISCRETE_QUANTILE_POLICY
 #define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_outside
 #endif
+#ifndef BOOST_MATH_ASSERT_UNDEFINED_POLICY
+#define BOOST_MATH_ASSERT_UNDEFINED_POLICY true
+#endif
 
 #if !defined(__BORLANDC__)
 #define BOOST_MATH_META_INT(type, name, Default)\
@@ -155,6 +162,7 @@
 //
 BOOST_MATH_META_BOOL(promote_float, BOOST_MATH_PROMOTE_FLOAT_POLICY);
 BOOST_MATH_META_BOOL(promote_double, BOOST_MATH_PROMOTE_DOUBLE_POLICY);
+BOOST_MATH_META_BOOL(assert_undefined, BOOST_MATH_ASSERT_UNDEFINED_POLICY);
 //
 // Policy types for discrete quantiles:
 //
@@ -164,7 +172,8 @@
    integer_outside,
    integer_inside,
    integer_below,
- integer_above
+ integer_above,
+ integer_nearest
 };
 
 BOOST_MATH_META_INT(discrete_quantile_policy_type, discrete_quantile, BOOST_MATH_DISCRETE_QUANTILE_POLICY);
@@ -375,6 +384,10 @@
    // Discrete quantiles:
    //
    typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, discrete_quantile<> >::type discrete_quantile_type;
+ //
+ // Mathematically undefined properties:
+ //
+ typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, discrete_quantile<> >::type assert_undefined_type;
 };
 //
 // These full specializations are defined to reduce the amount of
@@ -399,6 +412,7 @@
    typedef promote_float<> float_promote_type;
    typedef promote_double<> double_promote_type;
    typedef discrete_quantile<> discrete_quantile_type;
+ typedef assert_undefined<> assert_undefined_type;
 };
 
 template <>
@@ -419,6 +433,7 @@
    typedef promote_float<false> float_promote_type;
    typedef promote_double<false> double_promote_type;
    typedef discrete_quantile<> discrete_quantile_type;
+ typedef assert_undefined<> assert_undefined_type;
 };
 
 template <class Policy,
@@ -459,6 +474,10 @@
    //
    typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, typename Policy::discrete_quantile_type >::type discrete_quantile_type;
    //
+ // Mathematically undefined properties:
+ //
+ typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, discrete_quantile<> >::type assert_undefined_type;
+ //
    // Define a typelist of the policies:
    //
    typedef mpl::vector<
@@ -471,7 +490,8 @@
       precision_type,
       float_promote_type,
       double_promote_type,
- discrete_quantile_type > result_list;
+ discrete_quantile_type,
+ assert_undefined_type> result_list;
    //
    // Remove all the policies that are the same as the default:
    //
@@ -502,7 +522,7 @@
           promote_float<false>,
           promote_double<false>,
           discrete_quantile<>,
- default_policy,
+ assert_undefined<>,
           default_policy,
           default_policy,
           default_policy,
@@ -621,8 +641,8 @@
          ((::std::numeric_limits<Real>::digits <= precision_type::value)
          || (Policy::precision_type::value <= 0)),
 #else
- ((::std::numeric_limits<Real>::digits <= ::boost::math::policy::precision::precision_type::value)
- || (::boost::math::policy::precision::precision_type::value <= 0)),
+ ((::std::numeric_limits<Real>::digits <= ::boost::math::policy::precision<Real, Policy>::precision_type::value)
+ || (::boost::math::policy::precision<Real, Policy>::precision_type::value <= 0)),
 #endif
          // Default case, full precision for RealType:
          digits2< ::std::numeric_limits<Real>::digits>,
@@ -674,3 +694,4 @@
 }}} // namespaces
 
 #endif // BOOST_MATH_POLICY_HPP
+

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/bessel.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/bessel.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/bessel.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -62,7 +62,7 @@
    {
       using namespace std;
       mult = x / 2;
- term = pow(mult, v) / tgamma(v+1);
+ term = pow(mult, v) / boost::math::tgamma(v+1);
       mult *= -mult;
    }
    T operator()()
@@ -89,7 +89,7 @@
    {
       using namespace std;
       mult = x / 2;
- term = pow(mult, T(v)) / tgamma(v+1+T(0.5f));
+ term = pow(mult, T(v)) / boost::math::tgamma(v+1+T(0.5f));
       mult *= -mult;
    }
    T operator()()

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/beta.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/beta.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/beta.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -24,15 +24,15 @@
 //
 // Implementation of Beta(a,b) using the Lanczos approximation:
 //
-template <class T, class L>
-T beta_imp(T a, T b, const L&)
+template <class T, class L, class Policy>
+T beta_imp(T a, T b, const L&, const Policy& pol)
 {
    using namespace std; // for ADL of std names
 
    if(a <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The arguments to the beta function must be greater than zero (got a=%1%).", a);
+ policy::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The arguments to the beta function must be greater than zero (got b=%1%).", b);
+ policy::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
 
    T result;
 
@@ -41,9 +41,9 @@
 
    // Special cases:
    if((c == a) && (b < tools::epsilon<T>()))
- return boost::math::tgamma(b);
+ return boost::math::tgamma(b, pol);
    else if((c == b) && (a < tools::epsilon<T>()))
- return boost::math::tgamma(a);
+ return boost::math::tgamma(a, pol);
    if(b == 1)
       return 1/a;
    else if(a == 1)
@@ -71,6 +71,7 @@
       b += 1;
    }
    */
+
    if(a < b)
       std::swap(a, b);
 
@@ -84,7 +85,7 @@
    {
       // Special case where the base of the power term is close to 1
       // compute (1+x)^y instead:
- result *= exp(ambh * boost::math::log1p(-b / cgh));
+ result *= exp(ambh * boost::math::log1p(-b / cgh, pol));
    }
    else
    {
@@ -107,15 +108,15 @@
 // Generic implementation of Beta(a,b) without Lanczos approximation support
 // (Caution this is slow!!!):
 //
-template <class T>
-T beta_imp(T a, T b, const lanczos::undefined_lanczos& /* l */)
+template <class T, class Policy>
+T beta_imp(T a, T b, const lanczos::undefined_lanczos& /* l */, const Policy& pol)
 {
    using namespace std;
 
    if(a <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The arguments to the beta function must be greater than zero (got a=%1%).", a);
+ policy::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The arguments to the beta function must be greater than zero (got b=%1%).", b);
+ policy::raise_domain_error<T>("boost::math::beta<%1%>(%1%,%1%)", "The arguments to the beta function must be greater than zero (got b=%1%).", b, pol);
 
    T result;
 
@@ -124,9 +125,9 @@
 
    // special cases:
    if((c == a) && (b < tools::epsilon<T>()))
- return boost::math::tgamma(b);
+ return boost::math::tgamma(b, pol);
    else if((c == b) && (a < tools::epsilon<T>()))
- return boost::math::tgamma(a);
+ return boost::math::tgamma(a, pol);
    if(b == 1)
       return 1/a;
    else if(a == 1)
@@ -154,12 +155,12 @@
    T lc = (std::max)(T(10), a+b);
 
    // calculate the fraction parts:
- T sa = detail::lower_gamma_series(a, la, ::boost::math::tools::digits<T>()) / a;
- sa += detail::upper_gamma_fraction(a, la, ::boost::math::tools::digits<T>());
- T sb = detail::lower_gamma_series(b, lb, ::boost::math::tools::digits<T>()) / b;
- sb += detail::upper_gamma_fraction(b, lb, ::boost::math::tools::digits<T>());
- T sc = detail::lower_gamma_series(c, lc, ::boost::math::tools::digits<T>()) / c;
- sc += detail::upper_gamma_fraction(c, lc, ::boost::math::tools::digits<T>());
+ T sa = detail::lower_gamma_series(a, la, pol) / a;
+ sa += detail::upper_gamma_fraction(a, la, ::boost::math::policy::digits<T, Policy>());
+ T sb = detail::lower_gamma_series(b, lb, pol) / b;
+ sb += detail::upper_gamma_fraction(b, lb, ::boost::math::policy::digits<T, Policy>());
+ T sc = detail::lower_gamma_series(c, lc, pol) / c;
+ sc += detail::upper_gamma_fraction(c, lc, ::boost::math::policy::digits<T, Policy>());
 
    // and the exponent part:
    result = exp(lc - la - lb) * pow(la/lc, a) * pow(lb/lc, b);
@@ -185,13 +186,14 @@
 // powers are *hard* though, and using logarithms just leads to
 // horrendous cancellation errors.
 //
-template <class T, class L>
+template <class T, class L, class Policy>
 T ibeta_power_terms(T a,
                         T b,
                         T x,
                         T y,
                         const L&,
- bool normalised)
+ bool normalised,
+ const Policy& pol)
 {
    using namespace std;
 
@@ -235,11 +237,11 @@
          // since one of the power terms will evaluate to a number close to 1.
          //
          if(fabs(l1) < 0.1)
- result *= exp(a * boost::math::log1p(l1));
+ result *= exp(a * boost::math::log1p(l1, pol));
          else
             result *= pow((x * cgh) / agh, a);
          if(fabs(l2) < 0.1)
- result *= exp(b * boost::math::log1p(l2));
+ result *= exp(b * boost::math::log1p(l2, pol));
          else
             result *= pow((y * cgh) / bgh, b);
       }
@@ -268,30 +270,30 @@
          T ratio = b / a;
          if((small_a && (ratio * l2 < 0.1)) || (!small_a && (l1 / ratio > 0.1)))
          {
- T l3 = boost::math::expm1(ratio * boost::math::log1p(l2));
+ T l3 = boost::math::expm1(ratio * boost::math::log1p(l2, pol), pol);
             l3 = l1 + l3 + l3 * l1;
- l3 = a * boost::math::log1p(l3);
+ l3 = a * boost::math::log1p(l3, pol);
             result *= exp(l3);
          }
          else
          {
- T l3 = boost::math::expm1(boost::math::log1p(l1) / ratio);
+ T l3 = boost::math::expm1(boost::math::log1p(l1, pol) / ratio, pol);
             l3 = l2 + l3 + l3 * l2;
- l3 = b * boost::math::log1p(l3);
+ l3 = b * boost::math::log1p(l3, pol);
             result *= exp(l3);
          }
       }
       else if(fabs(l1) < fabs(l2))
       {
          // First base near 1 only:
- T l = a * boost::math::log1p(l1)
+ T l = a * boost::math::log1p(l1, pol)
             + b * log((y * cgh) / bgh);
          result *= exp(l);
       }
       else
       {
          // Second base near 1 only:
- T l = b * boost::math::log1p(l2)
+ T l = b * boost::math::log1p(l2, pol)
             + a * log((x * cgh) / agh);
          result *= exp(l);
       }
@@ -341,13 +343,14 @@
 //
 // This version is generic, slow, and does not use the Lanczos approximation.
 //
-template <class T>
+template <class T, class Policy>
 T ibeta_power_terms(T a,
                         T b,
                         T x,
                         T y,
                         const boost::math::lanczos::undefined_lanczos&,
- bool normalised)
+ bool normalised,
+ const Policy& pol)
 {
    using namespace std;
 
@@ -369,12 +372,12 @@
    T lb = b + 5;
    T lc = a + b + 5;
    // gamma function partials:
- T sa = detail::lower_gamma_series(a, la, ::boost::math::tools::digits<T>()) / a;
- sa += detail::upper_gamma_fraction(a, la, ::boost::math::tools::digits<T>());
- T sb = detail::lower_gamma_series(b, lb, ::boost::math::tools::digits<T>()) / b;
- sb += detail::upper_gamma_fraction(b, lb, ::boost::math::tools::digits<T>());
- T sc = detail::lower_gamma_series(c, lc, ::boost::math::tools::digits<T>()) / c;
- sc += detail::upper_gamma_fraction(c, lc, ::boost::math::tools::digits<T>());
+ T sa = detail::lower_gamma_series(a, la, pol) / a;
+ sa += detail::upper_gamma_fraction(a, la, ::boost::math::policy::digits<T, Policy>());
+ T sb = detail::lower_gamma_series(b, lb, pol) / b;
+ sb += detail::upper_gamma_fraction(b, lb, ::boost::math::policy::digits<T, Policy>());
+ T sc = detail::lower_gamma_series(c, lc, pol) / c;
+ sc += detail::upper_gamma_fraction(c, lc, ::boost::math::policy::digits<T, Policy>());
    // gamma function powers combined with incomplete beta powers:
 
    T b1 = (x * lc) / la;
@@ -397,11 +400,11 @@
    {
       T p1, p2;
       if((fabs(b1 - 1) * a < 10) && (a > 1))
- p1 = exp(a * boost::math::log1p((x * b - y * la) / la));
+ p1 = exp(a * boost::math::log1p((x * b - y * la) / la, pol));
       else
          p1 = pow(b1, a);
       if((fabs(b2 - 1) * b < 10) && (b > 1))
- p2 = exp(b * boost::math::log1p((y * a - x * lb) / lb));
+ p2 = exp(b * boost::math::log1p((y * a - x * lb) / lb, pol));
       else
          p2 = pow(b2, b);
       T p3 = exp(e1);
@@ -434,8 +437,8 @@
    int n;
 };
 
-template <class T, class L>
-T ibeta_series(T a, T b, T x, T s0, const L&, bool normalised, T* p_derivative, T y)
+template <class T, class L, class Policy>
+T ibeta_series(T a, T b, T x, T s0, const L&, bool normalised, T* p_derivative, T y, const Policy& pol)
 {
    using namespace std;
 
@@ -453,7 +456,7 @@
       T cgh = c + L::g() - T(0.5);
       result = L::lanczos_sum_expG_scaled(c) / (L::lanczos_sum_expG_scaled(a) * L::lanczos_sum_expG_scaled(b));
       if(a * b < bgh * 10)
- result *= exp((b - 0.5f) * boost::math::log1p(a / bgh));
+ result *= exp((b - 0.5f) * boost::math::log1p(a / bgh, pol));
       else
          result *= pow(cgh / bgh, b - 0.5f);
       result *= pow(x * cgh / agh, a);
@@ -474,15 +477,15 @@
       return s0; // Safeguard: series can't cope with denorms.
    ibeta_series_t<T> s(a, b, x, result);
    boost::uintmax_t max_iter = BOOST_MATH_MAX_ITER;
- result = boost::math::tools::sum_series(s, boost::math::tools::digits<T>(), max_iter, s0);
- tools::check_series_iterations(BOOST_CURRENT_FUNCTION, max_iter);
+ result = boost::math::tools::sum_series(s, boost::math::policy::digits<T, Policy>(), max_iter, s0);
+ policy::check_series_iterations("boost::math::ibeta<%1%>(%1%, %1%, %1%)", max_iter, pol);
    return result;
 }
 //
 // Incomplete Beta series again, this time without Lanczos support:
 //
-template <class T>
-T ibeta_series(T a, T b, T x, T s0, const boost::math::lanczos::undefined_lanczos&, bool normalised, T* p_derivative, T y)
+template <class T, class Policy>
+T ibeta_series(T a, T b, T x, T s0, const boost::math::lanczos::undefined_lanczos&, bool normalised, T* p_derivative, T y, const Policy& pol)
 {
    using namespace std;
 
@@ -503,12 +506,12 @@
       T lc = a + b + 5;
 
       // calculate the gamma parts:
- T sa = detail::lower_gamma_series(a, la, ::boost::math::tools::digits<T>()) / a;
- sa += detail::upper_gamma_fraction(a, la, ::boost::math::tools::digits<T>());
- T sb = detail::lower_gamma_series(b, lb, ::boost::math::tools::digits<T>()) / b;
- sb += detail::upper_gamma_fraction(b, lb, ::boost::math::tools::digits<T>());
- T sc = detail::lower_gamma_series(c, lc, ::boost::math::tools::digits<T>()) / c;
- sc += detail::upper_gamma_fraction(c, lc, ::boost::math::tools::digits<T>());
+ T sa = detail::lower_gamma_series(a, la, pol) / a;
+ sa += detail::upper_gamma_fraction(a, la, ::boost::math::policy::digits<T, Policy>());
+ T sb = detail::lower_gamma_series(b, lb, pol) / b;
+ sb += detail::upper_gamma_fraction(b, lb, ::boost::math::policy::digits<T, Policy>());
+ T sc = detail::lower_gamma_series(c, lc, pol) / c;
+ sc += detail::upper_gamma_fraction(c, lc, ::boost::math::policy::digits<T, Policy>());
 
       // and their combined power-terms:
       T b1 = (x * lc) / la;
@@ -531,7 +534,7 @@
       {
          result = pow(b1, a);
          if(a * b < lb * 10)
- result *= exp(b * boost::math::log1p(a / lb));
+ result *= exp(b * boost::math::log1p(a / lb, pol));
          else
             result *= pow(b2, b);
          result /= exp(e1);
@@ -550,10 +553,12 @@
       // Non-normalised, just compute the power:
       result = pow(x, a);
    }
+ if(result < tools::min_value<T>())
+ return s0; // Safeguard: series can't cope with denorms.
    ibeta_series_t<T> s(a, b, x, result);
    boost::uintmax_t max_iter = BOOST_MATH_MAX_ITER;
- result = boost::math::tools::sum_series(s, boost::math::tools::digits<T>(), max_iter, s0);
- tools::check_series_iterations(BOOST_CURRENT_FUNCTION, max_iter);
+ result = boost::math::tools::sum_series(s, boost::math::policy::digits<T, Policy>(), max_iter, s0);
+ policy::check_series_iterations("boost::math::ibeta<%1%>(%1%, %1%, %1%)", max_iter, pol);
    return result;
 }
 
@@ -589,11 +594,12 @@
 //
 // Evaluate the incomplete beta via the continued fraction representation:
 //
-template <class T, class L>
-inline T ibeta_fraction2(T a, T b, T x, T y, const L& l, bool normalised, T* p_derivative)
+template <class T, class Policy>
+inline T ibeta_fraction2(T a, T b, T x, T y, const Policy& pol, bool normalised, T* p_derivative)
 {
+ typedef typename lanczos::lanczos<T, Policy>::type lanczos_type;
    using namespace std;
- T result = ibeta_power_terms(a, b, x, y, l, normalised);
+ T result = ibeta_power_terms(a, b, x, y, lanczos_type(), normalised, pol);
    if(p_derivative)
    {
       *p_derivative = result;
@@ -603,16 +609,17 @@
       return result;
 
    ibeta_fraction2_t<T> f(a, b, x);
- T fract = boost::math::tools::continued_fraction_b(f, boost::math::tools::digits<T>());
+ T fract = boost::math::tools::continued_fraction_b(f, boost::math::policy::digits<T, Policy>());
    return result / fract;
 }
 //
 // Computes the difference between ibeta(a,b,x) and ibeta(a+k,b,x):
 //
-template <class T, class L>
-T ibeta_a_step(T a, T b, T x, T y, int k, const L& l, bool normalised, T* p_derivative)
+template <class T, class Policy>
+T ibeta_a_step(T a, T b, T x, T y, int k, const Policy& pol, bool normalised, T* p_derivative)
 {
- T prefix = ibeta_power_terms(a, b, x, y, l, normalised);
+ typedef typename lanczos::lanczos<T, Policy>::type lanczos_type;
+ T prefix = ibeta_power_terms(a, b, x, y, lanczos_type(), normalised, pol);
    if(p_derivative)
    {
       *p_derivative = prefix;
@@ -692,9 +699,10 @@
    BOOST_STATIC_ASSERT(::boost::math::max_factorial<long double>::value >= 100);
 };
 
-template <class T, class L>
-T beta_small_b_large_a_series(T a, T b, T x, T y, T s0, T mult, const L& l, bool normalised)
+template <class T, class Policy>
+T beta_small_b_large_a_series(T a, T b, T x, T y, T s0, T mult, const Policy& pol, bool normalised)
 {
+ typedef typename lanczos::lanczos<T, Policy>::type lanczos_type;
    using namespace std;
    //
    // This is DiDonato and Morris's BGRAT routine, see Eq's 9 through 9.6.
@@ -705,23 +713,23 @@
    T t = a + bm1 / 2;
    T lx, u;
    if(y < 0.35)
- lx = boost::math::log1p(-y);
+ lx = boost::math::log1p(-y, pol);
    else
       lx = log(x);
    u = -t * lx;
    // and from from 9.2:
    T prefix;
- T h = regularised_gamma_prefix(b, u, policy::policy<>(), l);
+ T h = regularised_gamma_prefix(b, u, pol, lanczos_type());
    if(h <= tools::min_value<T>())
       return s0;
    if(normalised)
    {
- prefix = h / tgamma_delta_ratio_imp(a, b, policy::policy<>());
+ prefix = h / tgamma_delta_ratio(a, b, pol);
       prefix /= pow(t, b);
    }
    else
    {
- prefix = full_igamma_prefix(b, u, policy::policy<>()) / pow(t, b);
+ prefix = full_igamma_prefix(b, u, pol) / pow(t, b);
    }
    prefix *= mult;
    //
@@ -733,7 +741,7 @@
    //
    // Now an initial value for J, see 9.6:
    //
- T j = gamma_q(b, u) / h;
+ T j = gamma_q(b, u, pol) / h;
    //
    // Now we can start to pull things together and evaluate the sum in Eq 9:
    //
@@ -825,9 +833,11 @@
 // input range and select the right implementation method for
 // each domain:
 //
-template <class T, class L>
-T ibeta_imp(T a, T b, T x, const L& l, bool inv, bool normalised, T* p_derivative)
+template <class T, class Policy>
+T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised, T* p_derivative)
 {
+ static const char* function = "boost::math::ibeta<%1%>(%1%, %1%, %1%)";
+ typedef typename lanczos::lanczos<T, Policy>::type lanczos_type;
    using namespace std; // for ADL of std math functions.
 
    bool invert = inv;
@@ -849,11 +859,11 @@
    }
 
    if(a <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a);
+ policy::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b);
+ policy::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
    if((x < 0) || (x > 1))
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x);
+ policy::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
 
    if(x == 0)
    {
@@ -861,7 +871,7 @@
       {
          *p_derivative = (a == 1) ? 1 : (a < 1) ? tools::max_value<T>() / 2 : tools::min_value<T>() * 2;
       }
- return (invert ? (normalised ? 1 : beta_imp(a, b, l)) : 0);
+ return (invert ? (normalised ? 1 : boost::math::beta(a, b, pol)) : 0);
    }
    if(x == 1)
    {
@@ -869,7 +879,7 @@
       {
          *p_derivative = (b == 1) ? 1 : (b < 1) ? tools::max_value<T>() / 2 : tools::min_value<T>() * 2;
       }
- return (invert == 0 ? (normalised ? 1 : beta_imp(a, b, l)) : 0);
+ return (invert == 0 ? (normalised ? 1 : boost::math::beta(a, b, pol)) : 0);
    }
 
    if((std::min)(a, b) <= 1)
@@ -886,12 +896,12 @@
          if((a >= (std::min)(T(0.2), b)) || (pow(x, a) <= 0.9))
          {
             if(!invert)
- fract = ibeta_series(a, b, x, T(0), l, normalised, p_derivative, y);
+ fract = ibeta_series(a, b, x, T(0), lanczos_type(), normalised, p_derivative, y, pol);
             else
             {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                invert = false;
- fract = -ibeta_series(a, b, x, fract, l, normalised, p_derivative, y);
+ fract = -ibeta_series(a, b, x, fract, lanczos_type(), normalised, p_derivative, y, pol);
             }
          }
          else
@@ -902,12 +912,12 @@
             if(y >= 0.3)
             {
                if(!invert)
- fract = ibeta_series(a, b, x, T(0), l, normalised, p_derivative, y);
+ fract = ibeta_series(a, b, x, T(0), lanczos_type(), normalised, p_derivative, y, pol);
                else
                {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                   invert = false;
- fract = -ibeta_series(a, b, x, fract, l, normalised, p_derivative, y);
+ fract = -ibeta_series(a, b, x, fract, lanczos_type(), normalised, p_derivative, y, pol);
                }
             }
             else
@@ -922,14 +932,14 @@
                {
                   prefix = 1;
                }
- fract = ibeta_a_step(a, b, x, y, 20, l, normalised, p_derivative);
+ fract = ibeta_a_step(a, b, x, y, 20, pol, normalised, p_derivative);
                if(!invert)
- fract = beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, l, normalised);
+ fract = beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, pol, normalised);
                else
                {
- fract -= (normalised ? 1 : beta_imp(a, b, l));
+ fract -= (normalised ? 1 : boost::math::beta(a, b, pol));
                   invert = false;
- fract = -beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, l, normalised);
+ fract = -beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, pol, normalised);
                }
             }
          }
@@ -940,12 +950,12 @@
          if((b <= 1) || ((x < 0.1) && (pow(b * x, a) <= 0.7)))
          {
             if(!invert)
- fract = ibeta_series(a, b, x, T(0), l, normalised, p_derivative, y);
+ fract = ibeta_series(a, b, x, T(0), lanczos_type(), normalised, p_derivative, y, pol);
             else
             {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                invert = false;
- fract = -ibeta_series(a, b, x, fract, l, normalised, p_derivative, y);
+ fract = -ibeta_series(a, b, x, fract, lanczos_type(), normalised, p_derivative, y, pol);
             }
          }
          else
@@ -957,23 +967,23 @@
             if(y >= 0.3)
             {
                if(!invert)
- fract = ibeta_series(a, b, x, T(0), l, normalised, p_derivative, y);
+ fract = ibeta_series(a, b, x, T(0), lanczos_type(), normalised, p_derivative, y, pol);
                else
                {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                   invert = false;
- fract = -ibeta_series(a, b, x, fract, l, normalised, p_derivative, y);
+ fract = -ibeta_series(a, b, x, fract, lanczos_type(), normalised, p_derivative, y, pol);
                }
             }
             else if(a >= 15)
             {
                if(!invert)
- fract = beta_small_b_large_a_series(a, b, x, y, T(0), T(1), l, normalised);
+ fract = beta_small_b_large_a_series(a, b, x, y, T(0), T(1), pol, normalised);
                else
                {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                   invert = false;
- fract = -beta_small_b_large_a_series(a, b, x, y, fract, T(1), l, normalised);
+ fract = -beta_small_b_large_a_series(a, b, x, y, fract, T(1), pol, normalised);
                }
             }
             else
@@ -988,14 +998,14 @@
                {
                   prefix = 1;
                }
- fract = ibeta_a_step(a, b, x, y, 20, l, normalised, p_derivative);
+ fract = ibeta_a_step(a, b, x, y, 20, pol, normalised, p_derivative);
                if(!invert)
- fract = beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, l, normalised);
+ fract = beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, pol, normalised);
                else
                {
- fract -= (normalised ? 1 : beta_imp(a, b, l));
+ fract -= (normalised ? 1 : boost::math::beta(a, b, pol));
                   invert = false;
- fract = -beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, l, normalised);
+ fract = -beta_small_b_large_a_series(a + 20, b, x, y, fract, prefix, pol, normalised);
                }
             }
          }
@@ -1029,17 +1039,17 @@
             T n = b + k;
             fract = binomial_ccdf(n, k, x, y);
             if(!normalised)
- fract *= boost::math::beta(a, b);
+ fract *= boost::math::beta(a, b, pol);
          }
          else if(b * x <= 0.7)
          {
             if(!invert)
- fract = ibeta_series(a, b, x, T(0), l, normalised, p_derivative, y);
+ fract = ibeta_series(a, b, x, T(0), lanczos_type(), normalised, p_derivative, y, pol);
             else
             {
- fract = -(normalised ? 1 : beta_imp(a, b, l));
+ fract = -(normalised ? 1 : boost::math::beta(a, b, pol));
                invert = false;
- fract = -ibeta_series(a, b, x, fract, l, normalised, p_derivative, y);
+ fract = -ibeta_series(a, b, x, fract, lanczos_type(), normalised, p_derivative, y, pol);
             }
          }
          else if(a > 15)
@@ -1058,8 +1068,8 @@
             {
                prefix = 1;
             }
- fract = ibeta_a_step(bbar, a, y, x, n, l, normalised, static_cast<T*>(0));
- fract = beta_small_b_large_a_series(a, bbar, x, y, fract, T(1), l, normalised);
+ fract = ibeta_a_step(bbar, a, y, x, n, pol, normalised, static_cast<T*>(0));
+ fract = beta_small_b_large_a_series(a, bbar, x, y, fract, T(1), pol, normalised);
             fract /= prefix;
          }
          else if(normalised)
@@ -1074,12 +1084,12 @@
                --n;
                bbar += 1;
             }
- fract = ibeta_a_step(bbar, a, y, x, n, l, normalised, static_cast<T*>(0));
- fract += ibeta_a_step(a, bbar, x, y, 20, l, normalised, static_cast<T*>(0));
+ fract = ibeta_a_step(bbar, a, y, x, n, pol, normalised, static_cast<T*>(0));
+ fract += ibeta_a_step(a, bbar, x, y, 20, pol, normalised, static_cast<T*>(0));
             if(invert)
- fract -= (normalised ? 1 : beta_imp(a, b, l));
+ fract -= (normalised ? 1 : boost::math::beta(a, b, pol));
             //fract = ibeta_series(a+20, bbar, x, fract, l, normalised, p_derivative, y);
- fract = beta_small_b_large_a_series(a+20, bbar, x, y, fract, T(1), l, normalised);
+ fract = beta_small_b_large_a_series(a+20, bbar, x, y, fract, T(1), pol, normalised);
             if(invert)
             {
                fract = -fract;
@@ -1087,16 +1097,16 @@
             }
          }
          else
- fract = ibeta_fraction2(a, b, x, y, l, normalised, p_derivative);
+ fract = ibeta_fraction2(a, b, x, y, pol, normalised, p_derivative);
       }
       else
- fract = ibeta_fraction2(a, b, x, y, l, normalised, p_derivative);
+ fract = ibeta_fraction2(a, b, x, y, pol, normalised, p_derivative);
    }
    if(p_derivative)
    {
       if(*p_derivative < 0)
       {
- *p_derivative = ibeta_power_terms(a, b, x, y, l, true);
+ *p_derivative = ibeta_power_terms(a, b, x, y, lanczos_type(), true, pol);
       }
       T div = y * x;
 
@@ -1113,44 +1123,46 @@
          }
       }
    }
- return invert ? (normalised ? 1 : beta_imp(a, b, l)) - fract : fract;
+ return invert ? (normalised ? 1 : boost::math::beta(a, b, pol)) - fract : fract;
 } // template <class T, class L>T ibeta_imp(T a, T b, T x, const L& l, bool inv, bool normalised)
 
-template <class T, class L>
-inline T ibeta_imp(T a, T b, T x, const L& l, bool inv, bool normalised)
+template <class T, class Policy>
+inline T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised)
 {
- return ibeta_imp(a, b, x, l, inv, normalised, static_cast<T*>(0));
+ return ibeta_imp(a, b, x, pol, inv, normalised, static_cast<T*>(0));
 }
 
-template <class T, class L>
-T ibeta_derivative_imp(T a, T b, T x, const L& l)
+template <class T, class Policy>
+T ibeta_derivative_imp(T a, T b, T x, const Policy& pol)
 {
+ static const char* function = "ibeta_derivative<%1%>(%1%,%1%,%1%)";
    //
    // start with the usual error checks:
    //
    if(a <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a);
+ policy::raise_domain_error<T>(function, "The argument a to the incomplete beta function must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b);
+ policy::raise_domain_error<T>(function, "The argument b to the incomplete beta function must be greater than zero (got b=%1%).", b, pol);
    if((x < 0) || (x > 1))
- tools::domain_error<T>(BOOST_CURRENT_FUNCTION, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x);
+ policy::raise_domain_error<T>(function, "Parameter x outside the range [0,1] in the incomplete beta function (got x=%1%).", x, pol);
    //
    // Now the corner cases:
    //
    if(x == 0)
    {
       return (a > 1) ? 0 :
- (a == 1) ? 1 / boost::math::beta(a, b) : tools::overflow_error<T>(BOOST_CURRENT_FUNCTION);
+ (a == 1) ? 1 / boost::math::beta(a, b, pol) : policy::raise_overflow_error<T>(function, 0, pol);
    }
    else if(x == 1)
    {
       return (b > 1) ? 0 :
- (b == 1) ? 1 / boost::math::beta(a, b) : tools::overflow_error<T>(BOOST_CURRENT_FUNCTION);
+ (b == 1) ? 1 / boost::math::beta(a, b, pol) : policy::raise_overflow_error<T>(function, 0, pol);
    }
    //
    // Now the regular cases:
    //
- T f1 = ibeta_power_terms(a, b, x, 1 - x, l, true);
+ typedef typename lanczos::lanczos<T, Policy>::type lanczos_type;
+ T f1 = ibeta_power_terms(a, b, x, 1 - x, lanczos_type(), true, pol);
    T y = (1 - x) * x;
 
    if(f1 == 0)
@@ -1159,14 +1171,39 @@
    if((tools::max_value<T>() * y < f1))
    {
       // overflow:
- return tools::overflow_error<T>(BOOST_CURRENT_FUNCTION);
+ return policy::raise_overflow_error<T>(function, 0, pol);
    }
 
    f1 /= y;
 
    return f1;
 }
+//
+// Some forwarding functions that dis-ambiguate the third argument type:
+//
+template <class RT1, class RT2, class Policy>
+inline typename tools::promote_args<RT1, RT2>::type
+ beta(RT1 a, RT2 b, const Policy&, const mpl::true_*)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename tools::promote_args<RT1, RT2>::type result_type;
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::beta_imp(static_cast<value_type>(a), static_cast<value_type>(b), evaluation_type(), forwarding_policy()), "boost::math::beta<%1%>(%1%,%1%)");
+}
+template <class RT1, class RT2, class RT3>
+inline typename tools::promote_args<RT1, RT2, RT3>::type
+ beta(RT1 a, RT2 b, RT3 x, const mpl::false_*)
+{
+ return boost::math::beta(a, b, x, policy::policy<>());
+}
 } // namespace detail
 
 //
@@ -1174,70 +1211,130 @@
 // which Lanczos approximation to use
 // and forward to the implementation functions:
 //
+template <class RT1, class RT2, class A>
+inline typename tools::promote_args<RT1, RT2, A>::type
+ beta(RT1 a, RT2 b, A arg)
+{
+ typedef typename policy::is_policy<A>::type tag;
+ return boost::math::detail::beta(a, b, arg, static_cast<tag*>(0));
+}
+
 template <class RT1, class RT2>
 inline typename tools::promote_args<RT1, RT2>::type
    beta(RT1 a, RT2 b)
 {
- BOOST_FPU_EXCEPTION_GUARD
- typedef typename tools::promote_args<RT1, RT2>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::beta_imp(static_cast<value_type>(a), static_cast<value_type>(b), evaluation_type()), BOOST_CURRENT_FUNCTION);
+ return boost::math::beta(a, b, policy::policy<>());
 }
 
-template <class RT1, class RT2, class RT3>
+template <class RT1, class RT2, class RT3, class Policy>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
- beta(RT1 a, RT2 b, RT3 x)
+ beta(RT1 a, RT2 b, RT3 x, const Policy&)
 {
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), evaluation_type(), false, false), BOOST_CURRENT_FUNCTION);
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), forwarding_policy(), false, false), "boost::math::beta<%1%>(%1%,%1%,%1%)");
 }
 
+template <class RT1, class RT2, class RT3, class Policy>
+inline typename tools::promote_args<RT1, RT2, RT3>::type
+ betac(RT1 a, RT2 b, RT3 x, const Policy&)
+{
+ BOOST_FPU_EXCEPTION_GUARD
+ typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), forwarding_policy(), true, false), "boost::math::betac<%1%>(%1%,%1%,%1%)");
+}
 template <class RT1, class RT2, class RT3>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
    betac(RT1 a, RT2 b, RT3 x)
 {
+ return boost::math::betac(a, b, x, policy::policy<>());
+}
+
+template <class RT1, class RT2, class RT3, class Policy>
+inline typename tools::promote_args<RT1, RT2, RT3>::type
+ ibeta(RT1 a, RT2 b, RT3 x, const Policy&)
+{
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), evaluation_type(), true, false), BOOST_CURRENT_FUNCTION);
-}
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), forwarding_policy(), false, true), "boost::math::ibeta<%1%>(%1%,%1%,%1%)");
+}
 template <class RT1, class RT2, class RT3>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
    ibeta(RT1 a, RT2 b, RT3 x)
 {
+ return boost::math::ibeta(a, b, x, policy::policy<>());
+}
+
+template <class RT1, class RT2, class RT3, class Policy>
+inline typename tools::promote_args<RT1, RT2, RT3>::type
+ ibetac(RT1 a, RT2 b, RT3 x, const Policy&)
+{
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), evaluation_type(), false, true), BOOST_CURRENT_FUNCTION);
-}
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), forwarding_policy(), true, true), "boost::math::ibetac<%1%>(%1%,%1%,%1%)");
+}
 template <class RT1, class RT2, class RT3>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
    ibetac(RT1 a, RT2 b, RT3 x)
 {
+ return boost::math::ibetac(a, b, x, policy::policy<>());
+}
+
+template <class RT1, class RT2, class RT3, class Policy>
+inline typename tools::promote_args<RT1, RT2, RT3>::type
+ ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy&)
+{
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::ibeta_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), evaluation_type(), true, true), BOOST_CURRENT_FUNCTION);
-}
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::ibeta_derivative_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), forwarding_policy()), "boost::math::ibeta_derivative<%1%>(%1%,%1%,%1%)");
+}
 template <class RT1, class RT2, class RT3>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
    ibeta_derivative(RT1 a, RT2 b, RT3 x)
 {
- BOOST_FPU_EXCEPTION_GUARD
- typedef typename tools::promote_args<RT1, RT2, RT3>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
- return tools::checked_narrowing_cast<result_type>(detail::ibeta_derivative_imp(static_cast<value_type>(a), static_cast<value_type>(b), static_cast<value_type>(x), evaluation_type()), BOOST_CURRENT_FUNCTION);
+ return boost::math::ibeta_derivative(a, b, x, policy::policy<>());
 }
 
 } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/detail/erf_inv.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/detail/erf_inv.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/detail/erf_inv.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -365,11 +365,18 @@
    // precision internally if it's appropriate:
    //
    typedef typename policy::evaluation<result_type, Policy>::type eval_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
    //
    // And get the result, negating where required:
    //
- return s * policy::checked_narrowing_cast<result_type, Policy>(
- detail::erf_inv_imp(static_cast<eval_type>(p), static_cast<eval_type>(q), pol, static_cast<tag_type const*>(0)), function);
+ return s * policy::checked_narrowing_cast<result_type, forwarding_policy>(
+ detail::erf_inv_imp(static_cast<eval_type>(p), static_cast<eval_type>(q), forwarding_policy(), static_cast<tag_type const*>(0)), function);
 }
 
 template <class T, class Policy>
@@ -421,6 +428,12 @@
    // precision internally if it's appropriate:
    //
    typedef typename policy::evaluation<result_type, Policy>::type eval_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
    //
    // Likewise use internal promotion, so we evaluate at a higher
    // precision internally if it's appropriate:
@@ -429,8 +442,8 @@
    //
    // And get the result, negating where required:
    //
- return s * policy::checked_narrowing_cast<result_type, Policy>(
- detail::erf_inv_imp(static_cast<eval_type>(p), static_cast<eval_type>(q), pol, static_cast<tag_type const*>(0)), function);
+ return s * policy::checked_narrowing_cast<result_type, forwarding_policy>(
+ detail::erf_inv_imp(static_cast<eval_type>(p), static_cast<eval_type>(q), forwarding_policy(), static_cast<tag_type const*>(0)), function);
 }
 
 template <class T>

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inv_ab.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inv_ab.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inv_ab.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -18,23 +18,23 @@
 
 namespace boost{ namespace math{ namespace detail{
 
-template <class T>
+template <class T, class Policy>
 struct beta_inv_ab_t
 {
    beta_inv_ab_t(T b_, T z_, T p_, bool invert_, bool swap_ab_) : b(b_), z(z_), p(p_), invert(invert_), swap_ab(swap_ab_) {}
    T operator()(T a)
    {
       return invert ?
- p - boost::math::ibetac(swap_ab ? b : a, swap_ab ? a : b, z)
- : boost::math::ibeta(swap_ab ? b : a, swap_ab ? a : b, z) - p;
+ p - boost::math::ibetac(swap_ab ? b : a, swap_ab ? a : b, z, Policy())
+ : boost::math::ibeta(swap_ab ? b : a, swap_ab ? a : b, z, Policy()) - p;
    }
 private:
    T b, z, p;
    bool invert, swap_ab;
 };
 
-template <class T>
-T inverse_negative_binomial_cornish_fisher(T n, T sf, T sfc, T p, T q)
+template <class T, class Policy>
+T inverse_negative_binomial_cornish_fisher(T n, T sf, T sfc, T p, T q, const Policy& pol)
 {
    using namespace std;
    // mean:
@@ -47,7 +47,7 @@
    // kurtosis:
    T k = (6 - sf * (5+sfc)) / (n * (sfc));
    // Get the inverse of a std normal distribution:
- T x = boost::math::erfc_inv(p > q ? 2 * q : 2 * p) * constants::root_two<T>();
+ T x = boost::math::erfc_inv(p > q ? 2 * q : 2 * p, pol) * constants::root_two<T>();
    // Set the sign:
    if(p < 0.5)
       x = -x;
@@ -66,8 +66,8 @@
    return w;
 }
 
-template <class T>
-T ibeta_inv_ab_imp(const T& b, const T& z, const T& p, const T& q, bool swap_ab)
+template <class T, class Policy>
+T ibeta_inv_ab_imp(const T& b, const T& z, const T& p, const T& q, bool swap_ab, const Policy& pol)
 {
    using namespace std; // for ADL of std lib math functions
    //
@@ -86,11 +86,11 @@
    // Function object, this is the functor whose root
    // we have to solve:
    //
- beta_inv_ab_t<T> f(b, z, (p < q) ? p : q, (p < q) ? false : true, swap_ab);
+ beta_inv_ab_t<T, Policy> f(b, z, (p < q) ? p : q, (p < q) ? false : true, swap_ab);
    //
    // Tolerance: full precision.
    //
- tools::eps_tolerance<T> tol(tools::digits<T>());
+ tools::eps_tolerance<T> tol(policy::digits<T, Policy>());
    //
    // Now figure out a starting guess for what a may be,
    // we'll start out with a value that'll put p or q
@@ -124,7 +124,7 @@
       }
    }
    if(n * n * n * u * sf > 0.005)
- guess = 1 + inverse_negative_binomial_cornish_fisher(n, sf, sfc, u, v);
+ guess = 1 + inverse_negative_binomial_cornish_fisher(n, sf, sfc, u, v, pol);
 
    if(guess < 10)
    {
@@ -147,36 +147,60 @@
    // Max iterations permitted:
    //
    boost::uintmax_t max_iter = 200;
- std::pair<T, T> r = bracket_and_solve_root(f, guess, factor, swap_ab ? true : false, tol, max_iter, policy::policy<>());
+ std::pair<T, T> r = bracket_and_solve_root(f, guess, factor, swap_ab ? true : false, tol, max_iter, pol);
    if(max_iter >= 200)
- tools::logic_error<T>(BOOST_CURRENT_FUNCTION, "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first);
+ policy::raise_evaluation_error<T>("boost::math::ibeta_invab_imp<%1%>(%1%,%1%,%1%)", "Unable to locate the root within a reasonable number of iterations, closest approximation so far was %1%", r.first, pol);
    return (r.first + r.second) / 2;
 }
 
 } // namespace detail
 
+template <class T, class Policy>
+inline T ibeta_inva(T b, T x, T p, const Policy& pol)
+{
+ return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, false, pol);
+}
+
+template <class T, class Policy>
+inline T ibetac_inva(T b, T x, T q, const Policy& pol)
+{
+ return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, false, pol);
+}
+
+template <class T, class Policy>
+inline T ibeta_invb(T b, T x, T p, const Policy& pol)
+{
+ return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, true, pol);
+}
+
+template <class T, class Policy>
+inline T ibetac_invb(T b, T x, T q, const Policy& pol)
+{
+ return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, true, pol);
+}
+
 template <class T>
 inline T ibeta_inva(T b, T x, T p)
 {
- return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, false);
+ return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, false, policy::policy<>());
 }
 
 template <class T>
 inline T ibetac_inva(T b, T x, T q)
 {
- return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, false);
+ return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, false, policy::policy<>());
 }
 
 template <class T>
 inline T ibeta_invb(T b, T x, T p)
 {
- return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, true);
+ return detail::ibeta_inv_ab_imp(b, x, p, 1 - p, true, policy::policy<>());
 }
 
 template <class T>
 inline T ibetac_invb(T b, T x, T q)
 {
- return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, true);
+ return detail::ibeta_inv_ab_imp(b, x, 1 - q, q, true, policy::policy<>());
 }
 
 } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inverse.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inverse.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/detail/ibeta_inverse.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -51,8 +51,8 @@
 // Journal of Computation and Applied Mathematics 41 (1992) 145-157.
 // Section 2.
 //
-template <class T>
-T temme_method_1_ibeta_inverse(T a, T b, T z)
+template <class T, class Policy>
+T temme_method_1_ibeta_inverse(T a, T b, T z, const Policy& pol)
 {
    using namespace std; // ADL of std names
 
@@ -61,7 +61,7 @@
    // get the first approximation for eta from the inverse
    // error function (Eq: 2.9 and 2.10).
    //
- T eta0 = boost::math::erfc_inv(2 * z);
+ T eta0 = boost::math::erfc_inv(2 * z, pol);
    eta0 /= -sqrt(a / 2);
 
    T terms[4] = { eta0 };
@@ -129,8 +129,8 @@
 // Journal of Computation and Applied Mathematics 41 (1992) 145-157.
 // Section 3.
 //
-template <class T>
-T temme_method_2_ibeta_inverse(T /*a*/, T /*b*/, T z, T r, T theta)
+template <class T, class Policy>
+T temme_method_2_ibeta_inverse(T /*a*/, T /*b*/, T z, T r, T theta, const Policy& pol)
 {
    using namespace std; // ADL of std names
 
@@ -138,7 +138,7 @@
    // Get first estimate for eta, see Eq 3.9 and 3.10,
    // but note there is a typo in Eq 3.10:
    //
- T eta0 = boost::math::erfc_inv(2 * z);
+ T eta0 = boost::math::erfc_inv(2 * z, pol);
    eta0 /= -sqrt(r / 2);
 
    T s = sin(theta);
@@ -295,7 +295,7 @@
    // And iterate:
    //
    x = tools::newton_raphson_iterate(
- temme_root_finder<T>(-lu, alpha), x, lower, upper, tools::digits<T>() / 2);
+ temme_root_finder<T>(-lu, alpha), x, lower, upper, policy::digits<T, Policy>() / 2);
 
    return x;
 }
@@ -306,8 +306,8 @@
 // Journal of Computation and Applied Mathematics 41 (1992) 145-157.
 // Section 4.
 //
-template <class T>
-T temme_method_3_ibeta_inverse(T a, T b, T p, T q)
+template <class T, class Policy>
+T temme_method_3_ibeta_inverse(T a, T b, T p, T q, const Policy& pol)
 {
    using namespace std; // ADL of std names
 
@@ -317,9 +317,9 @@
    //
    T eta0;
    if(p < q)
- eta0 = boost::math::gamma_q_inv(b, p);
+ eta0 = boost::math::gamma_q_inv(b, p, pol);
    else
- eta0 = boost::math::gamma_p_inv(b, q);
+ eta0 = boost::math::gamma_p_inv(b, q, pol);
    eta0 /= a;
    //
    // Define the variables and powers we'll need later on:
@@ -398,14 +398,14 @@
    T upper = eta < mu ? 1 : cross;
    T x = (lower + upper) / 2;
    x = tools::newton_raphson_iterate(
- temme_root_finder<T>(u, mu), x, lower, upper, tools::digits<T>() / 2);
+ temme_root_finder<T>(u, mu), x, lower, upper, policy::digits<T, Policy>() / 2);
 #ifdef BOOST_INSTRUMENT
    std::cout << "Estimating x with Temme method 3: " << x << std::endl;
 #endif
    return x;
 }
 
-template <class T, class L>
+template <class T, class Policy>
 struct ibeta_roots
 {
    ibeta_roots(T _a, T _b, T t, bool inv = false)
@@ -419,7 +419,7 @@
       
       T f1;
       T y = 1 - x;
- T f = ibeta_imp(a, b, x, L(), invert, true, &f1) - target;
+ T f = ibeta_imp(a, b, x, Policy(), invert, true, &f1) - target;
       if(invert)
          f1 = -f1;
       if(y == 0)
@@ -444,8 +444,8 @@
    bool invert;
 };
 
-template <class T, class L>
-T ibeta_inv_imp(T a, T b, T p, T q, const L& l, T* py)
+template <class T, class Policy>
+T ibeta_inv_imp(T a, T b, T p, T q, const Policy& pol, T* py)
 {
    using namespace std; // For ADL of math functions.
 
@@ -497,7 +497,7 @@
    {
       //
       // We have a Student's T distribution:
- x = estimate_ibeta_inv_from_t_dist(a, p, q, &y, l);
+ x = estimate_ibeta_inv_from_t_dist(a, p, q, &y, pol);
    }
    else if(a + b > 5)
    {
@@ -525,7 +525,7 @@
          // for x will never be much larger than p, so we don't have
          // to worry about cancellation as long as p is small.
          //
- x = temme_method_1_ibeta_inverse(a, b, p);
+ x = temme_method_1_ibeta_inverse(a, b, p, pol);
          y = 1 - x;
       }
       else
@@ -546,10 +546,10 @@
             T ppa = pow(p, 1/a);
             if((ppa < 0.0025) && (a + b < 200))
             {
- x = ppa * pow(a * boost::math::beta(a, b), 1/a);
+ x = ppa * pow(a * boost::math::beta(a, b, pol), 1/a);
             }
             else
- x = temme_method_2_ibeta_inverse(a, b, p, r, theta);
+ x = temme_method_2_ibeta_inverse(a, b, p, r, theta, pol);
             y = 1 - x;
          }
          else
@@ -574,7 +574,7 @@
             //
             T bet = 0;
             if(b < 2)
- bet = boost::math::beta(a, b);
+ bet = boost::math::beta(a, b, pol);
             if(bet != 0)
             {
                y = pow(b * q * bet, 1/b);
@@ -584,7 +584,7 @@
                y = 1;
             if(y > 1e-5)
             {
- x = temme_method_3_ibeta_inverse(a, b, p, q);
+ x = temme_method_3_ibeta_inverse(a, b, p, q, pol);
                y = 1 - x;
             }
          }
@@ -601,7 +601,7 @@
       // Now we need to ensure that we start our iteration from the
       // right side of the inflection point:
       //
- T fs = boost::math::ibeta(a, b, xs) - p;
+ T fs = boost::math::ibeta(a, b, xs, pol) - p;
       if(fabs(fs) / p < tools::epsilon<T>() * 3)
       {
          // The result is at the point of inflection, best just return it:
@@ -615,7 +615,7 @@
          invert = true;
          xs = 1 - xs;
       }
- T xg = pow(a * p * boost::math::beta(a, b), 1/a);
+ T xg = pow(a * p * boost::math::beta(a, b, pol), 1/a);
       x = xg / (1 + xg);
       y = 1 / (1 + xg);
       //
@@ -637,7 +637,7 @@
       //
       T xs = (a - 1) / (a + b - 2);
       T xs2 = (b - 1) / (a + b - 2);
- T ps = boost::math::ibeta(a, b, xs) - p;
+ T ps = boost::math::ibeta(a, b, xs, pol) - p;
 
       if(ps < 0)
       {
@@ -650,9 +650,9 @@
       // Estimate x and y, using expm1 to get a good estimate
       // for y when it's very small:
       //
- T lx = log(p * a * boost::math::beta(a, b)) / a;
+ T lx = log(p * a * boost::math::beta(a, b, pol)) / a;
       x = exp(lx);
- y = x < 0.9 ? 1 - x : -boost::math::expm1(lx);
+ y = x < 0.9 ? 1 - x : -boost::math::expm1(lx, pol);
 
       if((b < a) && (x < 0.2))
       {
@@ -712,7 +712,7 @@
       }
       if(pow(p, 1/a) < 0.5)
       {
- x = pow(p * a * boost::math::beta(a, b), 1 / a);
+ x = pow(p * a * boost::math::beta(a, b, pol), 1 / a);
          if(x == 0)
             x = boost::math::tools::min_value<T>();
          y = 1 - x;
@@ -720,7 +720,7 @@
       else /*if(pow(q, 1/b) < 0.1)*/
       {
          // model a distorted quarter circle:
- y = pow(1 - pow(p, b*beta(a, b)), 1/b);
+ y = pow(1 - pow(p, b * boost::math::beta(a, b, pol)), 1/b);
          if(y == 0)
             y = boost::math::tools::min_value<T>();
          x = 1 - y;
@@ -768,7 +768,7 @@
    //
    // Figure out how many digits to iterate towards:
    //
- int digits = boost::math::tools::digits<T>() / 2;
+ int digits = boost::math::policy::digits<T, Policy>() / 2;
    if((x < 1e-50) && ((a < 1) || (b < 1)))
    {
       //
@@ -788,7 +788,7 @@
    // depending on which is smaller:
    //
    x = boost::math::tools::halley_iterate(
- boost::math::detail::ibeta_roots<T, L>(a, b, (p < q ? p : q), (p < q ? false : true)), x, lower, upper, digits);
+ boost::math::detail::ibeta_roots<T, Policy>(a, b, (p < q ? p : q), (p < q ? false : true)), x, lower, upper, digits);
    //
    // We don't really want these asserts here, but they are useful for sanity
    // checking that we have the limits right, uncomment if you suspect bugs *only*.
@@ -807,21 +807,27 @@
 
 } // namespace detail
 
-template <class T1, class T2, class T3, class T4>
+template <class T1, class T2, class T3, class T4, class Policy>
 inline typename tools::promote_args<T1, T2, T3, T4>::type
- ibeta_inv(T1 a, T2 b, T3 p, T4* py)
+ ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol)
 {
+ static const char* function = "boost::math::ibeta_inv<%1%>(%1%,%1%,%1%)";
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2, T3, T4>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
    if(a <= 0)
- return tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a);
+ return policy::raise_domain_error<result_type>(function, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- return tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b);
+ return policy::raise_domain_error<result_type>(function, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b, pol);
    if((p < 0) || (p > 1))
- return tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "Argument p outside the range [0,1] in the incomplete beta function inverse (got p=%1%).", p);
+ return policy::raise_domain_error<result_type>(function, "Argument p outside the range [0,1] in the incomplete beta function inverse (got p=%1%).", p, pol);
 
    value_type rx, ry;
 
@@ -830,10 +836,17 @@
          static_cast<value_type>(b),
          static_cast<value_type>(p),
          static_cast<value_type>(1 - p),
- evaluation_type(), &ry);
+ forwarding_policy(), &ry);
 
- if(py) *py = tools::checked_narrowing_cast<T4>(ry, BOOST_CURRENT_FUNCTION);
- return tools::checked_narrowing_cast<result_type>(rx, BOOST_CURRENT_FUNCTION);
+ if(py) *py = policy::checked_narrowing_cast<T4, forwarding_policy>(ry, function);
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(rx, function);
+}
+
+template <class T1, class T2, class T3, class T4>
+inline typename tools::promote_args<T1, T2, T3, T4>::type
+ ibeta_inv(T1 a, T2 b, T3 p, T4* py)
+{
+ return ibeta_inv(a, b, p, py, policy::policy<>());
 }
 
 template <class T1, class T2, class T3>
@@ -841,24 +854,30 @@
    ibeta_inv(T1 a, T2 b, T3 p)
 {
    BOOST_FPU_EXCEPTION_GUARD
- return ibeta_inv(a, b, p, static_cast<T1*>(0));
+ return ibeta_inv(a, b, p, static_cast<T1*>(0), policy::policy<>());
 }
 
-template <class T1, class T2, class T3, class T4>
+template <class T1, class T2, class T3, class T4, class Policy>
 inline typename tools::promote_args<T1, T2, T3, T4>::type
- ibetac_inv(T1 a, T2 b, T3 q, T4* py)
+ ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol)
 {
+ static const char* function = "boost::math::ibetac_inv<%1%>(%1%,%1%,%1%)";
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2, T3, T4>::type result_type;
- typedef typename lanczos::lanczos_traits<result_type>::value_type value_type;
- typedef typename lanczos::lanczos_traits<result_type>::evaluation_type evaluation_type;
+ typedef typename policy::evaluation<result_type, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
    if(a <= 0)
- tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a);
+ policy::raise_domain_error<result_type>(function, "The argument a to the incomplete beta function inverse must be greater than zero (got a=%1%).", a, pol);
    if(b <= 0)
- tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b);
+ policy::raise_domain_error<result_type>(function, "The argument b to the incomplete beta function inverse must be greater than zero (got b=%1%).", b, pol);
    if((q < 0) || (q > 1))
- tools::domain_error<result_type>(BOOST_CURRENT_FUNCTION, "Argument q outside the range [0,1] in the incomplete beta function inverse (got q=%1%).", q);
+ policy::raise_domain_error<result_type>(function, "Argument q outside the range [0,1] in the incomplete beta function inverse (got q=%1%).", q, pol);
 
    value_type rx, ry;
 
@@ -867,18 +886,24 @@
          static_cast<value_type>(b),
          static_cast<value_type>(1 - q),
          static_cast<value_type>(q),
- evaluation_type(), &ry);
+ forwarding_policy(), &ry);
+
+ if(py) *py = policy::checked_narrowing_cast<T4, forwarding_policy>(ry, function);
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(rx, function);
+}
 
- if(py) *py = tools::checked_narrowing_cast<T4>(ry, BOOST_CURRENT_FUNCTION);
- return tools::checked_narrowing_cast<result_type>(rx, BOOST_CURRENT_FUNCTION);
+template <class T1, class T2, class T3, class T4>
+inline typename tools::promote_args<T1, T2, T3, T4>::type
+ ibetac_inv(T1 a, T2 b, T3 q, T4* py)
+{
+ return ibetac_inv(a, b, q, py, policy::policy<>());
 }
 
 template <class RT1, class RT2, class RT3>
 inline typename tools::promote_args<RT1, RT2, RT3>::type
    ibetac_inv(RT1 a, RT2 b, RT3 q)
 {
- BOOST_FPU_EXCEPTION_GUARD
- return ibetac_inv(a, b, q, static_cast<RT1*>(0));
+ return ibetac_inv(a, b, q, static_cast<RT1*>(0), policy::policy<>());
 }
 
 } // namespace math

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/detail/igamma_inverse.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/detail/igamma_inverse.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/detail/igamma_inverse.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -292,8 +292,14 @@
       // Calculate P(x) - p and the first two derivates, or if the invert
       // flag is set, then Q(x) - q and it's derivatives.
       //
- typedef typename lanczos::lanczos_traits<T>::value_type value_type;
- typedef typename lanczos::lanczos_traits<T>::evaluation_type evaluation_type;
+ typedef typename policy::evaluation<T, Policy>::type value_type;
+ typedef typename lanczos::lanczos<T, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
       using namespace std; // For ADL of std functions.
 
@@ -303,7 +309,7 @@
                static_cast<value_type>(a),
                static_cast<value_type>(x),
                true, invert,
- Policy(), &ft));
+ forwarding_policy(), &ft));
       f1 = static_cast<T>(ft);
       T f2;
       T div = (a - x - 1) / x;

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/detail/t_distribution_inv.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/detail/t_distribution_inv.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/detail/t_distribution_inv.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -16,8 +16,8 @@
 // G. W. Hill, Algorithm 396, Student’s t-Quantiles,
 // Communications of the ACM, 13(10): 619-620, Oct., 1970.
 //
-template <class T>
-T inverse_students_t_hill(T ndf, T u)
+template <class T, class Policy>
+T inverse_students_t_hill(T ndf, T u, const Policy& pol)
 {
    using namespace std;
    BOOST_ASSERT(u <= 0.5);
@@ -25,7 +25,7 @@
    T a, b, c, d, q, x, y;
 
    if (ndf > 1e20f)
- return -boost::math::erfc_inv(2 * u) * constants::root_two<T>();
+ return -boost::math::erfc_inv(2 * u, pol) * constants::root_two<T>();
 
    a = 1 / (ndf - 0.5f);
    b = 48 / (a * a);
@@ -38,14 +38,14 @@
       //
       // Asymptotic inverse expansion about normal:
       //
- x = -boost::math::erfc_inv(2 * u) * constants::root_two<T>();
+ x = -boost::math::erfc_inv(2 * u, pol) * constants::root_two<T>();
       y = x * x;
 
       if (ndf < 5)
          c += 0.3f * (ndf - 4.5f) * (x + 0.6f);
       c += (((0.05f * d * x - 5) * x - 7) * x - 2) * x + b;
       y = (((((0.4f * y + 6.3f) * y + 36) * y + 94.5f) / c - y - 3) / b + 1) * x;
- y = boost::math::expm1(a * y * y);
+ y = boost::math::expm1(a * y * y, pol);
    }
    else
    {
@@ -66,13 +66,13 @@
 // the inverse cumulative distribution function."
 // Journal of Computational Finance, Vol 9 Issue 4, pp 37-73, Summer 2006
 //
-template <class T, class L>
-T inverse_students_t_tail_series(T df, T v, T u, const L& l)
+template <class T, class Policy>
+T inverse_students_t_tail_series(T df, T v, T u, const Policy& pol)
 {
    using namespace std;
    // Tail series expansion, see section 6 of Shaw's paper.
    // w is calculated using Eq 60:
- T w = detail::tgamma_delta_ratio_imp(df / 2, constants::half<T>(), policy::policy<>())
+ T w = boost::math::tgamma_delta_ratio(df / 2, constants::half<T>(), pol)
       * sqrt(df * constants::pi<T>()) * v;
    // define some variables:
    T np2 = df + 2;
@@ -117,8 +117,8 @@
    return -result;
 }
 
-template <class T, class L>
-T inverse_students_t_body_series(T df, T u, const L& l)
+template <class T, class Policy>
+T inverse_students_t_body_series(T df, T u, const Policy& pol)
 {
    using namespace std;
    //
@@ -126,7 +126,7 @@
    //
    // Start with Eq 56 of Shaw:
    //
- T v = detail::tgamma_delta_ratio_imp(df / 2, constants::half<T>(), policy::policy<>())
+ T v = boost::math::tgamma_delta_ratio(df / 2, constants::half<T>(), pol)
       * sqrt(df * constants::pi<T>()) * (u - constants::half<T>());
    //
    // Workspace for the polynomial coefficients:
@@ -171,8 +171,8 @@
    return tools::evaluate_odd_polynomial(c, v);
 }
 
-template <class T, class L>
-T inverse_students_t(T df, T u, T v, const L& l, bool* pexact = 0)
+template <class T, class Policy>
+T inverse_students_t(T df, T u, T v, const Policy& pol, bool* pexact = 0)
 {
    //
    // df = number of degrees of freedom.
@@ -207,8 +207,6 @@
             // df = 1 is the same as the Cauchy distribution, see
             // Shaw Eq 35:
             //
- // FIXME: fails when u is small!!!
- result = tan(constants::pi<T>() * (u - constants::half<T>()));
             if(u == 0.5)
                result = 0;
             else
@@ -247,7 +245,7 @@
             // We get numeric overflow in this area:
             //
             if(u < 1e-150)
- return (invert ? -1 : 1) * inverse_students_t_hill(df, u);
+ return (invert ? -1 : 1) * inverse_students_t_hill(df, u, pol);
             //
             // Newton-Raphson iteration of a polynomial case,
             // choice of seed value is taken from Shaw's online
@@ -351,11 +349,11 @@
          T crossover = 0.2742f - df * 0.0242143f;
          if(u > crossover)
          {
- result = boost::math::detail::inverse_students_t_body_series(df, u, l);
+ result = boost::math::detail::inverse_students_t_body_series(df, u, pol);
          }
          else
          {
- result = boost::math::detail::inverse_students_t_tail_series(df, u, v, l);
+ result = boost::math::detail::inverse_students_t_tail_series(df, u, v, pol);
          }
       }
       else
@@ -368,31 +366,31 @@
          T crossover = ldexp(1.0f, tools::real_cast<int>(df / -0.654f));
          if(u > crossover)
          {
- result = boost::math::detail::inverse_students_t_hill(df, u);
+ result = boost::math::detail::inverse_students_t_hill(df, u, pol);
          }
          else
          {
- result = boost::math::detail::inverse_students_t_tail_series(df, u, v, l);
+ result = boost::math::detail::inverse_students_t_tail_series(df, u, v, pol);
          }
       }
    }
    return invert ? -result : result;
 }
 
-template <class T, class L>
-inline T estimate_ibeta_inv_from_t_dist(T a, T p, T q, T* py, const L& l)
+template <class T, class Policy>
+inline T estimate_ibeta_inv_from_t_dist(T a, T p, T q, T* py, const Policy& pol)
 {
    T u = (p > q) ? 0.5f - q / 2 : p / 2;
    T v = 1 - u; // u < 0.5 so no cancellation error
    T df = a * 2;
- T t = boost::math::detail::inverse_students_t(df, u, v, l);
+ T t = boost::math::detail::inverse_students_t(df, u, v, pol);
    T x = df / (df + t * t);
    *py = t * t / (df + t * t);
    return x;
 }
 
-template <class T, class L>
-inline T fast_students_t_quantile_imp(T df, T p, const L& l, const mpl::false_*)
+template <class T, class Policy>
+inline T fast_students_t_quantile_imp(T df, T p, const Policy& pol, const mpl::false_*)
 {
    using namespace std;
    //
@@ -401,9 +399,9 @@
    //
    T probability = (p > 0.5) ? 1 - p : p;
    T t, x, y;
- x = ibeta_inv(df / 2, T(0.5), 2 * probability, &y);
+ x = ibeta_inv(df / 2, T(0.5), 2 * probability, &y, pol);
    if(df * y > tools::max_value<T>() * x)
- t = tools::overflow_error<T>(BOOST_CURRENT_FUNCTION);
+ t = policy::raise_overflow_error<T>("boost::math::students_t_quantile<%1%>(%1%,%1%)", 0, pol);
    else
       t = sqrt(df * y / x);
    //
@@ -414,13 +412,13 @@
    return t;
 }
 
-template <class T, class L>
-T fast_students_t_quantile_imp(T df, T p, const L& l, const mpl::true_*)
+template <class T, class Policy>
+T fast_students_t_quantile_imp(T df, T p, const Policy& pol, const mpl::true_*)
 {
    using namespace std;
    bool invert = false;
    if((df < 2) && (floor(df) != df))
- return boost::math::detail::fast_students_t_quantile_imp(df, p, l, static_cast<mpl::false_*>(0));
+ return boost::math::detail::fast_students_t_quantile_imp(df, p, pol, static_cast<mpl::false_*>(0));
    if(p > 0.5)
    {
       p = 1 - p;
@@ -430,7 +428,7 @@
    // Get an estimate of the result:
    //
    bool exact;
- T t = inverse_students_t(df, p, 1-p, l, &exact);
+ T t = inverse_students_t(df, p, 1-p, pol, &exact);
    if((t == 0) || exact)
       return invert ? -t : t; // can't do better!
    //
@@ -450,8 +448,8 @@
    // Get incomplete beta and it's derivative:
    //
    T f1;
- T f0 = xb < y ? ibeta_imp(a, constants::half<T>(), xb, l, false, true, &f1)
- : ibeta_imp(constants::half<T>(), a, y, l, true, true, &f1);
+ T f0 = xb < y ? ibeta_imp(a, constants::half<T>(), xb, pol, false, true, &f1)
+ : ibeta_imp(constants::half<T>(), a, y, pol, true, true, &f1);
 
    // Get cdf from incomplete beta result:
    T p0 = f0 / 2 - p;
@@ -485,16 +483,22 @@
    return !invert ? -t : t;
 }
 
-template <class T>
-inline T fast_students_t_quantile(T df, T p)
+template <class T, class Policy>
+inline T fast_students_t_quantile(T df, T p, const Policy& pol)
 {
- typedef typename lanczos::lanczos_traits<T>::value_type value_type;
- typedef typename lanczos::lanczos_traits<T>::evaluation_type evaluation_type;
+ typedef typename policy::evaluation<T, Policy>::type value_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
    typedef mpl::bool_<
       (std::numeric_limits<T>::digits <= 53)
        &&
       (std::numeric_limits<T>::is_specialized)> tag_type;
- return tools::checked_narrowing_cast<T>(fast_students_t_quantile_imp(static_cast<value_type>(df), static_cast<value_type>(p), evaluation_type(), static_cast<tag_type*>(0)), BOOST_CURRENT_FUNCTION);
+ return policy::checked_narrowing_cast<T, forwarding_policy>(fast_students_t_quantile_imp(static_cast<value_type>(df), static_cast<value_type>(p), pol, static_cast<tag_type*>(0)), "boost::math::students_t_quantile<%1%>(%1%,%1%,%1%)");
 }
 
 }}} // namespaces

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/erf.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/erf.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/erf.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -742,6 +742,12 @@
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
    typedef typename policy::precision<result_type, Policy>::type precision_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
    typedef typename mpl::if_<
       mpl::less_equal<precision_type, mpl::int_<0> >,
@@ -761,10 +767,10 @@
>::type
>::type tag_type;
 
- return tools::checked_narrowing_cast<result_type>(detail::erf_imp(
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::erf_imp(
       static_cast<value_type>(z),
       false,
- pol,
+ forwarding_policy(),
       tag_type()), "boost::math::erf<%1%>(%1%, %1%)");
 }
 
@@ -774,6 +780,12 @@
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
    typedef typename policy::precision<result_type, Policy>::type precision_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
    typedef typename mpl::if_<
       mpl::less_equal<precision_type, mpl::int_<0> >,
@@ -793,10 +805,10 @@
>::type
>::type tag_type;
 
- return tools::checked_narrowing_cast<result_type>(detail::erf_imp(
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::erf_imp(
       static_cast<value_type>(z),
       true,
- pol,
+ forwarding_policy(),
       tag_type()), "boost::math::erfc<%1%>(%1%, %1%)");
 }
 

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/expm1.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/expm1.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/expm1.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -191,6 +191,12 @@
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
    typedef typename policy::precision<result_type, Policy>::type precision_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
    typedef typename mpl::if_c<
       ::std::numeric_limits<result_type>::is_specialized == 0,
@@ -210,9 +216,9 @@
>::type
>::type tag_type;
 
- return tools::checked_narrowing_cast<result_type>(detail::expm1_imp(
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::expm1_imp(
       static_cast<value_type>(x),
- tag_type(), pol), BOOST_CURRENT_FUNCTION);
+ tag_type(), forwarding_policy()), BOOST_CURRENT_FUNCTION);
 }
 
 #ifdef expm1

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/gamma.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/gamma.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/gamma.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -1137,8 +1137,14 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(detail::gamma_imp(static_cast<value_type>(z), pol, evaluation_type()), "boost::math::tgamma<%1%>(%1%)");
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::gamma_imp(static_cast<value_type>(z), forwarding_policy(), evaluation_type()), "boost::math::tgamma<%1%>(%1%)");
 }
 
 template <class T1, class T2, class Policy>
@@ -1148,11 +1154,17 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(
       detail::gamma_incomplete_imp(static_cast<value_type>(a),
       static_cast<value_type>(z), false, true,
- pol, static_cast<value_type*>(0)), "boost::math::tgamma<%1%>(%1%, %1%)");
+ forwarding_policy(), static_cast<value_type*>(0)), "boost::math::tgamma<%1%>(%1%, %1%)");
 }
 
 template <class T1, class T2>
@@ -1178,8 +1190,14 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(detail::lgamma_imp(static_cast<value_type>(z), pol, evaluation_type(), sign), "boost::math::lgamma<%1%>(%1%)");
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::lgamma_imp(static_cast<value_type>(z), forwarding_policy(), evaluation_type(), sign), "boost::math::lgamma<%1%>(%1%)");
 }
 
 template <class T>
@@ -1210,9 +1228,15 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
 
- return policy::checked_narrowing_cast<typename remove_cv<result_type>::type, Policy>(detail::tgammap1m1_imp(static_cast<value_type>(z), pol, evaluation_type()), "boost::math::tgamma1pm1<%!%>(%1%)");
+ return policy::checked_narrowing_cast<typename remove_cv<result_type>::type, forwarding_policy>(detail::tgammap1m1_imp(static_cast<value_type>(z), forwarding_policy(), evaluation_type()), "boost::math::tgamma1pm1<%!%>(%1%)");
 }
 
 template <class T>
@@ -1252,11 +1276,18 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(
       detail::gamma_incomplete_imp(static_cast<value_type>(a),
       static_cast<value_type>(z), false, false,
- pol, static_cast<value_type*>(0)), "tgamma_lower<%1%>(%1%, %1%)");
+ forwarding_policy(), static_cast<value_type*>(0)), "tgamma_lower<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type
@@ -1274,11 +1305,18 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(
       detail::gamma_incomplete_imp(static_cast<value_type>(a),
       static_cast<value_type>(z), true, true,
- pol, static_cast<value_type*>(0)), "gamma_q<%1%>(%1%, %1%)");
+ forwarding_policy(), static_cast<value_type*>(0)), "gamma_q<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type
@@ -1296,11 +1334,18 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- typedef typename lanczos::lanczos<result_type, Policy>::type evaluation_type;
- return policy::checked_narrowing_cast<result_type, Policy>(
+ typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(
       detail::gamma_incomplete_imp(static_cast<value_type>(a),
       static_cast<value_type>(z), true, false,
- pol, static_cast<value_type*>(0)), "gamma_p<%1%>(%1%, %1%)");
+ forwarding_policy(), static_cast<value_type*>(0)), "gamma_p<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type
@@ -1317,7 +1362,14 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- return policy::checked_narrowing_cast<result_type, Policy>(detail::tgamma_delta_ratio_imp(static_cast<value_type>(z), static_cast<value_type>(delta), pol), "boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)");
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::tgamma_delta_ratio_imp(static_cast<value_type>(z), static_cast<value_type>(delta), forwarding_policy()), "boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type
@@ -1331,7 +1383,14 @@
 {
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- return policy::checked_narrowing_cast<result_type, Policy>(detail::tgamma_delta_ratio_imp(static_cast<value_type>(a), static_cast<value_type>(b) - static_cast<value_type>(a), pol), "boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)");
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::tgamma_delta_ratio_imp(static_cast<value_type>(a), static_cast<value_type>(b) - static_cast<value_type>(a), forwarding_policy()), "boost::math::tgamma_delta_ratio<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type
@@ -1347,7 +1406,14 @@
    BOOST_FPU_EXCEPTION_GUARD
    typedef typename tools::promote_args<T1, T2>::type result_type;
    typedef typename policy::evaluation<result_type, Policy>::type value_type;
- return policy::checked_narrowing_cast<result_type, Policy>(detail::gamma_p_derivative_imp(static_cast<value_type>(a), static_cast<value_type>(x), pol), "boost::math::gamma_p_derivative<%1%>(%1%, %1%)");
+ typedef typename policy::normalise<
+ Policy,
+ policy::promote_float<false>,
+ policy::promote_double<false>,
+ policy::discrete_quantile<>,
+ policy::assert_undefined<> >::type forwarding_policy;
+
+ return policy::checked_narrowing_cast<result_type, forwarding_policy>(detail::gamma_p_derivative_imp(static_cast<value_type>(a), static_cast<value_type>(x), forwarding_policy()), "boost::math::gamma_p_derivative<%1%>(%1%, %1%)");
 }
 template <class T1, class T2>
 inline typename tools::promote_args<T1, T2>::type

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/lanczos.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/lanczos.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/lanczos.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -1286,9 +1286,9 @@
 
 typedef mpl::list<
    lanczos6m24,
- lanczos6,
+/* lanczos6, */
    lanczos13m53,
- lanczos13,
+/* lanczos13, */
    lanczos17m64,
    lanczos24m113,
    lanczos22,

Modified: sandbox/math_toolkit/policy/boost/math/special_functions/math_fwd.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/special_functions/math_fwd.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/special_functions/math_fwd.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -32,14 +32,18 @@
    typename tools::promote_args<RT1, RT2>::type
          beta(RT1 a, RT2 b); // Beta function (2 arguments).
 
- template <class RT1, class RT2, class RT3>
- typename tools::promote_args<RT1, RT2, RT3>::type
- beta(RT1 a, RT2 b, RT3 x); // Beta function (3 arguments).
+ template <class RT1, class RT2, class A>
+ typename tools::promote_args<RT1, RT2, A>::type
+ beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).
 
    template <class RT1, class RT2, class RT3>
    typename tools::promote_args<RT1, RT2, RT3>::type
          betac(RT1 a, RT2 b, RT3 x);
 
+ template <class RT1, class RT2, class RT3, class Policy>
+ inline typename tools::promote_args<RT1, RT2, RT3>::type
+ beta(RT1 a, RT2 b, RT3 x, const Policy&);
+
    template <class RT1, class RT2, class RT3>
    typename tools::promote_args<RT1, RT2, RT3>::type
          ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.

Modified: sandbox/math_toolkit/policy/boost/math/tools/ntl.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/tools/ntl.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/tools/ntl.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -11,6 +11,7 @@
 #include <boost/math/tools/real_cast.hpp>
 #include <boost/math/tools/precision.hpp>
 #include <boost/math/constants/constants.hpp>
+#include <boost/math/policy/policy.hpp>
 
 namespace NTL
 {
@@ -177,6 +178,22 @@
 
 } // namespace tools
 
+namespace policy{
+
+template<>
+inline int digits<NTL::RR, boost::math::policy::policy<> >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(NTL::RR))
+{
+ return NTL::RR::precision();
+}
+
+template<>
+inline int digits<NTL::RR, boost::math::policy::policy<boost::math::policy::detail::forwarding_arg1, boost::math::policy::detail::forwarding_arg2> >(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(NTL::RR))
+{
+ return NTL::RR::precision();
+}
+
+}
+
 //
 // The number of digits precision in RR can vary with each call
 // so we need to recalculate these with each call:

Modified: sandbox/math_toolkit/policy/boost/math/tools/toms748_solve.hpp
==============================================================================
--- sandbox/math_toolkit/policy/boost/math/tools/toms748_solve.hpp (original)
+++ sandbox/math_toolkit/policy/boost/math/tools/toms748_solve.hpp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -55,6 +55,17 @@
    }
 };
 
+struct equal_nearest_integer
+{
+ equal_nearest_integer(){}
+ template <class T>
+ bool operator()(const T& a, const T& b)
+ {
+ using namespace std;
+ return floor(a + 0.5f) == floor(b + 0.5f);
+ }
+};
+
 namespace detail{
 
 template <class F, class T>
@@ -275,6 +286,17 @@
          "Parameters a and b out of order: a=%1%", a, pol);
    fa = fax;
    fb = fbx;
+
+ if(tol(a, b) || (fa == 0) || (fb == 0))
+ {
+ max_iter = 0;
+ if(fa == 0)
+ b = a;
+ else if(fb == 0)
+ a = b;
+ return std::make_pair(a, b);
+ }
+
    if(boost::math::sign(fa) * boost::math::sign(fb) > 0)
       policy::raise_domain_error(
          BOOST_CURRENT_FUNCTION,
@@ -292,7 +314,7 @@
       --count;
       BOOST_MATH_INSTRUMENT_CODE(" a = " << a << " b = " << b);
 
- if(count && (fa != 0))
+ if(count && (fa != 0) && !tol(a, b))
       {
          //
          // On the second step we take a quadratic interpolation:

Modified: sandbox/math_toolkit/policy/libs/math/test/Jamfile.v2
==============================================================================
--- sandbox/math_toolkit/policy/libs/math/test/Jamfile.v2 (original)
+++ sandbox/math_toolkit/policy/libs/math/test/Jamfile.v2 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -56,6 +56,7 @@
 run test_minima.cpp ;
 run test_negative_binomial.cpp ;
 run test_normal.cpp ;
+run test_pareto.cpp ;
 run test_poisson.cpp ;
 run test_rayleigh.cpp ;
 run test_rationals.cpp test_rational_float.cpp test_rational_double.cpp test_rational_ldouble.cpp ;
@@ -161,3 +162,5 @@
 
 
 
+
+

Added: sandbox/math_toolkit/policy/libs/math/test/binomial_quantile.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/policy/libs/math/test/binomial_quantile.ipp 2007-07-12 11:57:07 EDT (Thu, 12 Jul 2007)
@@ -0,0 +1,4037 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 5>, 4032> binomial_quantile_data = {{
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0), SC_(0.28467385230321224203411154382440248724380832183117) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0), SC_(0.25727865882740919932840773421531232758964168093055) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0), SC_(0.035694410305790976496105074803969225386555435216338) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(0.11873939407970113038114981488058971337236924303007), SC_(0) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(0.17128223695871555977493584741313475336874139582588), SC_(0) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(0.40618092349808500975883593147831009145063213747834), SC_(0) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(0.43899397179953045991755739555886582435275603281127), SC_(0) },
+ { SC_(2), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(0.799870552103486022724664124290614736962329408812), SC_(0) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0), SC_(0.31872738789970909485536768848150766202976148899251) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0), SC_(0.29102994230646182726533783572628827290811626372966) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0), SC_(0.066564891771854913273348344758795546234545331752506) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(0.15078204185386621729912132630692143434650445884609), SC_(0) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(0.20400864316514337235281173322687950297863712869268), SC_(0) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(0.44143516661223776441613153671576118711196945856282), SC_(0) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(0.47453330316861439745293287393350226948540566881404), SC_(0) },
+ { SC_(2), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(0.83739716340650425258932397703845268032687863038399), SC_(0) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(0), SC_(0.62037836131298603609519052823209625564881710064378) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(0), SC_(0.59093627733744182629509254823619511720015775666619) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(0), SC_(0.34807449373182945948809948184050473370388203786438) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(0.44009477935063047177182669621147331809907557267519), SC_(0) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(0.49769020155560349641877333505982794296467077593034), SC_(0) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(0.74944500698304949182235362474586290610889103220154), SC_(0) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(0.78387321971706370473245717801953625642542459567953), SC_(0) },
+ { SC_(2), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(1.1498981366557770839693825192073836593340168170678), SC_(0) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(0.49788422454509726888212532584283407165868239438731), SC_(1.7926192943764322245525372122405254834085320140091) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(0.52684446645645143763351083479730514213286478982046), SC_(1.7800376961833357223696231469588443580528305056426) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(0.76404470698225093423433928273194254681576983826729), SC_(1.6575789550348265198775169987571194771809264616601) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(1.7079778135930259197017395920782252633535682554395), SC_(0.67451997209260747234500120079260379985847433758707) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(1.7370140616146297876215882640682879489503844226303), SC_(0.61826978524366906854726038797379514512007309468525) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(1.8422676954366467819691658272374144020837995309592), SC_(0.37038562663058272269915604803279695742811766811068) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(1.8540370189939540680880864847938744361486513005951), SC_(0.33622087984946386620856678308455255506401496039699) },
+ { SC_(2), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(1.9445446166763026262975190991518462099527425413065), SC_(0) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(0.56958071116299011326336908222173795424895818167301), SC_(1.8137304876186701320041037003716921955178542458777) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(0.5981209280634265150735741168005063416283431515107), SC_(1.8021715458778761995268427585444094026357861343759) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(0.83090525438122511558400411768603959990549654637303), SC_(1.6886385783899505992169862804407221877862974299577) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(1.7355710512108993168349123864726150726576737171558), SC_(0.74325147999645043591309459835699081406440836189148) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(1.7624843207443737418084928974357752849439279812566), SC_(0.68804994566426817141775845555990924647720468985401) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(1.8591104224011548582974193339913952604895234253212), SC_(0.44361740870722582924969757610991167298608216875062) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(1.8698085272287528501704175046677138004183965889567), SC_(0.40977531663720771089918606908851370822175913476053) },
+ { SC_(2), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(1.9511576367649285600816205566246603680285988358087), SC_(0.04270968378107433525053371598152689901997251726038) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(0.85726514749037069310481801247489294724056715593457), SC_(1.8804012228077026734797789762290784583931682768768) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(0.88317282091352864079844947551166117006159739583613), SC_(1.8724468451410620279960951785191670507195296736355) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(1.0910330409403430891037561412815026317636099593003), SC_(1.7917361917429781245858890856792542281128619769022) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(1.8256368040155375748945733586742605410385625353702), SC_(1.0134903208545149583207088570984469685131364451052) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(1.8447459049829273901888950923074855808716795544247), SC_(0.96420439216641466386114172651122642007725184484882) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(1.9110961325206285706348172771253849974988114040724), SC_(0.74181276998520831022621554064240699221049217515329) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(1.9182016049508608107144693813859479953781777592049), SC_(0.71048287939882036081575390191907931744136876928891) },
+ { SC_(2), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(1.9704054870490370002358180573372532707004531569272), SC_(0.36148284689566546008465068509644207578794848416303) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(0.89304497468867083816771394620213863419351236317246), SC_(1.8870232605851419470398115356711266643254699771051) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(0.91851945191911824076604443011738717499646726916982), SC_(1.8794600719495634932055235107252033034069412489192) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(1.1224843497731917039711130632336027140465423975867), SC_(1.8024497787541843720192470688348029663403440451005) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(1.83485221156906006833275716665342524466131493622), SC_(1.0464844000705148022237920054031962146037112159275) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(1.8530821242970069710452437452965833721890011728762), SC_(0.99812279051607284064880069674044726059897838816945) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(1.916157535857756708867513265885680286333674160506), SC_(0.77938820736848709904568261768475993485626028602912) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(1.9228895086526470247831260416402280392514808687008), SC_(0.74850804304125107192927556102838634718019846833922) },
+ { SC_(2), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(1.9721908607758403884646499241470186512990610404954), SC_(0.40343052762669687946310568011982924189671555341509) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(1.219201450126183079318676263646153854601579006327), SC_(1.9350373809079666836999431876137104944574428624569) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(1.2396148960321004151359986179895006135495084676892), SC_(1.9304973628928072264207215026173314973900010140732) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(1.3999337004234246540631799267105791681544589227942), SC_(1.8830751425475383580386501751033238159943302559557) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(1.9032845197351552805024834424312366828109880544359), SC_(1.3408612705720849488466007423034897969311893922241) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(1.914493646816680323502341300602515574175713346603), SC_(1.3028550425520181746307970074911468699561794578722) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(1.9523148075028214318426363845910557072771253778725), SC_(1.1271112472563136150093623218081584509971585071423) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(1.9562579226009881088210671421944586716867895152512), SC_(1.1018080012426695411192973371485245069943322457214) },
+ { SC_(2), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(1.9845388981027882440443564122236200930250308142901), SC_(0.81086993731498529375959228825686023902845921423536) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0), SC_(0.98623278039249983055367190826649550767964102350066) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0), SC_(0.94751865114509654788699818254669665586168646980629) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0), SC_(0.63435737469237153077636493055394066544839817811588) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(0.75180331636922892930414680942120817288497273719322), SC_(0) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(0.82603778851222148995690317375710549667980365212588), SC_(0) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(1.1581874398122557751430288786976914445338371286637), SC_(0) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(1.2047260115460347237384722365368913393827499369116), SC_(0) },
+ { SC_(5), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(1.7222813467832163936085179872509517305850813908258), SC_(0) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0), SC_(1.0536616398767741175571384251069263904563260329049) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0), SC_(1.0143389872728294158583141289706818563116343122007) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0), SC_(0.69577346685700638510895765169789898304376204545473) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(0.81535057424234387885782011768010296348911856823941), SC_(0) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(0.89086613998938100916999942884599995479582130021435), SC_(0) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(1.2281721288812144259762950861100933862618489601052), SC_(0) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(1.2753623411342921726673104381269474406910664386496), SC_(0) },
+ { SC_(5), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(1.7990792422175226600058902129912553099189026754717), SC_(0) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(0), SC_(1.6737020653136916733596535716772165435972364026522) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(0), SC_(1.6302225326949068773517679248673352546636487857346) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(0), SC_(1.2734396958135111632456063081488867212152513694408) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(1.4083427555959507760323069657632090054953299158666), SC_(0) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(1.4929184159486549300658050325819542597029682441315), SC_(0) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(1.8652684829895896142301301374343453327236973177773), SC_(0) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(1.9166900525395859117627209244874086517873551236022), SC_(0) },
+ { SC_(5), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(2.4769502658559700824910454784337557865674903125797), SC_(0) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(2.5741856282073034243711111657354159830645262015128), SC_(4.5404265626726682569056456058173398759286382982096) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(2.6163044543069225202108978658768233024577446398884), SC_(4.5174577854840975571410642764433662010758684503628) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(2.9602177913445011813031990964422715814336701247719), SC_(4.3053568577198347044655448882395390812536479732569) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(4.3905110151745908495245171369794076021787756679816), SC_(2.8305436189022256370458631241850156178139813371657) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(4.440820069796997547533217965681006138984877464339), SC_(2.7490190948039197423087254188472495182835999407204) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(4.6341603090209127259800035098032060876283583950576), SC_(2.3880903942830551911363883321918117854955849877003) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(4.6572446041289735983771860808386715691144481042782), SC_(2.3379927950467602900042453073297720581194520484723) },
+ { SC_(5), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(4.8521008099817356648945522422798471650284026510536), SC_(1.788149283390753729480066232949550043470007754391) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(2.7214692732902412004647184520865471768713003597818), SC_(4.5993883390222681391842648419683250330582439348776) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(2.7625924470914592531940464793248074993813372803375), SC_(4.5783969721600147952263738046249821710506935993863) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(3.0973598631889430232199102357597886480722482634636), SC_(4.38243770549209103069310850646870524266077941434) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(4.4615202634300571913664164445385680817832594176107), SC_(2.9713519540128339986214249698086124078674548184213) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(4.5079991918736531832982253515602563475953309607201), SC_(2.8919956157030106119887355412833718286458385435879) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(4.6844465404381571363429843649150042758592537039919), SC_(2.5394618325928391038622378119588663842313983169556) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(4.705224337239825715849222693910693807982507385177), SC_(2.4903791454847839836607264358416491157260943893531) },
+ { SC_(5), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(4.8768716224445600566144129727770335512623625205651), SC_(1.9493259057013485489941468651424998021768381722148) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(3.288896188753107916003236812593202033315263069661), SC_(4.7781320742368641623491821013507015838490065932549) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(3.3247778739532023861541155005202171536199642696319), SC_(4.7645494104028939023889893329377380313059694585465) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(3.6131234933748300078026229443021331328847299175568), SC_(4.6315847149335902853219842635809473991627432397347) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(4.68647642654934697432587249248703530748247288726), SC_(3.5053967376875327940705022402844353038428106181243) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(4.7179932606655530431793452435751963305817615612615), SC_(3.4370448887447143657898238957347297377498576937279) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(4.8315913815647421585782680255898847463362635666137), SC_(3.1289418047403285906503500608110552996134190895118) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(4.844231776769781265530007264967536282095006368052), SC_(3.0854929087361223332218389196992004940822397662546) },
+ { SC_(5), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(4.9410329299017523606402076486889743131307881945812), SC_(2.5980289585199945355528762055842005652318640154982) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(3.3566851670651562300349575508402922386254229343659), SC_(4.7947436493679075941524820281553657831545093599892) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(3.3917779574246194181463664768742590461818171191463), SC_(4.7819860049494286612680406498686207009565492733493) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(3.6732931033241433023814772022460671492147372198727), SC_(4.6563535563542660736695591730664814320724792323311) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(4.7083668628099697388551053546026483593056461066898), SC_(3.5682252451747414036861820160207362061168904108598) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(4.7381411484867750038148457133615587347206059462478), SC_(3.5014925963614948287850115474496736022827992487478) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(4.8447860474039482557850267608230319633134593934586), SC_(3.2000978170144359702426975061454921368597494161867) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(4.8565750034423192206018517154557900566383427348099), SC_(3.1575228887096100066774234625804497438731261019467) },
+ { SC_(5), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(4.9461735910047342259536968202780463655535155879112), SC_(2.6787735674644576253280338824250960695991786068366) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(3.9417441318134440068639737954707590106273970994648), SC_(4.9034550028495157018952660861524549939018535313155) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(3.9682777978457445671463403009270804168929068500662), SC_(4.8968459001177439612764580191231241519804564120832) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(4.1773311144889962105148439220139248854054191869056), SC_(4.8286626872317981007578504099952023568545574222152) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(4.8575406614715527295442824855688190683518971566965), SC_(4.1001333608565885781849995761834203943832602573318) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(4.8736689212362325896464494044156522671529652158244), SC_(4.0505794955178143393506701893962226896308135585351) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(4.9287551601147010779251770426419014221764368895729), SC_(3.8221788418881979840458926247871600795297548461914) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(4.9345640142121638432673482051990823751695143830321), SC_(3.7893519709627674998117560496476928437617806084273) },
+ { SC_(5), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(4.9766468528929433819013699320785773056336491818983), SC_(3.4116609888589226636096463658891010915964074035119) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0), SC_(1.5975531934145445499455782867998060380210313828206) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0), SC_(1.5507297314587392322761076321241930437692005091896) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0), SC_(1.1711261637391554525393520822022506137212275866884) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(1.3137031393373713665054776539258027781663471544691), SC_(0) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(1.4036781891639000341666269461063191708099172541838), SC_(0) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(1.8053655594676505704912918683002626466710318438464), SC_(0) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(1.8615777865101521331034987019774736777396700940198), SC_(0) },
+ { SC_(8), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(2.4868666027155862362050560423624063463014865906812), SC_(0) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0), SC_(1.6963681537663636705765968396918410359210872170443) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0), SC_(1.6487162227285730697711412421866392982139140843155) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0), SC_(1.2618816992631851605706428173218226127029115948379) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(1.4072864495415986595533264529638945519683373141731), SC_(0) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(1.4989752203054474683906501795011740931935967391184), SC_(0) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(1.9077027074065342461326253142268113678510061592396), SC_(0) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(1.9648257563712275683291714097605187886945093232466), SC_(0) },
+ { SC_(8), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(2.5991353820476662798634366989417415648106068539833), SC_(0) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(0), SC_(2.6195481235084993788398181848243481751008884343148) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(0), SC_(2.5660100458940575035140582094694199436474017870783) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(0.31927338814426921612088172937139434659602078657372), SC_(2.1266336167208010966030725174336651366542234336692) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(2.2928192572454368268007745314533653580109264518292), SC_(0.19349725370092510891521905819340656406697805621155) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(2.3969606281325348415417008951503940015641568511585), SC_(0.11770443802296133827343843128307786622554272114691) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(2.8555491327933046098182332178570282640746448048787), SC_(0) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(2.9189485476766768304499848550432809032647723736638), SC_(0) },
+ { SC_(8), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(3.6125038915778185887521626133324931600575562656131), SC_(0) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(4.7525119434223879243476545676940161406902978347835), SC_(7.233872055484985337460772313366441801546561189233) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(4.8040595442554609748323062366077467206259058255082), SC_(7.2019154796589379900485129569989311015676936123214) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(5.2253584594777590975685975841884682542903750272508), SC_(6.9152320724856987085830621802327105417821783708115) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(7.0287745882544993036728906628573074470488910049102), SC_(5.0663832055191576273043401827286434568962286398231) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(7.0967587787935989073375399975198384619389441153446), SC_(4.9665263662398979969595317807385097132037314035064) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(7.3669430942184369984665847270615491124088688704993), SC_(4.5247568727171159056793721687975985317211578695586) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(7.4005030778110887673952187244993302751046286061549), SC_(4.463427977888737276267793104328120275143192290071) },
+ { SC_(8), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(7.7047360581904019590779778430225352217268667728579), SC_(3.7886134642666439271698262578298213370744299537035) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(4.9717399387145089823745733586305970794561632513591), SC_(7.3389763547088901787175571278072890101450877023296) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(5.0218793876895695694227024303013218501549611626848), SC_(7.3096053430250263713177464091327882064313814781227) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(5.4306152874819620374094473379469431934433760614437), SC_(7.0436292685781529807460094586896251675279872406167) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(7.1494473625067568262543333217309637656575051855187), SC_(5.2766075652516322046976256398858371795352885878478) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(7.2125242928928775241498480642518513285899834879926), SC_(5.179728190165988017953634562466143743196252501051) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(7.4604981754240830803968214300115902233069214287243), SC_(4.7498879940697838929284499274461046264561550369018) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(7.4909169046977613730178923869632591982242728286438), SC_(4.6900617750217993232053908538995650497164997755709) },
+ { SC_(8), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(7.7604331494561252714067089794881487385224509950281), SC_(4.0294508268691586463561787876518991332056620224694) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(5.8019199602371492796780881885063681433728457184511), SC_(7.6591859456615026358589894659614821495426646061683) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(5.8449431612958809083394798420363083089098751790438), SC_(7.6401692703801432771467720865321486779235493362185) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(6.1916832891126894384324803755499691267841811975543), SC_(7.459425116240171610751252020768764096585791833574) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(7.5330063979744472572265958910504295868919017481301), SC_(6.061896583635478331279488867702283313260726668871) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(7.5758665730834609677927170712395304160225290105655), SC_(5.9797101285429970468470070178855785217760498666524) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(7.7353980321732618101998645015615573445437221692406), SC_(5.6103570369256105070440630084687932138336329643772) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(7.7537865902447360441037949819237710156464322633006), SC_(5.5583732490459623606342598995454919109909116162738) },
+ { SC_(8), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(7.9012332736463500230032331951517918017163934074985), SC_(4.9757081321700624819239729947490627705513103288791) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(5.8993483081081915064182366551975441271234987770393), SC_(7.6886100071836491570746123758042558240309917416985) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(5.9413260212486446867432470889123650805375437312681), SC_(7.6708132252538400247320737568646468908552822040221) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(6.2790996977994015166585194816878277399803495170146), SC_(7.5004714758607326828836650571695943960412472692886) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(7.5700496094795420407947636293073503010736363463405), SC_(6.1527874893333878428659274802999707844153020666101) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(7.6104398190649244046085181099357217722459770601892), SC_(6.0727260967752193932475101482813820195635327916802) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(7.7596217162714820703867200949227468306453119657072), SC_(5.7122782794936941388159708441785316985470657786938) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(7.7766711688987982087407433360342835087871234997089), SC_(5.6614699854699088597902484576935737692115251681702) },
+ { SC_(8), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(7.9117883023237024464191195389352805294365346427165), SC_(5.0908310840611668671280905255392622638748091629196) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(6.71909840851420181048979468711141614532428668071), SC_(7.8726338289849308371080610776664758884585969171513) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(6.74997516914698986078551147967929842463260454969), SC_(7.8641139321645272968832734923455728676746579643248) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(6.9941142543782601833249640769596707386395498022376), SC_(7.7773122429334014474115355028856625150049616498483) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(7.8138499443528439115043170733450889340753369166048), SC_(6.903759181002902018866000264286197269534324170773) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(7.8343951456580714540346628108258716866535433660742), SC_(6.8458910419763555040941626924311513683230460068565) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(7.9054532285921767656418757805725653104974772316907), SC_(6.5801977143451748564398084228416743640426150600365) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(7.9130374770177925483375400405539140515791387453992), SC_(6.5421211598756069105959732597770536383353317537145) },
+ { SC_(8), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(7.9686104117514492077813408006371039408801242570413), SC_(6.1052374390100729183128842557533199710523441301264) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0), SC_(2.167473095716121587731912883993309388774621070307) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0), SC_(2.1140003140541254692852677000749783222128092841047) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0), SC_(1.6796511744437743466272656783964388535643512641642) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(1.8429896217811417056077917670666851833478110787552), SC_(0) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(1.9459349180377605520107044071204383531965557278175), SC_(0) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(2.4045986048537162973723228230184529748819236423455), SC_(0) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(2.4686934746983498400459708934696735009686353055374), SC_(0) },
+ { SC_(11), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(3.1809794822340814910131986930441837178690253826), SC_(0) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0), SC_(2.2967057003832552392345736088704448354439437682067) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0), SC_(2.2422240413382618385312996400166563310948740511457) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0.061172663227154448551277153329608133145431739969472), SC_(1.7991429654197614996243714623588269194862029747509) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(1.9658819030125753396386010837663205217046080865987), SC_(0) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(2.0708964788635606255121883903578042793883854484496), SC_(0) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(2.538144492820851667891584582871661149802027195456), SC_(0) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(2.6033618338307157605427520208990728975056998613894), SC_(0) },
+ { SC_(11), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(3.326981093737861931485193395899460423573839284439), SC_(0) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(0.39795209151837785099505939564944467278986253303265), SC_(3.5154478693089854251837537995037558480226752329358) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(0.44237631689868162460349212361541565896005707920621), SC_(3.4536635077649702609500285005027127485221105137315) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(0.83026699182511012881996417984042106504381744133163), SC_(2.9462776625844107475209735945369590582762640980146) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(3.1382809107304237610347780200159660128565317179166), SC_(0.67863656725250929559747648904312933346920881573102) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(3.2585345496280253227805471623004224463100986346677), SC_(0.5866788846723945869272092416460956807137173725655) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(3.7877719104944048676024390817889721037533277103148), SC_(0.20944020436057653728808253528268721275356105428726) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(3.8609314549465213784804415609873418803745721373583), SC_(0.16083721984971719291281634097924946649179118127989) },
+ { SC_(11), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(4.6620663844468865494204912492300197399831560157716), SC_(0) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(6.9780361515718149029642816170573436643012615054465), SC_(9.8906100650430231825488782232326453954726163711522) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(7.0373145888980355809987208776061223202361768588052), SC_(9.8509272827210241723847959350730352454886483505518) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(7.5223477781105675894146935837629468361544432506579), SC_(9.500702274301093218663642282409486075005648291668) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(9.6383351196047628642737872084460980698881314835466), SC_(7.3391833440008872653156323195291205030455569715582) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(9.7213707932923883352310658033244933494139164782174), SC_(7.2242269558192156271663409058559327877300384224048) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(10.057782800034991131115598228225451396821512733967), SC_(6.7162225891342822425602910218271800283956798858923) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(10.100524912422443076945989347777427173413324231103), SC_(6.6457406679654394132515621179013359380389597714948) },
+ { SC_(11), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(10.505846154809183115185866487621501807662586819916), SC_(5.8700224147579674955234767490240539804763050578597) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(7.2673999093734025547290629423931321872971083701177), SC_(10.045669525736338568928219144116985236967058594375) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(7.3249322795850745531107392350979118796196528832441), SC_(10.008984794784043643219880742318298305521033721178) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(7.7945964706202709364263308472608885335941575466297), SC_(9.6827083054064633576237166898436296654871646274692) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(9.811413653636669730526745045564138449150852578001), SC_(7.6174690567844474439670459695997166220237703627556) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(9.8887761121954549878823221267610685182642417306365), SC_(7.5061548353312469659451490362796542176496302246578) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(10.199397124500628041006587786172029951501180610828), SC_(7.0129729203538491851449984997166462528477532826883) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(10.238460960766546530237803157812882303042475574801), SC_(6.9443910364819257411107445068134408276887511456379) },
+ { SC_(11), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(10.601670072785220161703250211390576415899216643615), SC_(6.1872337092154794882930876239851478277032785468704) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(8.3520760015746565962394572211465738905250900664255), SC_(10.524491170028298844782221926315893980529824338888) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(8.4009541010537980643968059730524682441762114664587), SC_(10.500336569262119716286441086351963504320603429095) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(8.7958232186488404380383265622585272582362468476075), SC_(10.27585020268324218956008588733390495078926797175) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(10.366281553012760412986387992021846217933576366618), SC_(8.6478012551228897365062142266601263196035674768941) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(10.419518153797230760665228051628617586347655178774), SC_(8.5542118823780913860248839686044235049823831927752) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(10.622730590579734640877084302705931136592220817217), SC_(8.1346815356468310382676586845306821776869647430531) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(10.646839478435421791904193985927588776876694292037), SC_(8.0757460350057218621653575759387310317619569445758) },
+ { SC_(11), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(10.848854798261799032568186105530591943264763391147), SC_(7.4162390831519878306438294294535916105367629630198) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(8.4780099404798621534818595739210022147320182995527), SC_(10.568787703608691238872807007114528057489260505398) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(8.5256317539929159210587279312084536501478786408961), SC_(10.546179759333481252712140004165791807094776775403) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(8.9097768376352311196233262988426787410428557133795), SC_(10.334567666760573839364348016100468108315128772381) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(10.420100173769723127255423003306520049332447702813), SC_(8.7659008468686277071103319690499471263712237818374) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(10.470282755246597545933770254174219774798879414106), SC_(8.6748528590099234515502704290551284395531007224226) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(10.660307028788603161579041627045976503265633144615), SC_(8.2660317058416281892447356875399886731882840462915) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(10.682645730839116547148308961551732405965676370236), SC_(8.208518452918906669770648231119970279356656419746) },
+ { SC_(11), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(10.86714845511359374364733182116233674397199120302), SC_(7.5637257952320644205324591578841982942030348755878) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(9.5210674897471645978357242509712851517584303199635), SC_(10.840773969006494307480215488162849961310861729028) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(9.5554934750471391222568135456089414346922636896698), SC_(10.830386857839104365397679126065112123059993586184) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(9.8285069914019465398408571500570865205073540427657), SC_(10.725852514539509075011983804408972974493214963925) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(10.7695924816026877611378179259886016466317205309), SC_(9.7272798172748387950451486302833649522985295748122) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(10.794347415698217181312076216414481916769508547765), SC_(9.6625694011762836703817950015273732007774021894685) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(10.88104385163569629053560688941109986304830619697), SC_(9.3664269691510811059708615487871052027934879050869) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(10.890413070484709140785336522882921452598174579773), SC_(9.3240936718798667687807818118935865446829726770234) },
+ { SC_(11), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(10.959927507437739108924762009895355126804391020586), SC_(8.8396763598709593261309091020867886900750477284118) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0), SC_(2.712400632124789779551613897864424284445095897895) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0), SC_(2.65315950199915039740317082554810414160948144961) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0.26558322243320311449786107587522467208197588227562), SC_(2.1711952521528709946492249708876661108406979676679) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(2.3526161133228662965515720308297389717394004483467), SC_(0.13798255002468249326746163899466147417427544940488) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(2.4668426580062830301798730200744948723136068806668), SC_(0.061482969087541275222883522254161623036137330397865) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(2.9749146083872193340067257336655298417940224473351), SC_(0) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(3.0458249942417791477076384072896256097549023968441), SC_(0) },
+ { SC_(14), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(3.8329718186425153457294672506857618564521343935726), SC_(0) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0), SC_(2.8714472333765571808649462139783127204697421407159) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0.022997481996621754978701346286085774277532252172362), SC_(2.811040572865369404433005658530487632481597872277) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0.3592177307105504485025885171160718948877219664573), SC_(2.319040300869333530392131272148606214545187682321) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(2.5043592933339455439020386277688336180191652620832), SC_(0.22652559060355558821928869529119456488681792000873) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(2.6209640690774752417654958859549989430546814788873), SC_(0.14680874260378736281867774092959680870697478214698) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(3.1389608668833618575499479400654572692572811403025), SC_(0) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(3.2111771611923774939402409932448052718890946804705), SC_(0) },
+ { SC_(14), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(4.0116529001298310151592917460228802827086988631932), SC_(0) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(0.8604643264982837573907779859918270605275596174925), SC_(4.3810069365429508095223141272957431475989809639035) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(0.91213616611646503957451603499362808304359695261111), SC_(4.3120681186696479199585820461044826437055727110176) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(1.3596156715145882260479072164593338420793234269071), SC_(3.7455432191409963447554806561495990329879364233152) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(3.9600232281104855215800444689206220997274394675627), SC_(1.1853933726475352501322205288519746735055136487368) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(4.0942882836788902152941524718467514435311644455275), SC_(1.0793213621949821125460809164614107851528087414732) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(4.6847972274725244803460104298476352684477742898129), SC_(0.63993416104843326129186452885226359993309779160584) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(4.7663979040184663589255919837989716048654106826266), SC_(0.5826957664620422700134497715436169641588190211746) },
+ { SC_(14), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(5.6601202935847808939551766357983248755370628462259), SC_(0.012631425510332257629147033221764456411391975236853) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(9.2321751158967468720299266245486199484050218968146), SC_(12.52202042213423058719477457477292761492012976371) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(9.2981608091877277479491057174088533263545434796984), SC_(12.475553528581657734294875978437448563677598612833) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(9.8386189149449152284634561528122765100949442958505), SC_(12.06956900459963607397201496871612961141295791243) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(12.228338235228003011414322773366293094085281000672), SC_(9.6343932038269175305471017308801976371056361931982) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(12.324581086769619427953584846643567604038466374621), SC_(9.5063053253736498291506217586791508997196837406835) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(12.71916830070540501467199288253137899321225303309), SC_(8.9408574136874291596499177488769894969029304373659) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(12.769995304234111910713076661107672042098461927792), SC_(8.8624595207995110844313678574452412750333006241654) },
+ { SC_(14), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(13.265574113841458766673693178720740223863748439708), SC_(7.9998923613975086662750206972033504731320963696505) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(9.5905422256936737543946545028598075754262839333933), SC_(12.728985795962073389887147603334047419730838533607) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(9.6544885556086003405058068391558611381831367665573), SC_(12.685835538266285056921891040879209900282370800983) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(10.177139671966946326043852027666662119213013365815), SC_(12.306394053405266230432524053579427052475442384597) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(12.455256060826934797239074083691981299231411536666), SC_(9.9798805425853216442255795757828648550836584432603) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(12.545211501610648354008260572107527493016166127527), SC_(9.8560124247286671524415360854082001439947923821433) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(12.911266157376058853837170796457610265310061120676), SC_(9.3078972513714531563710267305076143719673211780216) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(12.958025395879006984351602704090508443204326743064), SC_(9.2317434314987183347266214623686316960094030808682) },
+ { SC_(14), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(13.40666556158407406568555218720533971940179232107), SC_(8.391489522023476545900136272052011344010151762742) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(10.924571090733759111139368686815066348696604560166), SC_(13.37647688373602934841616689662352413151292941703) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(10.978527611226199219998476168340384096816204792687), SC_(13.347534151760587994989222381307115396575798320029) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(11.415263295046869011568123017176988450501087687055), SC_(13.082992592817664846529067629206749380290826277173) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(13.188728869765856802538411746032041746948092278941), SC_(11.251353731372739871693183345901103303968353023812) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(13.251460881444985961870998414921999749083073942118), SC_(11.147844970102549252056353596161489439503683132973) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(13.495538807341318868145144916423822677847335174208), SC_(10.684809703141976816893934585336406351015315542357) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(13.525150013755001840948121796327325836477235503703), SC_(10.619865846941921800690934769302397400955515678411) },
+ { SC_(14), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(13.782965806151883705612096996050018884097593088656), SC_(9.8942693945689589520032049573640436380150194924384) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(11.078307913549649115189339800474350120478553105796), SC_(13.437063411560137647118839057844491165251430575052) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(11.1308250432840828439057823327330083595535451321), SC_(13.409931133476240865719799180205243471591614261363) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(11.555309587162449138436945724144935112840609617566), SC_(13.160265827907934226385946278406255444263887883982) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(13.2603745421437147914681019662258068281146239516), SC_(11.396129387551758728521168790043692068759289710526) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(13.319579940051631521701139398781880357525824119321), SC_(11.295523779841010092031236110729828602722635893919) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(13.548169980320285938363354658104539047079102868964), SC_(10.844764297307601642574901515001679305760057524415) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(13.575656031726235667410425542879015330224675924201), SC_(10.781456712180302221277888387584135831237714912411) },
+ { SC_(14), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(13.811293222095159790481290114682618950215499633651), SC_(10.072897867935478593556664868569368918705156518369) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(12.3376799884847119942429915678326394905222640955), SC_(13.807340446850373936514853606817111070107270940968) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(12.375179390117606904175894056635750073432887956798), SC_(13.795103934940870434232213595950420398479841386127) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(12.673304949198538860614626482744348973604199470001), SC_(13.673400762377738407539699762319608810879847296015) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(13.72403596367771746940488462987098400619642947658), SC_(12.562598571399290144702727666030581618252957880163) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(13.752868126267133972249249797053273220642579319459), SC_(12.491937571874878338986669517487093162384935715533) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(13.855087057485530555087011953314488902101690962355), SC_(12.169441884435690828477698880668481642848444488126) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(13.866272824984795888676034616199145581916429420222), SC_(12.123439915028952637672168437400916462230111375412) },
+ { SC_(14), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(13.950384113585257550058783137400617159156712021496), SC_(11.598290717892468144208760568350897004106790749988) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0.14437183813444952995046264009219710507250009179279), SC_(3.2401679013560077309418420449048382205452389718558) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0.18565330947377194350189781345113841664728051567543), SC_(3.1757635495374392921701019214791832206664838609604) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0.55105005335820856520027183656266777712398307643896), SC_(2.6511108197807158958273833393904911309219761341415) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(2.848757026543820744283929777893728970508105520657), SC_(0.40722789149347153214474663459817058871109536524596) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(2.9730977826943974023699300135993479878108694167746), SC_(0.32060015530190816031101507520220302583193816789909) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(3.5253840637290069748258666265498863323246175637229), SC_(0) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(3.6023822633820690530122710250418753683081356239672), SC_(0) },
+ { SC_(17), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(4.4561970118575053691487702886584238048305213389735), SC_(0) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0.24387525962812971282871262494272953501408096553407), SC_(3.4286049343625006443158982676532168966157003976657) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0.28699681480516373029170333089207848274918196669284), SC_(3.3628946662817724128208224064701981736686486482492) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0.66724223661495793307148481951275665984659556478335), SC_(2.8270369571556529839048642191352500189569177775111) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(3.029027377583354374670622854651461607065934743591), SC_(0.51785143912338237878280093132721802085029846239833) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(3.1560233206299228043711180008659812817640418725618), SC_(0.42770627217861634777279096852618948926450904736722) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(3.7194355959229359529759669218222938283661335531862), SC_(0.062029296910114800596443260464116103522490321920603) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(3.7979039312927213588929712156162654626080943410825), SC_(0.015470025462353473781884048826593946436774224686907) },
+ { SC_(17), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(4.6668301120804469081922394623852400965531412702746), SC_(0) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(1.3430265865673867854915520685656993942967834307375), SC_(5.2256478461777866139467389922440518004557526598227) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(1.4011851331584713318286379280106387164858686633294), SC_(5.1503038238835517561370647803464172296173359928207) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(1.9021019858374156286157513830005845919437112662229), SC_(4.5307592670455697772849909010438551434193052902878) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(4.7654048190055001702014318917185741094899964730528), SC_(1.7076005168588866975563951629870223756053089584583) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(4.9122318247573589077674578775160755867224884961273), SC_(1.5888703554844460739668212150059743338203456293896) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(5.557582948498653707451854839430948580317946675781), SC_(1.0938808024344078199000738052308118438968556958118) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(5.6467260818793587630038668621943491212321922963808), SC_(1.0289372102314034351698515282443267951858648996698) },
+ { SC_(17), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(6.6229325017109936233803989963888938538337079534983), SC_(0.37306885157970940382241750995455814076013264170327) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(11.506018233116187488177504955328327666326865924581), SC_(15.135022784030456936607830884362860734432602102679) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(11.578008508844123908971868624004442394838015812444), SC_(15.08246841117147789813438904916221699624805812075) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(12.168156428350027861196691043632506968227878942401), SC_(14.626386112283399141143998500400296346506134963189) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(14.804157994481700865564970651061674034812578267578), SC_(11.945034584860458985309712863139265723901132783274) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(14.912267418790559146295157660942134582544798002848), SC_(11.80517368749314938782682092134852903803706320954) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(15.359046075748550428176045567674581751319074788497), SC_(11.188312170893584054392764322818221273987573090765) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(15.417116180354180722121982907854950332115959739874), SC_(11.102841508094886995085031419505518320845192168269) },
+ { SC_(17), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(15.993557843256097494239004590508129287775886193623), SC_(10.16290500367311056621296201751065910823435646512) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(11.93259289206639824292981819385571390066189191893), SC_(15.395051705433618129044439490506579542045957198206) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(12.002280999637291534487659824993559714989056301744), SC_(15.346083283606347256695754318130406595273500998551) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(12.572436163162333089853760747877678292872280074224), SC_(14.918778613890250933246981028561121075046489949182) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(15.085792240937927667061726565803548544042167250062), SC_(12.357114455411609091427563841619687721868041349227) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(15.187084790323376004640709262880052578986122121054), SC_(12.221991188567526862876745306181430409514969230653) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(15.603024847859272971682527952589593104129456806449), SC_(11.6247113056721413741909679953305010048518650533) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(15.656710098756545197288132524481082518058790694152), SC_(11.541792563601282491396321143083454158040488867549) },
+ { SC_(17), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(16.182644762381018807376652255833514447914986375335), SC_(10.627517028638517025423710724513546912130868779626) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(13.512366690897172871431436339709987228311262039843), SC_(16.217477884719730918119621220440608739841545595096) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(13.570868156839957641812731755271610973722519787925), SC_(16.184089808456311350694985038690044694905905629825) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(14.045140284808616046098268442525154718358037461436), SC_(15.882690703004829109561677951519003320600867462986) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(16.002453395895476185204551498536858820568822684718), SC_(13.866972293591558024503887992575715363096627617541) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(16.0739191867988760849651527591192323406687724469), SC_(13.754569947462424994034541611565226050325069776374) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(16.356023649524715672250137224385689456206750284336), SC_(13.252609949387298541509089105510269939895837368046) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(16.390834815330655643457996047050500283392626584963), SC_(13.182301021679397480065638937846564537169520219761) },
+ { SC_(17), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(16.703628792074241541319349087759791223520765543245), SC_(12.39787426952464589317898242965882960048045162636) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(13.69341451867880905010070797700898170868917813122), SC_(16.295322255016774902831790045515039512988620447648) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(13.750312509257044436023642521525693464568371903329), SC_(16.263960667948387442526909216813239438849513551655) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(14.210965067432562864625275905206769874288653019325), SC_(15.979106465481747982713004635848684035964131033474) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(16.092627785622583029241506074814999710079471887176), SC_(14.038049133823958206307671240416939084876963858646) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(16.160172911671799517823421123344434943433085535588), SC_(13.928874142972266982968653870903073281869304178505) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(16.424908805173163792782447075361817930612251327764), SC_(13.44059363327360055688968621108691869661725101291) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(16.457307619842182818725385622456676169687520873429), SC_(13.372112637376386620758718753227331801393998380904) },
+ { SC_(17), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(16.744009566208498479682121183599526546240989763072), SC_(12.606800141930339172606814789316829854205311669265) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(15.164232098588991332185826002393043709764925490785), SC_(16.772141622145132480200592023310122221466597727453) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(15.204479110282743331126436210011358550890943780679), SC_(16.758069532057392943438477536967613751702480461392) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(15.525121339790853202305908496206288395808054986842), SC_(16.6196619509124564757779966215506663445174123869) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(16.676940640568211183614753364127913366087936984488), SC_(15.405900847988278000216485596351743089787905281905) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(16.709740030629665765592634012952047294856994142534), SC_(15.329904370028489853394362679680084636068590211648) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(16.827400025396642632417002643904182702471594158181), SC_(14.983857442569853937553209857963785772861198912686) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(16.840435273462159332414553386289590545770065458501), SC_(14.934586284155619483278065105898927993745009725485) },
+ { SC_(17), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(16.939843434774604652148548927067963332918391744563), SC_(14.3732814897329682167467320699655189571314510654) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0.39326542142841477848937602291297185140804535124815), SC_(3.7552241240199550124461182716019052727043149614565) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0.439318276781494020252379301799905693872112886522), SC_(3.6861049317768231312050359781849773876446844920648) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(0.84398973934914948313963075697865408742313915422869), SC_(3.1224281271187152844806554421466835029469385966283) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(3.3349155072027394287822776516206428703536642221277), SC_(0.68526886696904600298816796741630112866648051736665) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(3.4685024063998838303219876468203639349504130587851), SC_(0.58933813970995139795288785552025892875495494085375) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(4.0611566091060913566900635431132447404318669825094), SC_(0.1985687320651031269425224438323549606439370886598) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(4.1437059643025156534083422409451394924939856780198), SC_(0.14857089363212682631852305280182924867360335219458) },
+ { SC_(20), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(5.0581862989073316902141877041473678338328389749028), SC_(0) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0.51437946158629074988546386854254020011649935336401), SC_(3.9727328294787529246467849784513342030128317217425) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0.56240809568134511290648443375496838773622854328404), SC_(3.9021793684988641431828464642951160997591039441116) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(0.98304386982521418669541426666228794504439392588054), SC_(3.3262286846534587418269002771590834576998326857193) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(3.543468176661473404314804350618454865456618112365), SC_(0.81833121837805283281693922524285356853238995192934) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(3.6799635226164913041799280134548397894610159857029), SC_(0.71861884385978104260417443271838717956976770063884) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(4.2848418125490394120574079381043288304649528553072), SC_(0.3108728101002758570020193971425389758490602379338) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(4.3690113646539952047674830827091869962329551928836), SC_(0.2584772384539115486486422118856055471810050849312) },
+ { SC_(20), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(5.300229554766274355217193954905262844253812304779), SC_(0) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(1.8407297464381653751331151830476934096902624901838), SC_(6.0547483258962203382383225498733656254652957565561) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(1.904805038233385253574884649463753482882996132164), SC_(5.9735540035195808740560162237539791771831792261849) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(2.4545448825581795697603216362768253973570129985834), SC_(5.3055371832911269723138659354455450016992781519897) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(5.558627731276124518348026535236940944527093336422), SC_(2.241500400432410599118761114695227191822642762066) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(5.7169394996279094985645913879929378451932651422418), SC_(2.1112044332128742321969759017749406644068523374493) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(6.4123737616601798289175116607552745181763672215216), SC_(1.5655154139693905686005846090249789739046269239886) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(6.5083968323739291231955722532052471052937161510047), SC_(1.4935626601807575487042367052391416079021134632756) },
+ { SC_(20), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(7.5596904746640969229177922477438222494684346147364), SC_(0.76002573875546282312965326544804848314451841058235) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(13.794487397105652852797123356966058423864433198804), SC_(17.734001089201369543296955625989098798166804515843) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(13.871961750135913560927288893709412749975560003598), SC_(17.675889411042579793354043832710304874689809578026) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(14.507536518440891374443772711135639438059001311826), SC_(17.174003815907302292452866312089692267661713806225) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(17.369162170780163399957287728385204575098770326706), SC_(14.267130886637463528344108361323791606990358688178) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(17.488121524809304471713561490974552685660347146533), SC_(14.116506795983038553856058647356411704442951484053) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(17.982532046204292281128497391301417510164288087482), SC_(13.452695896525244826908749002637690293291222882502) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(18.047198881038573479562840271820926690237508338649), SC_(13.360774212089305778370870886256564928772273081334) },
+ { SC_(20), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(18.697024164745455756567339793043238786906089951389), SC_(12.350411225017006772362370782984608122580054663478) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(14.288670396367583796474618302845022475814690894451), SC_(18.047869226551438807933657512325839428541664047861) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(14.36360231141961215104420289234124440424994072539), SC_(17.993583143010443189873015456831794593933495350151) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(14.977185274595666665207651683503722339001312258175), SC_(17.52248018348390369101020006641809212293102478475) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(17.706113805631898282526610356833534647093393963285), SC_(14.745342220891248621160606221032275221033783324881) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(17.817781041330786455464031449585047829363967450284), SC_(14.599929409601692550246908252875874493674411361203) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(18.279305572165771187584300769223451934497196545549), SC_(13.957755964212609321496089801796860333022449275676) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(18.339310255499037445849747206590245063180203188304), SC_(13.868667411753943219363187876657477619104214537412) },
+ { SC_(20), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(18.93567007191491838824034836358475598842110777933), SC_(12.887017864166223068967487278153581050043147850347) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(16.111474381324530750013351754586479993593134954942), SC_(19.049425228498573826111009013003902324712037402563) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(16.174125443277864579115569483841252501548138377523), SC_(19.011901092847265752797150598848266806350563397524) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(16.682711460125123615814444026615425469235043298676), SC_(18.676352707949193147933273618356044007564333328218) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(18.809087036609358877045768933882418763489968953087), SC_(16.491500389887885949368868733023641426183939538233) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(18.888643090585384232164365736040548575190919244229), SC_(16.37096789270299898245838647495418536809282302285) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(19.20617110328123938940938041849439095285416998646), SC_(15.833475501911211879275663037806038018366105570638) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(19.245864942948530300500601994979396576648264010597), SC_(15.75827585605826081957277536429229716304989169495) },
+ { SC_(20), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(19.611620685420950946563170092187674250838750466454), SC_(14.920336368550502561853254548295455223566432544093) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(16.319463441732062715749540306863082232744792449716), SC_(19.145202084420413204464868818351688199755205349298) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(16.380361031149278181902485617436402852063567536033), SC_(19.109886683924476500074661170876029696951841355699) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(16.874076663418440736289710293718980551097693680552), SC_(18.792320433386626922620046588326483481620396260131) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(18.918278923713994764220865399737419731464568908505), SC_(16.688595349160096288201592031826734891281026519378) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(18.993574621530615244626812007722234818361630894733), SC_(16.571586558474345871480918527152331123162044461135) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(19.292153527605479002052398186977579244936152779246), SC_(16.049056762890889418459826482908383681921205433372) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(19.329199289842474649186876482857328997918610272942), SC_(15.975860190738055928045809123565923541074385628906) },
+ { SC_(20), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(19.665681844984031525518468446299714932304468162053), SC_(15.158930468825449602625100700162762393569876479539) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(17.998078109909625436070584364366376465602169896743), SC_(19.735124737342476882330959136827018518281502624452) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(18.040831709649030353876081070274622980715392552264), SC_(19.719233779411409593669857581694149426877726934238) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(18.382059926698191764937446311547293506852341641095), SC_(19.564556706589202088045724182321672683106769027168) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(19.628251957386054058589582615565260180225585192616), SC_(18.25504563731335217664329721003512253116018127357) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(19.664914905072526358612061962029190942225318490273), SC_(18.174171240926689254168542776322218646584475720669) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(19.797909812233646316693429097841395712218259353623), SC_(17.80664455002251803320237553153157781011609735534) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(19.812821257414415375227618619522737064595277157105), SC_(17.754398004789837205183898744078319959839640177997) },
+ { SC_(20), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(19.92820144624215533248395787343029854871095947766), SC_(17.160280219711473848689605391618629018197120013196) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(0.65134208936734105473157175300444225921388167937448), SC_(4.260380069239661594734583756651302556714814873294) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(0.70182203996257925254745640880576955124212590582596), SC_(4.186895330313698758691560765494396166677762654539) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(1.1429538396105367090684146265711462255307354060596), SC_(3.5870566902911733413040736034137847987121491324146) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(3.8133025008848662870114826319810611719538078070261), SC_(0.9703978999080680214869166670676918023873300225357) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(3.9554574823668804061882834624362284085313944232184), SC_(0.86583072893231422352414239276608325016438188165846) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(4.5854843920651918871558891418464788149304795877835), SC_(0.4371104568291518402691694967369144382892286923525) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(4.6731682397612850513715371037759046983537357838624), SC_(0.38185094616014899162517214463987422845554336439839) },
+ { SC_(23), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(5.6436756349601955690678790248260647751931798168977), SC_(0) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(0.79440819746086359697314827538721843813088400695882), SC_(4.5067091439727555152492908914490481412472583104652) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(0.84698562769729355420026928511480537571929786116967), SC_(4.4316711514756227310604978416389154149018916253683) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(1.3050927864563752492099522321597363016700916831259), SC_(3.8185676632248368134988121278594709431277801358443) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(4.0499437429521374022916773497148032208131092101136), SC_(1.1261597817755367982426784618642785311015130261824) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(4.1952419727965399115243688489725342010382758152132), SC_(1.0175713972163468626973565599016442746245367325678) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(4.8385108610246303904832934249997475110936326449977), SC_(0.57083273189100287077887289561613394902922816117026) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(4.9279539603589206233168502594378607656815847766845), SC_(0.51303253692964735526098246251742973353537986633354) },
+ { SC_(23), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(5.9167048953056902791822692041954306078129153843426), SC_(0) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(2.3503550520259767444245488505086783007766929441478), SC_(6.8717176474036257647113405756892906754874590111734) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(2.4199022226209881964297833833800017472242694223443), SC_(6.7851052106982070553272895276142514469493215732358) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(3.0148534596459355104648780855771723991224893840923), SC_(6.0721661630729554911139331676698664659629692894741) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(6.3423568665564953520033965462667108070960756975811), SC_(2.7846266988432163448744396901837993887249582721018) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(6.5113124244901102861107182286523297358987634536302), SC_(2.6436199845176953180650428571457175536784706039355) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(7.2531246891536845085558500564849823155647862203362), SC_(2.0510561796460974202481434061601360935528820894927) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(7.3555133464018964074033985523247741071507657159932), SC_(1.972635214459745612726118875776614184433005746067) },
+ { SC_(23), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(8.4761793467003926683370484506375012487886905396724), SC_(1.1677154189059859463982243023844250479749323671972) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(16.094366690694536501121385830651937098378884919635), SC_(20.32188458010038418672786136664669289011926131075) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(16.176919692065378047433813927383000076159302274197), SC_(20.258632479999189624224617839195224556306862500332) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(16.854592829930279897954810063401236041085831408202), SC_(19.71432299078445068429768831974264359866701878407) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(19.925595455651351199981341662147924034748970447041), SC_(16.598163918853664398938060767319902601368538510634) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(20.054604715729192853169745564132912578741350097409), SC_(16.437565129437350951209466415694886701832260809459) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(20.593061839611990055436109870800147882554514865974), SC_(15.730280760362499145447164313482714089612208761666) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(20.663817240219356293560742334589288430848455963211), SC_(15.632390791958285558507487736323166180821874767135) },
+ { SC_(23), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(21.381106454565069138331281553935965081345386589057), SC_(14.556966500716078209803255344004054637855995366666) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(16.655685568874268409804781277751008721727921600129), SC_(20.690158473967913604964566625171532909151159595664) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(16.735473398336749906715557037252342540084365005503), SC_(20.630951449227138616102553558300037564661529731793) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(17.389301132439845258177931842274760519991723486042), SC_(20.119266974590389626674765643183056249771438047104) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(20.318309325723166680323233014176519918349867677494), SC_(17.142141827642308552637422321245579269289846108192) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(20.439589715847882617891914279086194216452931846709), SC_(16.987193514449976177871372972525960647753106408325) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(20.943287300615749600783435929898421183188768595507), SC_(16.303452230265165321955527369288486771841372509717) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(21.009128277828751353877963170838928660163222368754), SC_(16.208655932084701001774220671425535967639060077319) },
+ { SC_(23), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(21.670319616353066050123469680259714579534620121108), SC_(15.164769685742017252114091980357681953788300295348) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(18.719379616645862847013527970591236471987599987546), SC_(21.873844530406026129849606947390235764242925337019) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(18.785872271521334373013073698384899426573646500237), SC_(21.832454113628122359947425386630891471499579309482) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(19.326254061596554144234204868211147473860719691), SC_(21.465039221652094421618854782911348926859797066341) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(21.609869132414596837136768105913665344953867828996), SC_(19.12295118286093883093631609001667279632228073658) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(21.696973879105915470618065499147512439480143468525), SC_(18.994885092404044154032834592212640295811546314776) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(22.047633754178267663223840941972132678749588154583), SC_(18.424502073224930807138890623519730051290445875146) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(22.091911166639428196905448228255439989503480402285), SC_(18.344779943326535754575375068932919780970331666011) },
+ { SC_(23), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(22.508098317349331977010249318529558836454775360232), SC_(17.457436123299601083059307229255784289526074683825) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(18.954018515049052056671706648141811447779866205133), SC_(21.988040347938265772647057422896660069837199365149) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(19.018618671368630546252344814574891058157886575805), SC_(21.949017294492218755733676163974128497855478936416) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(19.542970874164947635238689439972443261488919460253), SC_(21.600858699169314801276423397208328913232982699861) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(21.738434676942093453374116826053599592475321040821), SC_(19.34584040804548262159226926999010986223694867041) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(21.820977657420710139516856327441789932595756916225), SC_(19.221572679242199282451630662662730250895267155192) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(22.151318453911100624536122624730402276107280092704), SC_(18.667341464191570358053720051888612975310071862043) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(22.192748716369740568674364251408605901667842063115), SC_(18.589784704644156934494928338334132124529497439145) },
+ { SC_(23), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(22.577077761028710404064696340429578305893888553114), SC_(17.725205825292092409942070647393020826756724540386) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(20.837560991887821805417784672045946478721273663636), SC_(22.696305051176980244291732989824712232321053194115) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(20.882633596288395984893512001209616996832753592712), SC_(22.678616742520000592243973497806049667817884919412) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(21.242938625239289640499957264151161561602305736825), SC_(22.508097640246702951532550350840163806535177126056) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(22.577996739207148335024288466081573515320131641119), SC_(21.108695064822106441366681319841688741627819540614) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(22.618420977659289384592065866142617254380258384727), SC_(21.023300403168780745634634052187666365098291679048) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(22.766602381445384780523190566337483630162412931546), SC_(20.635905330591112714765315652507702484900754160756) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(22.78340770400166649758447388138292542629065000453), SC_(20.580911027297111069908884104728072486416570955041) },
+ { SC_(23), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(22.915373322882104730687705155906575322633341345937), SC_(19.956556471194319977091937100370003020528697308289) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(1.2809413750287839345400894101729317198082013475557), SC_(5.4103054384754350956339668179975489810618717029562) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(1.3407208767717036012116737827716813773978744943398), SC_(5.3276495634238617439807164302117582203267838709465) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(1.8585480902402196911319752912701926096501467756557), SC_(4.6517730423149269025491809149050064490452397369055) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(4.9069626840916963270886399602875263693015308385403), SC_(1.6568697195174546661257423825008343090484850248149) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(5.0671341265366823604504297912034006596892923696265), SC_(1.5341346356656720458061504699435750087528845807416) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(5.7756624518283548743255998169211442252718919789167), SC_(1.0257158186205398923570324794978454153250020395511) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(5.8741197770919641317057027746064671732687171040449), SC_(0.9594269514531636689426928691713712144500047611942) },
+ { SC_(30), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(6.9619807572207523689998761835888371510418225950583), SC_(0.29634286801447458509765833581280673246849243480359) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(1.4761433804596787010760098387920807554788718635972), SC_(5.7231424709461610582670341922985469636581822251321) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(1.5382700946358177706110210000978851389238252470966), SC_(5.6386829373707895188444693585375364404397326532567) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(2.0751628066050520680864082410592017207870345244593), SC_(4.9474558904480181082466720988520461573023296633608) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(5.2085716978433131830461811487976802595628034580062), SC_(1.8663081883603402257708328081150637246577799514845) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(5.3723805854013396988050371577470009477364272333255), SC_(1.7390564724592752645040860880941502789568421392294) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(6.0962929263455705656598837919022130923783885826991), SC_(1.2104857925860809757950622352339960503730301793476) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(6.196802028236874482679323084804358459282440529282), SC_(1.1413674163318195291510892710471210924345922722428) },
+ { SC_(30), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(7.3060708580738297226441443302194660557207167579451), SC_(0.44627728594865453047045059927408436035261899580019) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(3.5744263339569324617716209181263839862399544528552), SC_(8.742642787385538708062844934215003344468126839995) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(3.6554506239304317755753296037001145226467080101069), SC_(8.6446440950599196486694680852798537364950540441641) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(4.3453783949333354088164110114296605931731287836252), SC_(7.8372266523473088375983493938656770663055567677098) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(8.143396046337660474532407807862872009363943017475), SC_(4.0790292342263685807373289968677786357363987790281) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(8.3347375120167043716668788560229381126669131659388), SC_(3.9155210198792658213734672893008542312148164596529) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(9.1740012764047894392224627352650247003589223980687), SC_(3.2246696564883235824809504193502534451338839020415) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(9.2897527460843413876581678532111720326549314126477), SC_(3.1327159765466285050456069878747263306973031955805) },
+ { SC_(30), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(10.555806136716738174234942686890223514182353698305), SC_(2.1791611013067461496691567413642371926534858310221) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(21.493966684687755624000320330161037972180030966262), SC_(26.327652188020278909819917952704645189314391848305) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(21.587191583043692166616538940981112079762368447721), SC_(26.253620140605703609186193666141120595759112163597) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(22.353398585132500992946755732796662114892757305752), SC_(25.620193572138611814781504526465552611688798261616) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(25.86534357036138175489955898994202171802227813274), SC_(22.063258262632057345911271152008550540367378361643) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(26.015465295403022627999135869967553463267246511072), SC_(21.881682109570240015548808243505192601119762449264) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(26.646259897952880173376195597702776042402638723852), SC_(21.083057843775455541919229912246602919471265689993) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(26.729748090750893817377664946466924070817213960308), SC_(20.972640525274920203935098652484353913162652363082) },
+ { SC_(30), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(27.587378104892656204029347261172756707619303075516), SC_(19.76088086649487670637476292640825147237956466989) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(22.210545676757907813962547962674897543647228547441), SC_(26.824438564336552107637753145460002374145727822432) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(22.300536649603156584486081984389044670913298350778), SC_(26.754910757380058227120221382431008143594912306117) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(23.038996261333414653652442448179604435991429069444), SC_(26.15796741129302286658178612017336782453613957888) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(26.389409360070716413029396729562645178458601262734), SC_(22.759614041810829945869006044088213929505923224489) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(26.530887584681499790818228538465546277824381005494), SC_(22.584612935023644706321802965583075151851022254245) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(27.123003834515636919094103468704367963827154443093), SC_(21.813541918847709759773509556233755312275977332787) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(27.201050696842917314315885885307274985765606571448), SC_(21.706766258498699330665856445063838126333053279957) },
+ { SC_(30), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(27.99711835725381140873602997899611553878010442063), SC_(20.532478060046639923699248600870576810857908358169) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(24.830018373857992223257187552758752227817480924981), SC_(28.441106218410795042466575332139040678360956368925) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(24.904579609555599783292584177237065420149870241396), SC_(28.391545335114980789426750720945396449310025269973) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(25.511812027937538382541020796928370126726186653768), SC_(27.95681217126836912380739560851550909267081429468) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(28.127191495379380729311265443402588986724334351323), SC_(25.283072037713694572368100743206416481701594626802) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(28.230242319612840955124189785465679809930251339811), SC_(25.139166368688789826791210154500550247746238269604) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(28.650934607671230157592309360792520284181833596086), SC_(24.49971310321466513413424980953126292742385728678) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(28.704914054325054830275626441454796498135093440632), SC_(24.410504960918238058848221977913546205202594982446) },
+ { SC_(30), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(29.228780535928886317743380488000295008212626666923), SC_(23.419727455237458220152912523784645603663408035819) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(25.125982737481238866053202502584909962839441289395), SC_(28.599558649102854862123324595582235486566433939574) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(25.198358965496960099550418778456316280631856717258), SC_(28.552677557261490844326504687345722117780103592894) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(25.787123203553865655588229112370446413192024345916), SC_(28.139762151355790624859647549942094354987767174418) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(28.301917214513661829299455840192907897012561635012), SC_(25.5654866971394918267284773738652809372380779342) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(28.399799736941914163841032944840862497782871424094), SC_(25.425957197268121301260565990428746154596655382603) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(28.797488840086123866696241210278965860700324722089), SC_(24.805157718652066386991979460055934988189639496718) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(28.84824396049385979817953022057193008777109376996), SC_(24.71845635074659740937279228008149011679705883508) },
+ { SC_(30), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(29.335725989503924871062136837768424629226318037932), SC_(23.754133129743331266996340930043438600159970191146) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(27.479259630709795696076028168952651085762439204754), SC_(29.599040828430097812733707746737742632111030575387) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(27.529198504784168790394200451964586608654387338266), SC_(29.577267782718139791456136192893519271375895039141) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(27.929613226041841280636944764726648680383252284382), SC_(29.371428281824468186658750556429431515069886459015) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(29.455033927653193169872173783193809567954148668755), SC_(27.78015285726955058799609046112152841773178771) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(29.503840487193348360214926674629498866884796952723), SC_(27.685254280838887280112131837973692327788015446352) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(29.686648314190153252982149509287482178337965219959), SC_(27.256176643661173502128088745477752483937050300376) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(29.707888137372531953986967280091807332524991142265), SC_(27.195428802162108183842001035436316572586931526967) },
+ { SC_(30), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(29.880456835568680592854533499452725300326797961638), SC_(26.507927150055082960896648088969452275232660703944) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(2.0349855077013239315047689027290594101062466665781), SC_(6.6889950007333271908103967936284764672275399442648) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(2.1041041671302701503709581007277305012963573666982), SC_(6.5971105172496137960491196741517587603075193178525) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(2.6991044713256757929701422417189775842008697308093), SC_(5.8446495965825396811749414836881630673271094688588) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(6.1290050440886587751526088916747398607835472505805), SC_(2.4680945401859258104532499418920170001503379468976) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(6.3073227232170202791418954072009225519609556904403), SC_(2.327077050362333960212872745747398180875237541372) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(7.0948330321604410508751274169968267563097023555363), SC_(1.7386528159389415095989348885665976211611107245911) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(7.2041180377728764023880012862820739685930559532304), SC_(1.6613232650055025139459733367765916954651711613534) },
+ { SC_(38), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(8.4097130107844996004103566813359446908902957440845), SC_(0.8762981056915440024950375362038206942320495802741) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(2.2908276254682393649789194688854810240620188756194), SC_(7.0769167218869948907314283178472983666005876912863) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(2.362542142510559307570810534776661295370169693902), SC_(6.9829760336226128781831302789527317410141375634441) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(2.978695181027272745501976546380675682577963601855), SC_(6.2130609194792881734720933187138336942528077767069) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(6.5041452905052547087525009339071543031287195558301), SC_(2.739709812456994142898015447695292306858629880826) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(6.6865988857699514720005229764383151583687547543401), SC_(2.5936809101908994536944265290965700456096826141074) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(7.4916534516799088741352845061812452576375892476201), SC_(1.9829821906832547823152197015511649299337674104783) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(7.603285155682404893749757291709875054887407717413), SC_(1.9025372453959923963872207828580565245361443936964) },
+ { SC_(38), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(8.8334753715421190756501914756020936397623743665758), SC_(1.0825257178417367658372975626892738719212523945451) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(5.0167840156902493452073218513944042116163711078462), SC_(10.837128778291767542344604909553073711561725972951) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(5.1093384827752225091889627132005172725359760723097), SC_(10.727667433100014823281380053055009500769067436319) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(5.8948298574654020063367012612255011506627402123763), SC_(9.8250635065850258596159258004526575927778496837593) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(10.167495750033284280375297737656348052990752848211), SC_(5.5921074475227452627887270335363072103132233189244) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(10.381391277523660544017602837264644775140073476311), SC_(5.405957482068671620886730362060436422036599724167) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(11.31874767384887941874088521470854084141445123621), SC_(4.6163948179261560656919174745045196683180563866572) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(11.447936930477999746256051929142622041202756925044), SC_(4.5108797352264860574087274401529810074336130995546) },
+ { SC_(38), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(12.859951307055069323963369861055600985160191906649), SC_(3.4090647749619811690532023324978136673566340636067) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(27.706001577758691998996212985148495194927177264627), SC_(33.150763129716643475548229523434472212189786309787) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(27.809968710972636922569004625731807934675962449166), SC_(33.065906396829113683871030176836165343335179456189) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(28.66536528117117319263099886869703370109555112591), SC_(32.34283507097116604042519893144403792009313993809) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(32.622092395883378738619465753024747047603126515187), SC_(28.34124968558703508633083536792393680580592801617) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(32.793452903998894551229677161382023033334791195257), SC_(28.138540457185196611024678471013798719914123167832) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(33.51693466753256070701070355532411854588092330531), SC_(27.247986478006115493652040394328448252799259273433) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(33.613171615471376981459660819270346375180385206763), SC_(27.124973371631713269752349616116010676952033165261) },
+ { SC_(38), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(34.610547226458577289787651318182250094588656036188), SC_(25.776363459194280854378454852434453355363031543927) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(28.598283518219063679322684389459161938528052140846), SC_(33.796287437761495448203747011870632585753650737091) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(28.698543955633637873993229905497739538248645560873), SC_(33.716398128886711755759116616253031368261594179044) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(29.522256779691196836043773352315422042749733060365), SC_(33.033698099159910081830746376550865270375254764802) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(33.29775856920522178225564683731974627304265395459), SC_(29.210401029611445725710021716289490256215762994163) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(33.459553937768456069442138747097737443725187231799), SC_(29.015199580628196182516016780992289091276431820169) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(34.140402929855522985147539749782796479766720884029), SC_(28.156243088171581758165458648576515643414173540562) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(34.230665700725558880661979536125385815057500843436), SC_(28.03742402721758004219286023349501711279799379097) },
+ { SC_(38), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(35.160916681937146926095138974882885962711753818563), SC_(26.732259794429895338631092167110544510342730804193) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(31.845059365491349651747165862371541781974244605595), SC_(35.916983778841631276962414416403368142177978093092) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(31.927737347783917669098317250852423416033869196494), SC_(35.859190082700876066625276701338267557802274534589) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(32.602289680995895898660208748320141307532709088842), SC_(35.356549049009171940709099059101498933899360459022) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(35.552716218645839962621484608487837310266175864635), SC_(32.34791983609088187532968046537679753566074032078) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(35.671853318081509658694111156381389410582095702686), SC_(32.18806317115972249848881766183641160970668301071) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(36.163100795138306585347091242821332121007775938796), SC_(31.47913829363736197469118645995766056507657956767) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(36.22684282708097816458070259715014649969146727617), SC_(31.380400473584191714107620820771932377066166841524) },
+ { SC_(38), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(36.859115352111387832211497962049870810634539688287), SC_(30.285911911155636637124869817776297719222354026762) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(32.210037892459790915142054230748749831992869133554), SC_(36.12743359950456395240734443970990748730781317385) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(32.290235938203446170881361282270702288773607776082), SC_(36.072619066997739511684882588734706802237382815648) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(32.943861711210958471725491834825466890167294943013), SC_(35.594289326964362511981336892239744424554431786567) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(35.781280859359715958887841234014479911474290585856), SC_(32.697533838585586493249647630058468099962724472914) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(35.894658757955744912486003607934856331491149018797), SC_(32.54263585709051461890846846011468316283278554269) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(36.360342110533889176487788673372738945901558278549), SC_(31.854887363641681388556776509451867894168467800542) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(36.420509995567639882071528704308202789951047059266), SC_(31.759000495366248174959219893478139399136179943208) },
+ { SC_(38), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(37.01255646319800443038407788854841269974803843482), SC_(30.694683049338236793318495404756366329123791534348) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(35.08962352327392036754166706611251787414279473438), SC_(37.477486313180612493335725472915067167068518584305) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(35.144452142442706043669974410610771591853543201279), SC_(37.451271083441356461656097451187957475122219546008) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(35.585251864299932856750374703441749739342649352879), SC_(37.207782760836999161732769869996364723245916268086) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(37.305861979777708040858952341275726638014299574435), SC_(35.420452598891250007247719209138678833627661259243) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(37.363597775016296045469906891439566931680465450358), SC_(35.315984957618570457987329581447932220464259054697) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(37.584211866542346242324285275041868703271705966472), SC_(34.845034119056458963902149338968022406086697272789) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(37.610440392671859955493869566384558930251886476664), SC_(34.778518110297069146727446786654007551996042622893) },
+ { SC_(38), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(37.831414261647376512421270897438097409043899699), SC_(34.027885133158543103977025405250437468788239678432) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(2.8153718033919262460169840834175583807937540251853), SC_(7.940911246138560307031718945384040409134762235448) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(2.8928556590665030464708120752458148384112292392358), SC_(7.840742237589943661041118297452257074532453685457) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(3.5570886489429032262496374127672937554831850101629), SC_(7.019488160408201576475389735334627842164749742999) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(7.3300508428053864781252219363931257200739696812611), SC_(3.2997453193314752887563449709315890010020918789913) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(7.5246688539922665579913324317285325818385664250685), SC_(3.1423255747221397832929912314292018896519065903793) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(8.3830742181721961213875086466676997638392469679452), SC_(2.4822630004471717685947522939140502464889220623357) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(8.5020709478087721868551542403230895097552229779152), SC_(2.3950698658113346907604860257780012645891864220882) },
+ { SC_(46), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(9.813134427788980014989761353947814489895418160992), SC_(1.5016496966986951016707799378457144496034992750199) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(3.1326151997751767905676437041175516041072998830075), SC_(8.4032123469811837609252442533994329881199608353051) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(3.212918129876971584824200753051198158605762922815), SC_(8.3007599821575608623670509352764637880253256497274) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(3.900177038333401249237399340885337867712173172932), SC_(7.4601594951773803179892041015935119623166753924687) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(7.7781731681647456175489819950208935487531485911292), SC_(3.6341411034368286093442038012251188086615286014527) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(7.9773754682936147294416449739597764346445057156239), SC_(3.4712659252595253175711009339012372654426359468155) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(8.855268048033564479607332624053073847023719369587), SC_(2.7870230528193881566587825573848315629751385571337) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(8.9768766865207941072145582775467889003660481346459), SC_(2.6964576170637407877695909976582258833376365488672) },
+ { SC_(46), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(10.3154001642945854241348647423784792221633208608), SC_(1.7653669275584959833896403062573392528342368110626) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(6.4920418337984944446938668754784468533613951873289), SC_(12.898584841094025461171715929106055172931294249274) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(6.5949360850268775602682708991155626604308748054564), SC_(12.778829598674748003558994460359033214803303264761) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(7.4662135535435236436527044387990238841651259530309), SC_(11.790698985382207149546397482710336307907800606836) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(12.165722929486369109219047352801563078163075243479), SC_(7.1308227935302160490078161773220126074313684767679) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(12.399883902603716952375614274285704297184864407262), SC_(6.9243469844202633119568024015509985662771058771263) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(13.425323374835975086474418851111148691483137009037), SC_(6.0462820161254143693441306203710842333059393604949) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(13.566571242601187459333066990993365871607741299096), SC_(5.9286255158778596513312663550195809883745121389492) },
+ { SC_(46), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(15.109417413326052496893260875121706547589671779009), SC_(4.6944681753865057013320948527811951717041383349395) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(33.949045272495228659936786374526344470528478924626), SC_(39.943056448538904107569506588907743503408591576209) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(34.062658365718651713468683867168731690070751668667), SC_(39.848496959419424091692874196954317695231514129168) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(34.998186972903557248265960239650193937530076610444), SC_(39.044975429925746348188507391418614781993768636113) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(39.354859801394092624273484084588765576179485017169), SC_(34.643537690916236769571199897862636626963180216603) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(39.545281467527410866075078055558959736793562256853), SC_(34.421841310175522726371251536858702472742863505609) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(40.351823731930096105601732346030102653606039197428), SC_(33.44874684323085680563691181274765754167303460362) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(40.459465914174041858030323844489735619789838527704), SC_(33.314432113949018662313729564880268128147902866777) },
+ { SC_(46), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(41.581407244578115436718226221150759064715180099696), SC_(31.843174746141786498857887366560024023696897669643) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(35.01570532303158096667331376362166509604932671465), SC_(40.738698011348322335334668112488740483050791468589) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(35.125186489263032088901498997538878536824809658691), SC_(40.649523778355886234513532702748167048516623623968) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(36.025490297630184263877149526528987003575060462115), SC_(39.889875724924837983387273343500327622787564922334) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(40.183223057451274409392010962083305715509604247591), SC_(35.684451869688898217913451518382454403225310627259) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(40.363249485827064628345850323595524833020070364236), SC_(35.471102343000827982826779156133255394134989646038) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(41.123590292976770231676304543191037345433480886185), SC_(34.533242778243763854376151506341471519849431725552) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(41.224776101389687471244221221228532908669820495749), SC_(34.403618776680014852543421679347151171470996936741) },
+ { SC_(46), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(42.274517574971951037592626802232841146618636025889), SC_(32.981175151099873853658820798814495777716668247278) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(38.883777349864326559518722878976673143918226191935), SC_(43.369997781095898300503880906765064635944679936079) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(38.973739868571597849133570394892317594856128794513), SC_(43.304824925023996262102190037497281918873243468147) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(39.708753261647238378820885077627534973308841571961), SC_(42.741224695434154809830335181339498447391351533792) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(42.960557987781320133394669478740489653628985461755), SC_(39.431356132002312053132494606014297396080929206223) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(43.094136161053107109898919103582896625742315925242), SC_(39.257173474272500477833895424078224893678436244626) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(43.648603320085177416228915690068934145377503880407), SC_(38.485906790677929940858296771928350602510755044313) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(43.721074068898877702177703125752180328806006652327), SC_(38.378624479321222444590750345897508504928613558048) },
+ { SC_(46), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(44.449878839949522005919632841646683611955180696927), SC_(37.191271762240952250692655262815297700181372977144) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(39.316951606871539943051468991638113740460412683283), SC_(43.633419164994267259104213678913296202649344010092) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(39.404168965643826569109111016196173036799490632026), SC_(43.571489158735551274306863438883039939690524347727) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(40.116045267617724120315730973386701689794021673087), SC_(43.034409278650744034491281055244992694269812247813) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(43.243721882668813743177627746791085922674650792791), SC_(39.847533902427283695943808106973261178982872246765) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(43.3710172379880870052026471744071040653571881415), SC_(39.67883372405075423841295144807432892553527526337) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(43.897668107389772229297797852243474198395518184893), SC_(38.931011903229992072388434921808139691827101844566) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(43.966260305890444980483354590100471486446088809272), SC_(38.826890032956211226244175399731040366133540194678) },
+ { SC_(46), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(44.651624260119531355855586062230424009263686196644), SC_(37.673049357944067417344736583310625622323483798785) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(42.714808706222770842707210138820384387620947361268), SC_(45.346374642372622513525920006890452859993123152191) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(42.774021283668064684201829865465011426219427632196), SC_(45.315977348945514467987654067540745108145473667086) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(43.251080309736671670891007645829565841739266542809), SC_(45.037496678067520174056198439486584108175646865193) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(45.148949073469681529861487542232585473172627192155), SC_(43.07249811724529963424244550451773489280929838019) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(45.21497978568861528121374856386751275645608202265), SC_(42.959439004145295059206156206965415551593952495549) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(45.471291193822887518879621338115453317560681726071), SC_(42.450953003650035894089955599957721058186654994) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(45.502329126563130627235552811295265528463610551298), SC_(42.379273894994276601446240236094528372106775741894) },
+ { SC_(46), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(45.77226977795264094337184898061934906479582214343), SC_(41.572246447505940611032662850967609720477889092755) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(3.6155167596791913443325132103477974564529087196639), SC_(9.1728696267435834667293673603564788169867541076611) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(3.7006421455436361310470423643009244097343471305712), SC_(9.0651195062065392247688241616310394027245148084489) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(4.4281886474590755608762232660960501195025084846239), SC_(8.1808859449862395093199054403586009356770717982984) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(8.5154465041042511899876254077969445690377542579215), SC_(4.1467504279759677044074039999555907249031116041748) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(8.7249874372988440189879209998134617812156134300046), SC_(3.9743301785583635142182973911770489522266203745221) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(9.648263867962717856146157425567082672156260787697), SC_(3.2488416714241500240273296032342655001791501347337) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(9.7761424721702624463692047041784689689971272598304), SC_(3.152654747847702727836391189949593136318563376756) },
+ { SC_(54), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(11.183578884289778959218420316204230804594578553663), SC_(2.1607473441261247103454732331391839274071460370867) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(3.9947170801253353576074896674889511307683169817795), SC_(9.7090197533046085134136457025794670628177244825842) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(4.0828663688779576499443123347349240613474421625289), SC_(9.5987780877508455252326675651075895948782003397773) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(4.8351559841228395983037550375857964990799707135661), SC_(8.6934638204756291958956017871062084842346816263748) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(9.0361371744410021510940419167566567234465545156393), SC_(4.5443679832531620642323516809432921819956337538419) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(9.2506733522981006783018149555931701544226047495842), SC_(4.3660852788330277731257445811295666632665570388506) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(10.195217725260203137591150685311699425858479057316), SC_(3.6146671673243123295405243507522453185399356960601) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(10.3259512788641353918188072187447236504285318779), SC_(3.5148716886291135163261137015319153165336644897897) },
+ { SC_(54), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(11.763472122178697172472200106972496381071868455631), SC_(2.4828112330364986137542674660272528372028661842914) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(7.9918984449719823011639870833800330230149892499052), SC_(14.935380120408154170641764491498813917264450319688) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(8.1042484965826161918241157058752578189275498629894), SC_(14.806202173869944987238851326488791980740302534848) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(9.0540315844078781238538502329898236030156929655725), SC_(13.739754546378151417165427067704841322156696420527) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(14.14462838217597201123718664804194674412370002204), SC_(8.6887348663635081485633460792074719532577769667332) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(14.397346625810038755819469024703225325844472248014), SC_(8.463657835747400640254163998530824561332677548165) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(15.503409611760172352552222416773989513191648718895), SC_(7.5046675548271301841960332677396093540433959662782) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(15.65568987747946301537382112832714272014735900999), SC_(7.3759195056884952380544956967663290776150830201093) },
+ { SC_(54), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(17.318140601857309844711475681156306331286381571554), SC_(6.0210926877521489511098768820595810787074905113576) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(40.215230912612345022196786091790865891069376425178), SC_(46.712298067781324122336839651742953304816760887924) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(40.337672897177433480227218453836259932823372802999), SC_(46.608868416912627541377610149920598774226255303639) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(41.346573897660239773328510351677444089472593937644), SC_(45.731741071086698187569835033555601572734225945474) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(46.069657899606369548630330530010780978846373501002), SC_(40.963961156236726419284071274298509620683140258156) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(46.277519522495944727229636008545793711179700890732), SC_(40.724879169664925768262092070899375145033392045369) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(47.159982872055397607112491533228635063634796071162), SC_(39.676240628284387570797338154606485829731096767896) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(47.278038298309396495512722012468700833107269008578), SC_(39.531587089717116918547311610739191698090759623335) },
+ { SC_(54), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(48.51344595692305033825969931629589022913179318058), SC_(37.948220398532086483049511223180084546121515869851) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(41.455273299252481246695213577970795799134551205459), SC_(47.659077522893443364836369776955399731901975585726) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(41.573193628988920988445764005363434217895779918998), SC_(47.561417165922917871571982928522808838488719202508) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(42.543624140441561090698101659781260158853072787593), SC_(46.731378372749730818859956520092996211330745566006) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(47.051528497677196497528129279707977885674424747795), SC_(42.175860615946570336091734236569122350280427318378) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(47.248232879514873440402429670155792478063847999235), SC_(41.945894575373010803880754985478598686645140507049) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(48.081213717475791222647380883564534305662613226717), SC_(40.935824570706743791049799400681272189683283466436) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(48.192368509480668139295076066864824106533974335027), SC_(40.796316884654138722693211431277794787272350244871) },
+ { SC_(54), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(49.35087262867433908660947162250633413454758842486), SC_(39.266680795469132621630911890622912145325910289629) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(45.940124254817372973499912621889983564450730126383), SC_(50.805756289882833875980079017565898325690184594334) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(46.036751412393916041494344749616474849750934602126), SC_(50.733844016541198989989004133208085966095013149368) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(46.827108207035754306809774984219165666100175653245), SC_(50.114498039760479053224335381788661453052751899715) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(50.355029264998817187774176591939817189755397922088), SC_(46.528627436045353930077393183788004389998866309164) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(50.501814101879828424324227609139260698185097357752), SC_(46.34133128663790493344223344537594977760548829367) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(51.114004345418056071449408271148010023527923831148), SC_(45.513032338363689074822935115987619365721732650733) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(51.19442991619270600681757440368222399132278059331), SC_(45.397937815345116149147710044304913889082997015948) },
+ { SC_(54), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(52.010847959346875187631934609533598433835432975174), SC_(44.125759726695970021394295697380752809277499308476) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(46.440878457925530086064266577980142001617126133713), SC_(51.122837044806745782775026826662020022707128754966) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(46.534517399808307968380976479607985408346156834109), SC_(51.054407561550589596887490404560289113122432459225) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(47.299711477769036549611068701409485417983101511556), SC_(50.463594895876803065430043692916527850548771957637) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(50.693334876583298744494229644742640547932282006531), SC_(47.010889635676143255035249190183432721264853290911) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(50.833359738417781673283186974825735104470022724524), SC_(46.82955595238454843486966354308510870794474165368) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(51.41568503650769508548273929504309111803818126801), SC_(46.026780723901481306418744109121360257375910135202) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(51.491955820938562823374324454697504685756633645615), SC_(45.915130254283638803865368024751504351227970252009) },
+ { SC_(54), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(52.26204360747039325426841762061119789357551157435), SC_(44.679525090214650432298317108879653771798580389676) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(50.350957961592687926729640928371646841739509460738), SC_(53.207162093626282871444418054229820375669176701772) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(50.41417798732421788929718090882653004499554527997), SC_(53.172834922085528085319980442043724349830737161415) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(50.924415098877445196978506882239479848196492687838), SC_(52.861707551596498818331072637507934824072483681493) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(52.985596189242422132628626633848290950664389269402), SC_(50.733214255160025082360512125210082792855533123719) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(53.059363223350931520810854527920706548673216294033), SC_(50.612293749161121077471254373228160770610580510012) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(53.349281201492652524826185295601246798359046913912), SC_(50.06950063479177584103791840982680182945949351675) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(53.384903923303137854434991361834712015504704947412), SC_(49.993107293301100251512674896997280976214751061993) },
+ { SC_(54), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(53.70314565442408398077733337305109495811943438013), SC_(49.134663172899560420005056840875626384799520769226) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(4.4311754968725160937094728786808725652665311656989), SC_(10.389208728301550261858042993952457246953970257047) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(4.5233783685435650597499045126545412416967645490101), SC_(10.274427731549105699699555455326544784959296442921) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(5.3096122775667176922342891758110280336533643112236), SC_(9.3317671047442602353293527054155903849709752521588) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(9.6885945447217846289462399147968694396499764836569), SC_(5.0058309560742976201438926498242105204541511595723) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(9.9119797947259126793690393018155765609458792081226), SC_(4.8195058537292921892720587141805892069652847888478) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(10.895415872898765038779199384985111262393256570441), SC_(4.0334306573794032108468304003924048155744986861651) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(11.031528112810402917728339763267479623168559730601), SC_(3.9289247743559923343593042855593341200097342875344) },
+ { SC_(62), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(12.528246522566498300418014912457584326627455926484), SC_(2.8461480780533958750451182477773098890375625287655) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(4.8727635283096545792277138353721360021408646678537), SC_(10.998790189457709033916657720372802568232330886369) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(4.9681808479176742624239749083642675745205213656735), SC_(10.881324323519001883911844918373750904634674658188) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(5.7807538077502399933234606115516447163812218907539), SC_(9.9159724992624861537809656281690258274213355191446) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(10.281527293719762119221396004781568020129548513501), SC_(5.4670121866586237700212408177167623584620795898709) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(10.510289409316423175308771015762573793897392130318), SC_(5.2744463678711692481674804715771494518222358167714) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(11.516646994499075026762575799118249544092553567545), SC_(4.4608138355555194467392677201130780412670809081887) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(11.655839853906329860098797416584998129025578525931), SC_(4.3524791861650840633702057383499521770256833110734) },
+ { SC_(62), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(13.185079047486325946674017495638882592665983671922), SC_(3.227223855086371429772822226737251519099181104479) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(9.5110432278045633711581213491989646802476223619145), SC_(16.952853377209111428909963256829875968775883619085) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(9.6321591798185624607965482231297316986871037128346), SC_(16.814934489720402936375566627109356809599451430791) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(10.654755230170457646338117466854794866218970458816), SC_(15.675816948112138298003804815530107778553918176366) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(16.108392110174057727279412229264922142728000161803), SC_(10.261714481242831206580019730848943740627989326759) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(16.378329640854057623635387384064997742135843415007), SC_(10.019384808544636347074745750490566417087763410487) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(17.559179436856106863476677926864244519945454064312), SC_(8.9853804236667915889162700490456049129819588366318) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(17.721690029431195864112070082395035372614411957279), SC_(8.8463577468800510835472822653771978497507196454228) },
+ { SC_(62), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(19.494986776999701109281636553086590968865986876696), SC_(7.3798948751771766120703234759061142088873309672626) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(46.499543005014436215649565681084517418598497136455), SC_(53.463462022978638619187704072946545506455095544122) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(46.63017454610242888650966572285638416997003134841), SC_(53.351811548371387601495107787243741272600775986763) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(47.707153769995999773732047579956502418430818930596), SC_(52.406427925072096263505824108195636656027396337044) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(52.770347135414321809410687263367961403465541521731), SC_(47.298591548436668495883293342585291042928045593019) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(52.994381494160210893124025303157333878753973323191), SC_(47.04337831502496265510894081746086730348140809163) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(53.947200409884780354035139069489739947495738230548), SC_(45.924669377974112775763179457168669355569276730769) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(54.07489816449697644382177756399679895591674297964), SC_(45.770429443374082231608164621437283053487703062159) },
+ { SC_(62), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(55.415203780329043227051071487031053146542543490529), SC_(44.083173107965332485064656145373574978342701722692) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(47.912183772387661071901561681293663793270872083257), SC_(54.562176356830858787231496724089117049238408188929) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(48.037931764109422072720325384749479226847956987692), SC_(54.456652614311206756305379174940471915872477532545) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(49.073426435413121601606900927492857898332843780113), SC_(53.561347253067897365765690920071026668950063612159) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(53.906356754489995529781478157433651134114092212251), SC_(48.680863444638464010848352500452937791238240154865) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(54.11852531216811633856945142753466332248718371615), SC_(48.435480366525368017775628563456144859920137329804) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(55.018807246726532375831454807749899025263233928914), SC_(47.35843546974380841698737457144987914157387810097) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(55.139190162035141428940759054688651367114202899019), SC_(47.209763955438293927559275283619907483853258597529) },
+ { SC_(62), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(56.3981888946403620650316818848528467481140046208), SC_(45.580802108258766683405506535830277601240998535088) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(53.010255761964292471676883982361460631272222823008), SC_(58.227925758278434830001042538584319030372854152947) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(53.113062775909546295042857686169070872317329091645), SC_(58.149774144021722331208702705104385122143074722516) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(53.954756023941235507468450245433791670445997068666), SC_(57.478766920481970035595511490006192508370246921702) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(57.738952409628841833709403124831953379884805253058), SC_(53.636714381798976211931145893069240057506906446217) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(57.897976711972467427617411473244964747775315059237), SC_(53.437254101445785008820342600198062659360890274743) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(58.563595517256306521011811501036636969278609344349), SC_(52.556074408230447259930353546200107413278409289788) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(58.651373218926170178343207578603537969393897548816), SC_(52.433739470685448838458549555581839965190261977098) },
+ { SC_(62), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(59.548499786932758461405989589485771610064575756759), SC_(51.082999822812179375389477722928189416979653055991) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(53.578104677666686473190003999645584164948428400606), SC_(58.599188489728580543441684743319143609641071817244) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(53.67769778855561474746275121473412302413606110964), SC_(58.524742027027521013070159361677149327904752033989) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(54.492347540875255070876389473164844357196858609753), SC_(57.884133480300813895619499833264034913155392667024) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(58.132813664229621612473743997930407138385571898685), SC_(54.184682675500257737386583076402944583252736299298) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(58.284635829642874912230462348599310854782572832377), SC_(53.991630528484730027022533445874902439824272663229) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(58.918491027635648686254736855077572108380829995265), SC_(53.137904849530374723780136127722008745539050014019) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(59.001857856915908252375922375437682526276276371089), SC_(53.019277307206639845086035912513359017718333350018) },
+ { SC_(62), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(59.849974341360241521762472946823865127903032432676), SC_(51.707952287461765965101496530748540778866548388712) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(57.995637539029368007929782161528805196085489694703), SC_(61.061075569281977247798523468673159598569388465074) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(58.062570760336362937537264350411940335012410635548), SC_(61.023049714589638381647479096090513569374663764154) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(58.603572227051180219077515369624704288017635140924), SC_(60.681314166572362156366368370885628804202877015829) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(60.81684258148642138915796329584486919172713124401), SC_(58.400666036139388226478494488139725318065250869296) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(60.89786146977766455201309105630915200591186578333), SC_(58.272456047489341018885847412206164813618061601969) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(61.219442975800148759490644092870949599664442127882), SC_(57.697877931530137913179259501933959223925135863278) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(61.259416362397637519899387829710861949244662639847), SC_(57.617120274073598852787727824112987857089139696069) },
+ { SC_(62), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(61.624536339631523014295673586439700289155516999634), SC_(56.711128459422124003675347500768411217810546538379) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(5.2594283194243214687967514325258847595470300896035), SC_(11.592892182341811916170339986868691915289161281067) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(5.3582533541895972585795922429224045656710604952913), SC_(11.471525943263190039125286177938127876676713188884) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(6.1994322715529475526566751779614915178748322927921), SC_(10.474128108874874731631067587116232697293784410968) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(10.851818838867625631857013231594376689877824387622), SC_(5.8747264640612888653720088382885566720104528710787) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(11.088174155050454475035867884332920579115383172296), SC_(5.6753829363673199811191910241848919572756204043223) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(12.127954587891984984576233941578799949462975667226), SC_(4.8326257157866384216045595225735284316355148331742) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(12.271776004257178230361701112003831653216015757661), SC_(4.7203436725421964243148485708622536017159169445862) },
+ { SC_(70), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(13.852048064804644290348021887686427064153181772295), SC_(3.5527821301022003509728795254287115561589125065319) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(5.7637516046350795765967807830913234205451615105133), SC_(12.275564910738648806292850628749707869055636680631) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(5.8659700530079189502322148920826842312018309088368), SC_(12.151332540177755711750440738209915238751473362106) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(6.7349857855370206075011994211239210911123367033135), SC_(11.129733486975750769062372139349907732916307118125) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(11.516727790807320727726178970729457156558145216384), SC_(6.3997469183132979546808230943943619878170526561979) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(11.75881778730994162229184365353719948880279024517), SC_(6.193807694961816683648357131250738917483283498114) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(12.823070110950957989528076072347553737607645547777), SC_(5.321964015014415628597123183963199879630531671138) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(12.97018372621976890900587392573945691330751481544), SC_(5.205646049128182643100360134817505386008289332111) },
+ { SC_(70), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(14.585260474570617608581932429771247614016900593357), SC_(3.9934096632554368182719533066577041256441795683561) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(11.045837213058683079807212474558014799079161819383), SC_(18.954657133731191948267827210451962844237653378188) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(11.175161218945875708985244647829536989613219765804), SC_(18.808549671066463499419616637245562806336897518497) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(12.265960943405496188200469225766057671732692568793), SC_(17.601340568505792019215429061047236243033998931466) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(18.059874520203844296091609614634873268662640890163), SC_(11.846927829837111523671792609917975556965388388515) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(18.345946559977976916396247633118759035161223074361), SC_(11.588437494530519223458822014877867790993762575457) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(19.596854783119652849034580461596205991945467242751), SC_(10.484197478075992726426344499169522671672563209061) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(19.768946468982515665629110865646775944710636746886), SC_(10.335559314445701105253787973242194057350722350855) },
+ { SC_(70), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(21.64600961288080084391238773152912550364554218051), SC_(8.7647210634422761515995786655666240330051424839756) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(52.798551634327957236487050935675820804750438182038), SC_(60.199958445987507168621864187919705454837520881291) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(52.93685479502045850128272754999634711682629042087), SC_(60.080611875220534272249926619018072667902404194063) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(54.077620362993234480878771752274407285264176566473), SC_(59.071301813252549093358115246865718426404452120502) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(59.45957900682568968000641389616221959382179169583), SC_(53.644741939959641690950945618189471163214916523677) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(59.69876037535772044371232877682551278221215564585), SC_(53.374414358406102003506174827479038958833129083886) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(60.71743882953332504913538331032617402328159533618), SC_(52.190068850703154315387051461972218146899688794707) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(60.854157534033873445459995883695282718622809111335), SC_(52.026851481431291463064861785711872301824330601587) },
+ { SC_(70), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(62.292487509014418260949077063108558539584341828167), SC_(50.24234862182834764616551429793875894282391355813) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(54.383152712380557279905294033197245382517113680468), SC_(61.451253263539387042582198858186114168199074250467) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(54.516233016043379153437169762216859887529295815587), SC_(61.338369168330458387376557825106234318637427456496) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(55.612687976230319025398270195924849026929149545699), SC_(60.381943725958906857385218666122336194811414368436) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(60.750238634086725638476773791161322798246123418499), SC_(55.196887079633364235925552542208823096695864782043) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(60.97688911541758937047196460101699207505659810813), SC_(54.937059314387670934321115317871701914589853285854) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(61.940161051709214218714938756611042556069717849615), SC_(53.797280118129510360572644705466273733920947865941) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(62.069175360536165273788694585751902252851021984687), SC_(53.640027329338201611356492199896800776198465740841) },
+ { SC_(70), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(63.422045278924663254565590955704780267107872818315), SC_(51.918096824599726596740606367023600229576185719406) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(60.091548868837825897042069691312222113573428676492), SC_(65.639046350692635343224059755806444601542114306638) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(60.200143209607034103902749319316605153113518728611), SC_(65.55505936858786908352538264270449706359971408992) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(61.089925604577041968841694173997000078899931219286), SC_(64.835697858383602736417865034799820909836109659426) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(65.114286457258091644397924142979649348693758654672), SC_(60.75355775278230296991778813059178316604548606093) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(65.284767071779023953365584123843621413732090921887), SC_(60.542702731014498214964775230904758791585949142632) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(66.000346948116392527706660658494604292294076802827), SC_(59.612003338885605031411003094523643102501812260029) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(66.094991773268135365626980958744614837595190740949), SC_(59.482890441022222734433043268949344029460282648994) },
+ { SC_(70), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(67.06731081358747279226516522842166144100925542794), SC_(58.058647131288000067825722040255335793663797624218) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(60.726097255293009438124376728970526840333012688405), SC_(66.06490750541990181316746156404383529480793499348) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(60.831266094139563692896942331930883154055673693702), SC_(65.984834160807117084389861540714857261932520817258) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(61.692241692321650863159939116284707019367632730049), SC_(65.297619380886845612843324608459601058680297938845) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(65.56403366217419884421724272203961421690318515314), SC_(61.366923606135200016472224521358207925461236361839) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(65.726897799800530671157506436644256771060786035901), SC_(61.162894549270587502316439917675754596142408328112) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(66.408933602578734562184685925205038007726546971082), SC_(60.261458961876333241932898960622017388694367375183) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(66.498927158849768965016573309494497904763336945658), SC_(60.136300360744310879885354631674976399016351203735) },
+ { SC_(70), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(67.419712562837952438691565021892965623317159332388), SC_(58.754135724346901543620359763556390719442665982486) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(65.647196727879673126774462428933200450991646266224), SC_(68.909118423247655108084313816361350550022605886326) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(65.717605044799948747887302187019209647921133602577), SC_(68.867600425671782901569162172125006695601576732349) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(66.287414283534301186444926912228843629038564629184), SC_(68.497021140829673506995321056872889647713465439186) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(68.643509205676085629636916314366734798807976404117), SC_(66.073543830999807181963380893100518885826945148837) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(68.731361204040920277656964628692790127851903494345), SC_(65.938507948197145030699851629593771809022699730939) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(69.082855563633155168671162193888126970497192365232), SC_(65.334185211722462728560149116066162024599473565016) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(69.126954776332843416832331263562970372275138180149), SC_(65.249345832427216388833975960111325904406792668174) },
+ { SC_(70), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(69.537151811827442842265602305241617814854528179369), SC_(64.298923739399983068176360162871436075763705084709) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(6.0981674585201265748651390379014065000632978696527), SC_(12.786050706104797419087851434451927359249995972656) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(6.2032371913245289457585059007212338937411561355801), SC_(12.658469680458110665431863830797790388814271395415) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(7.0962534227258885680819210401928814946342151036238), SC_(11.609403876698271303790026343215348295669708838874) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(12.006790015590923136971520252904890413295281422669), SC_(6.7518021118373485422019789125671986834907832368642) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(12.255388184857853097745174341972876212511503388023), SC_(6.5401762962180433876514105190743274357814276355386) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(13.348341620866503576633590247343608640835528611055), SC_(5.643972887988872536126909106595720983906488906285) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(13.49943658540682252133646378061246527216822375891), SC_(5.5243634098253764919539972735322876323163213119556) },
+ { SC_(78), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(15.158509787231291514297478255255390728517477679996), SC_(4.2770196974734968938104098616080055113458811537689) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(6.6655144749460166080669969765381840123063195241354), SC_(13.541530817104923294911098281364023652376401970164) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(6.7741469256580988219720303159543448295299524171099), SC_(13.410912442029829230241409936429053993303262259082) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(7.6964159697266406006799927231847296877565828391254), SC_(12.33621906836703282960419143795735161529723564764) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(12.743453070833783406174399874791333822693721192039), SC_(7.3408902646856894149920910373389894468019223339227) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(12.998123909359296156433958146519668965678687339548), SC_(7.1223331634013146582666057834278115232399510514779) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(14.117013700440518538599640271520165013249676522082), SC_(6.1955964924796214060234817753913948942721828651027) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(14.271600712224044880495470085069973662730019460937), SC_(6.0717548746582339575631535104184359340882562020413) },
+ { SC_(78), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(15.967635658481667354950541472827510985299215510102), SC_(4.7776499518964909342479778210614703340966553442217) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(12.593658478929117307375150288231907763924261476882), SC_(20.943420568849494732095148368298286760450177937713) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(12.730727340314328999140552138536196906331485096827), SC_(20.789583867900446728382766255618653365979787985111) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(13.885899565468189104240595946976322600462739641012), SC_(19.518092449705623627052199797032305898299973354791) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(20.001134993215327628363922568877797305942053661922), SC_(13.442330786254114879394865487782704490471232438411) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(20.302438983500465030303461588696105520298026664079), SC_(13.168587454975444001810615286364832117320627948146) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(21.619473938877647402206972474919408295945475219701), SC_(11.998078742175478870198422341670522910479586607565) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(21.800607218307497015146066001169682106971606411755), SC_(11.84037152111815035059537617137869557081285860011) },
+ { SC_(78), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(23.775560134568438938358816336637101843878636284043), SC_(10.17115991365124603225753385330502295679829428556) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(59.109788660829604193837210424941554832650250000357), SC_(66.924244968987694268863165874938454456108510648603) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(59.255332774180660505476142372380727502124388974604), SC_(66.79763777832188139755960894776987723878108365708) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(60.456314048141400995921255794541734297959198563523), SC_(65.727998997828659495057567318431595018789528256335) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(66.139267009377777886113198945270824453362033043951), SC_(60.000478610577498216146317652574852177097818535033) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(66.392743064266774599467884183311511753740305595559), SC_(59.715882701399618308284463773985459180674558691182) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(67.473550658502085904014894582403192643764770933443), SC_(58.469587043806073658977941853877826195280981073541) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(67.618775617088088386484629627180591391800202404172), SC_(58.297898217569266177955162890290575060065745572195) },
+ { SC_(78), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(69.149456426035708019820004333069223664604587002723), SC_(56.42166241462038363086676260227061587139426722999) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(60.865817532077809305399522591237833903933591254638), SC_(68.328657475272288835516395231114470305009190675914) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(61.005818290397950321727955774332909657441420867643), SC_(68.208830351385742862929272074206114090074372705436) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(62.159819494659174189534376476818337723298304171366), SC_(67.194729451885809593008272582401789416803651264591) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(67.585001355682629221497711175362414781078945190708), SC_(61.722080140680660434480545900678652286758748995903) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(67.825317733502907955107108718224006376545939353007), SC_(61.448616603844617077855436324809623076172321655726) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(68.848004093644857113972882129576235637255830908299), SC_(60.249628618132825301987955428298278426321424333934) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(68.985155813524848074393627859799455138519492593226), SC_(60.084278548696019305644923246601400368454940846312) },
+ { SC_(78), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(70.426436044750656374763727198158387783441011117362), SC_(58.274655031334242890864641063452258136748048237601) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(67.182119456881668590209547212549397042260000171737), SC_(73.040959319316628591872463346923870223791854677862) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(67.296174885852741545471913364662312666618785212899), SC_(72.951471814372329894998713946622146344875785446864) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(68.23134567569884170429561233132889872860353512977), SC_(72.18650247067321052307576699132990441408903730218) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(72.482454109208514802673589944549141560056853395719), SC_(67.877678842801839129897095245619305863504871673204) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(72.663740569040805992302722492053286398199708740694), SC_(67.656068979822551725958381777326725687648239417322) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(73.426408630030840427266872729925877106098726489048), SC_(66.678643023714659593711276540095160152949326791053) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(73.527519913354658591440335235356903691312930266763), SC_(66.543136174255799400032395335397862901664550419367) },
+ { SC_(78), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(74.570504776286308401704132808392995969181452965507), SC_(65.049583837780643600222073473983157275695251228261) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(67.883037237702601564500530021515735282672672117905), SC_(73.521761879351762644155794825735598660115347701041) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(67.99346729470455738850814359125371087350703425732), SC_(73.436385091821375813700091217059011563811674946564) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(68.898165779135716665224028391079053412479669461582), SC_(72.705213871130125938741802533345688987919443778894) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(72.988359341310321099493793077646856107160503177601), SC_(68.556184361850217330245651452722572288039742057575) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(73.161637909519561878061161640348306894823546208348), SC_(68.341795123605742350149254629147905718530412190201) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(73.889078546202701769627647801447872225917887417616), SC_(67.39534244395318347647339561926799267015896265829) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(73.985311011431170402415399599919268621105858694263), SC_(67.264023107309542706723983737823887125227842591784) },
+ { SC_(78), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(74.974365210633849051984655526774583794183022650949), SC_(65.815065664541557284152329819709461662892952483868) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(73.304455618647976580595912915407191946980786399481), SC_(76.75210412549802484504593944827597388703023676926) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(73.378141271343760371851626266935034943054281758235), SC_(76.70727661577521950577797844930735722123098076257) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(73.975130942847286595749256665438825485449131952239), SC_(76.309384336290618724908928011289984656716411339919) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(76.466246878733272007361857504198625387360193515533), SC_(73.750913095201008034940013271134681612882558921592) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(76.56056903809157532829272303700967246231520071603), SC_(73.609436894051951047164797953026345311340958375796) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(76.940419963376266468475540516877416578452763961885), SC_(72.977063940692095634899830362289227200545631708748) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(76.988437509185908405311540071145851719108698486292), SC_(72.88837719555197816057352844344073011307243397166) },
+ { SC_(78), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(77.441786368881892206369964333416131459357599622617), SC_(71.896105336218724141993111624777836475748285880146) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(6.9458132392291489038850907267913626444433705044728), SC_(13.970276980700601735255642515781733873282679171085) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(7.0568081747540961299601050665915132531984583276886), SC_(13.836795449517586242133827166462858011783176518516) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(7.9990277643957790986709272365019071939676940174165), SC_(12.738666768626891005012980367294980473347414092904) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(13.154756797885136157840075800706545967828992011944), SC_(7.6358308598828143020477308378805458575063014015422) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(13.414980574444300651451796881632537346539199660968), SC_(7.4125467070027878211667338596391762819324180197558) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(14.558416763512127082677278042429029999750948228059), SC_(6.4656352341305925470552786755572145029608559525464) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(14.716415947591449736745075772937811774443205706144), SC_(6.3390772942918271949564010568991186545623342940776) },
+ { SC_(86), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(16.450264905533239567169625148580918110962585928866), SC_(5.016158600014299201442148395655238195137643395186) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(7.5764286379509488731473121094088807228976594207663), SC_(14.798322811147296981833771936641668602193613526893) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(7.6911473632162838516441154663505786535397369750429), SC_(14.661641247015487750409083780460230526658042449484) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(8.6639662095933011530322507766098077076434353472979), SC_(13.536529741061104909108680309505137017335077373812) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(13.962984792313887405218337942726135186356522392457), SC_(8.2891802888203541513825007736369038496769715908772) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(14.229602380631387259343785759213898606735197232224), SC_(8.0586457517182070075888382942427270061330055586897) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(15.400366387267729234352262663622146219751489655335), SC_(7.0798243926246533758050205613749749920790841697973) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(15.56204750108214768212598688379792897401422319702), SC_(6.9488474536893650045343905015643735938507773743244) },
+ { SC_(86), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(17.334907545900045541789199694328819501724917030953), SC_(5.5771761930851915577002965364439080327093883829855) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(14.152544052341125297690598968059413956743114015101), SC_(22.921110862370147433426190115630440823412194553027) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(14.296965147159144952240444953941918720161797722386), SC_(22.759934724724060249246699444149272428353753767342) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(15.513259847605159079635664024437711070410090357229), SC_(21.427394923979231644312102480320665965682159188654) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(21.933714623831016921002090587331003699617457875962), SC_(15.046391626132485873187641096213960562768478204004) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(22.249484312992175781101073472591190497513724631678), SC_(14.758165301042908525239911451603033331518432505515) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(23.629309722939979789825855497122309418803702250998), SC_(13.524749880931188279515365121491234301059717294689) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(23.81902703167861416381282547451529469025941281084), SC_(13.358436199543591127434796603661807762423546422622) },
+ { SC_(86), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(25.886889937109894601641651313701144692765062771253), SC_(11.595921392605201251396507384571311655994866904914) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(65.431407873129473866187907222098304378724475336987), SC_(73.638161755825974774794504484074929308268702792113) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(65.583827497225122270072680729159245572409473391), SC_(73.504662912900637122203408295870761092400605276157) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(66.841993311893388067741365610557157602897067430734), SC_(72.377746546528227937594422835123641134871274313077) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(72.810845379145839214622217853006470719787899918954), SC_(66.36435494887230954770509248099492672155561208993) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(73.077893265133970868140692841687714030591484820658), SC_(66.066208917378633799427911066047212373537458212798) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(74.217669915889290904025349679730309526863621647581), SC_(64.761090996505632093466336881570837299668209147732) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(74.370965689829175068477708884263996557746047555922), SC_(64.581359804083116806418562592965647970102615924518) },
+ { SC_(86), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(75.989210331825244956501620559492242257802421361584), SC_(62.618062663278157974115412221599622246935980424473) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(67.358411318767441717974677592541107425870655318786), SC_(75.196148255238443992248450366597358272429691829128) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(67.504983072277283780566850134910883988177308309477), SC_(75.069731582973801652105850918075813677730068288321) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(68.713632427999510219067731875276829239875538597997), SC_(74.000875956704331650693968328532006514136943513147) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(74.412014867228942289261902287031488007619846418845), SC_(68.255057937475010259989054255465463629239581549417) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(74.665305199778665960987573613233515304853133004433), SC_(67.968645302350124562516193790695585961327917663391) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(75.744378047998858796911342508821850605894936715196), SC_(66.713439693628400894160222915163162307211335394297) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(75.889249472340800294187941076943531699376976604995), SC_(66.540402759581842369008537079166646220366352347298) },
+ { SC_(86), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(77.414336615857410234961033114589209364399614395911), SC_(64.647555822782736824879937440166805990064367140666) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(74.280560204105565792899264034941182265359096407063), SC_(80.435047933607831810092574201084355331362964951028) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(74.399800007466737671323101205941505677065932486287), SC_(80.340343187766454429179547301091221007366112847022) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(75.378067167159335651078460344512550525277358998206), SC_(79.532093387918790049535461537988165124915705988028) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(79.844525996046821761737382523809814252546147966756), SC_(75.007973375625704690509687280588088002200094652958) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(80.036067051164637687101559240873306625217186275649), SC_(74.776151735053241165423718387231750856226274234337) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(80.843393689062794969455400044263577214972748247745), SC_(73.754368135853644899205000776174001008875078731575) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(80.95063341889224311140374152455392944207675412221), SC_(73.612792812538500966689432592282213237409532906646) },
+ { SC_(86), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(82.06048665719460702646117824531393731997649069726), SC_(72.053483096160489860318184259123714632206395794888) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(75.047566296710508804105560701167719801433603935752), SC_(80.97108128787527023700521915894815220037159658513) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(75.16299082171825432268168581080614380934140329328), SC_(80.880674702052207535592675813988885437325118488437) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(76.10920323648607769851161797032383244777845114023), SC_(80.107792723772017158208205001731122378911129706279) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(80.406818727521015247335978320605109324719290615003), SC_(75.751398795393786414008452023445252478320086386397) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(80.589979851162393740346564954463845877040720685435), SC_(75.527172756055502599196437318837980672891311228387) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(81.360477775810018967177402666075734364204224577624), SC_(74.53798668528137535964062028956141380311380992585) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(81.462621997260557582582058859924324277535107237729), SC_(74.400820465858676410379603253738268856477127254579) },
+ { SC_(86), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(82.516254731942869631602283336588073825361574684681), SC_(72.888496334789514474812560818277562819692781872347) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(80.966536513901647711514244142772321612050712884101), SC_(84.590693106881046778018451889656228247314980354581) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(81.043331870604669812047307540229224661248016855006), SC_(84.542717240518969757775101266596586800567881067784) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(81.666121025181775428962263371059795485118224599435), SC_(84.11884721018919645391414608198100415918128614085) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(84.285576378552851242722368138890277457976363736459), SC_(81.432079580377667728196621951521533389073870560388) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(84.386052288054460594734587967694516337096019774512), SC_(81.284490257052186219273745394348992507528725454014) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(84.792881919346504539283037797094027062695963309625), SC_(80.625503155944509629076817576397666278275689177907) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(84.844629925046726608261790369371208575327290009901), SC_(80.533167450157378773318434492827003614740884164349) },
+ { SC_(86), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(85.339230370096032070734739222487868334586639845669), SC_(79.501227165620096745252089669392865748677099936068) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(7.801145985023555209786634390060878302823223057646), SC_(15.146798540032044618618696769667582084529973896819) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(7.9177911480702794932896409338309681366992069464133), SC_(15.007687503555726510687831747237410012104978527306) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(8.9069447068384104776001009780017419598880066728379), SC_(13.862743176080042879294985239287374474663386295711) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(14.29668160507190083031258913481029068138600446676), SC_(8.5258641767433119729022228379674560721325609618188) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(14.567998530184756618935149917585416621451806495576), SC_(8.2914592966772296215773118275518341022515183376968) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(15.759597854090727025980919437324539086842588419625), SC_(7.296195812169845466519979794257352785981092155484) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(15.924182962796968034385378591474222611875282780888), SC_(7.1630149980545438505539909616418923184971391180644) },
+ { SC_(94), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(17.729341239978339411641471919427342555773712488765), SC_(5.7681237441254984639386594724929362300361626477156) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(8.4952407790762502884294148171732734560738663745865), SC_(16.047201111583644038586704558955395786168140016462) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(8.6157636738504986670494881939769236355928003927831), SC_(15.904734727947326766648557097206925850697300060355) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(9.6368027883972775528501267735691476648690268123343), SC_(14.731513712479967275265369118174985389101090967119) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(15.176310893498349139114865139250984421919596124124), SC_(9.2436417036093322655286955857078670351824812796869) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(15.45432822565433449771111325757287675312840831257), SC_(9.0016816002789885881864899940758956889751053654136) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(16.674583795222815490635985746609821006524241746618), SC_(7.9731924117520267945871041558651972670887244641673) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(16.843032111986809985282402780087360511711595353484), SC_(7.8354138701669740669119816753469280782725608850446) },
+ { SC_(94), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(18.689157852228469202095100036990933593253128212869), SC_(6.3898619968033505802105382948018166943063833501692) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(15.720979149202354985761381883477340231363198612585), SC_(24.889245392034195107580996649610247431035153794221) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(15.872414145087270586233178462247983262369189844388), SC_(24.72106602837218133736745001682764210423807370415) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(17.147028900686247366200323905188333565666862338536), SC_(23.330268114052149251223476965824028254350423277965) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(23.858802291030027259184177219111845868399368618215), SC_(16.657927541685284238553016760867961026392682256377) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(24.188376544786041456147519061526636476043992418103), SC_(16.355882190191059398083782786339730856654296335723) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(25.628114973724624737918831251073553550435749118405), SC_(15.062456822309169971727080308044419856974412605654) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(25.82602184170651971444194179315222305939058132684), SC_(14.887934919287318948010659827834075151488187794679) },
+ { SC_(94), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(27.98250468682738835427953108981114702493060162993), SC_(13.03647421539277724699880442503362385008332999302) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(71.761985502401641809400119600606177916530080831367), SC_(80.343128870284935880693974650974323187993949463676) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(71.920965460109548257549729822061655651186412406752), SC_(80.203056211656777005692075471209842644029125282814) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(73.233700649897853023155070449245731017031748873341), SC_(79.02149255490542621813962817144899129475008636669) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(79.475421834891954830923674185428950014058290542962), SC_(72.735255243192664813730346858503408331313229838377) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(79.755418384011661063264584559051656756651955502721), SC_(72.424178732212054550608230668517194050174101900775) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(80.951442327283864476766669065735610415695384401698), SC_(71.062936052258651628007457863363019012979911268912) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(81.11243426424981550187601841942582846483697130024), SC_(70.875532383897045834838463069899574597626592141408) },
+ { SC_(94), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(82.814132672637175323508906585298746650176297034011), SC_(68.82919804537338968246782623664700123409119111382) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(73.859571674283745724554637528866921244637466799877), SC_(82.055083335237835056219535792222543304497331360309) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(74.012413046512243823687100619117024117574124143577), SC_(81.922381531234332095742681405387251933597827315226) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(75.273210305725007473799076347462365102531700182684), SC_(80.801288631449308233332584723812452401217534599683) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(81.232337422702411951957034608628868006503845846844), SC_(74.794752716760790853658068429232948646409937638766) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(81.498005291024239777685438826771409607773040241406), SC_(74.495983395892053218205804355115518037866354912646) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(82.630857408797728335168743694450949586186578808368), SC_(73.187139615103532318949671652429480674068742471319) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(82.78308929112105577651228821213984079013112432343), SC_(73.006769584441544477241413720682517351707777699476) },
+ { SC_(94), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(84.388033822784174069063020299774251856369061976038), SC_(71.034549039245372247644063845378791168907922456769) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(81.385787095760532631011995482097952344188577707495), SC_(87.822381821250148525729959265990999781425597362135) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(81.509972709964573561429312033744742617473466472875), SC_(87.722703495401044191591531000464516106170584650936) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(82.529359319863293187539717395874296614096317127913), SC_(86.873177882369364592844829548683225816210702324421) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(87.201331196694772835156800875842650807814831544276), SC_(82.143590885962568466362006245838003206817602556038) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(87.402652012492616445307573869941310874183544444923), SC_(81.902025875071559906645072234171695750105619998421) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(88.252548061972664616559086960448901809300266332327), SC_(80.837926809684677600188127197906059300099614989901) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(88.36562618412177227082099175636694832918551995174), SC_(80.690563448783234592418390476284028064275585357359) },
+ { SC_(94), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(89.539104223137902726734580837733215808281797389115), SC_(79.06855390482842967148959365105655443034268812811) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(82.218638360397974654987981446773330285286070885862), SC_(88.413894703795294146860560230620021711899341227924) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(82.33882739198524054548183237665709810226639243846), SC_(88.318693674453272967421104809217091136334070854107) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(83.324648531227060153902371392918520532337137377448), SC_(87.506035216540946925939414351913968001432763456468) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(87.820208543212136470865057850441553586277109362077), SC_(82.951746004152344877184293697040893873356677956287) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(88.012794074606636510527490308420541394849102724923), SC_(82.718134578156719734399077338962566250474653525059) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(88.824330867726189930373030685822202331436244582328), SC_(81.688183719576963479853887755445243804310741190373) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(88.932106169193255994075375686470609054114880154469), SC_(81.545441017708913025177764516335363992725069723706) },
+ { SC_(94), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(90.047167090419334392854830288848246875570486534409), SC_(79.97269940747037984619521668755044595799405937608) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(88.632765718787040523843959438237494824369514964228), SC_(92.425424902037059080837210507087498486262820595011) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(88.712526347851097058558336647577679095926533544603), SC_(92.374443196406595580034075735690993663845828818575) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(89.359924077241611916690390754525883296187928158695), SC_(91.92576805605481448245153114216349157130107944978) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(92.101919213323680221941518266232699521409470464954), SC_(89.116510980974737484440893820327115971331048122069) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(92.208271093986097477185447060480540232398613850555), SC_(88.963090703759665136095723572285963397235559035967) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(92.640858425361466174354215186087483105177743302958), SC_(88.278726631158769897593283615099380848459302677143) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(92.69616813943873924626530921117852777654310510982), SC_(88.182912734031051207705053480143478087906660497225) },
+ { SC_(94), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(93.230221341776895913396226034296597926358134334975), SC_(87.113179136552973727414101965553584412690168084971) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(8.6632008807861670752536305990337881574438371700273), SC_(16.316585195700711779871008047730587123595797220946) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(8.7852563585694291252402185560061984423806519982759), SC_(16.172081471581745732760251311015062940512785910346) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(9.819362102388435677255928187976591487107044010712), SC_(14.982285928856556977811893349360540028861053730497) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(15.433324795444787584614892373536575205308669028909), SC_(9.4211510038091679975133718560077800598843464529262) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(15.715269413805476311308603410136373979976228317508), SC_(9.1760948884866244174979570140899400756472719549933) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(16.95300494759159880476040498131170219356987758859), SC_(8.1345346496650686442854582992128352759617456805367) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(17.123897960346715813987984637467359876541541227861), SC_(7.9950146222368598165601064681039837339962619558096) },
+ { SC_(102), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(18.99733973275075548730128990694324660459335558577), SC_(6.5312808696524098555214921095493123682045122358726) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(9.4209595691616734830883638570009026989480144752921), SC_(17.289161447518906001659460668938982789231536576334) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(9.547040464693301163395722572143016761179515224155), SC_(17.141153509822953812097311780912807356686838102209) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(10.614265360304164091812956245551206469605527681406), SC_(15.921841133006061032616141611290556434797873836836) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(16.384211982231084429237394366668961678432071190898), SC_(10.203502384260964062506122581960011636245150485445) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(16.673150874364595004012861111794967533335003144776), SC_(9.9505987009254690210168754714620386636682786958316) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(17.940815930625829228051316046074799847941398420616), SC_(8.8745503119417025876364737483462775311429433794048) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(18.115745902300849413171947190638486439850333338302), SC_(8.7302609828513173210279317735874859850733271430827) },
+ { SC_(102), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(20.032030202198952813933839506850730804261873949311), SC_(7.2140323813947691966883213835794825665411698748935) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(17.297765851595619577058752177646007501473097739413), SC_(26.84902375570066638547065701032647157974168485542) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(17.455919239712267057987430915516604234815671464676), SC_(26.674135039297925547538088013756627462993846717269) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(18.78640506120763614787615562107495358758759491314), SC_(25.227518604550054405191519397941397844278788856597) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(25.777338000341389521938811679312747001341356043072), SC_(18.276002632933612657435599267649235016212247914564) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(26.120138770955741398178993776840152758438684041957), SC_(17.960718494252922672721950595213394921473655838701) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(27.617275243377743021780493527081324004076945720931), SC_(16.609813039647759813735958547138523357579275902558) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(27.823027010767748786472664380524856722292710281138), SC_(16.427430469068922284500094321060190604781619117239) },
+ { SC_(102), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(30.06438369134110681557300962776995822948471260358), SC_(14.490821357849230338638528087736993502585288537978) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(78.10039615300577322405286750591958236053874954583), SC_(87.040269321734090024029409561738589564060961411331) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(78.26566097382456539361830804734952120518897514739), SC_(86.893900372269900934920267566210440333416447190304) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(79.630679162951877565933087210749806441736167223186), SC_(85.659987532129803616670826985761789364620519483603) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(86.133872959620059545026532759506843992973821836018), SC_(79.11229751982733938869129551358658514180720684378) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(86.426273695437994238010658108993777627476052706659), SC_(78.788832271436964907540910944878944548619202219092) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(87.676168654511358384674558350407202513595465685562), SC_(77.373822385245469155081121210563135575641940288225) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(87.844529934033355799975384393720058454803905486953), SC_(77.17906939928371896959490624410935820213959972999) },
+ { SC_(102), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(89.626102849127154070917764861650899081988970160995), SC_(75.053211446557898553293301313237746467799228780495) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(80.368221855363800275965452345572746319737795377984), SC_(88.906536464729878563341780511692887143269671639171) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(80.527069450737181489058959815673974300461542066985), SC_(88.767815277331774836358084340609235267634988029848) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(81.837828792598123861543181425071304778505862769015), SC_(87.596684296316734349520167906029366526883423676846) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(88.046806559417840350104581495898989986520215337937), SC_(81.340320547297557910355696237728029137085331610689) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(88.324330933449083898594589749913687220667400378953), SC_(81.029712455665641980104328855593562698901043591536) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(89.508686589093729073095346208857175041023836204476), SC_(79.669484766715716833161768480619456437287552993308) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(89.667965656784124129044041494648656957301348071564), SC_(79.482090693741057056615544414926317346718710125836) },
+ { SC_(102), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(91.349330200248507759373895765505184814675364584523), SC_(77.433857666854521496278142280242603271645046332251) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(88.496944143689839974064880142399399122421418798751), SC_(95.203807908491592754921368028304619187026556668376) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(88.62586713045748479785387297790611141522368402543), SC_(95.099368462266850366769747094419820067003444417935) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(89.684645257649711258721241906909193080856329278709), SC_(94.210317023019982926624846578026130905600785966562) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(94.553526984142053895234741208388602857234125363621), SC_(89.283859876238198013154529891020569871694347928421) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(94.764213027344307199573875291465347838679818198277), SC_(89.032960910555609738122814260563654903615281776267) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(95.654857298507168065316776638358173384871516169874), SC_(87.928330569057151162483148144946461774439825879857) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(95.773521395496859758674227300977180608010015717548), SC_(87.775424070431993782714155785106323195971078701168) },
+ { SC_(102), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(97.007812345898782857165691620029024523601422332773), SC_(86.093382889551883942072273258481831603525464338284) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(89.395427538492976862303554768900632532721806503029), SC_(95.851017272542885795257570181708402025736451036344) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(89.520180163966281655564824584317287299335181108512), SC_(95.75122699160862670132697173474282858991364755106) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(90.543944831011421478385217143000909280233831587416), SC_(94.900480534155618955090706058448722084861138465369) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(95.229160762391208043913872496958433622056134440103), SC_(90.156577962677356115108678581663003821751109090593) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(95.430770753461278770804453920308206143415336067028), SC_(89.913975699861523868827071299305388222957731219112) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(96.28158714716449816069448899331779475256808258825), SC_(88.844979878071455830584996471642292301632396001996) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(96.394749337786047118544038419758416132005743090617), SC_(88.696896813985452715473993989025330181119786304891) },
+ { SC_(102), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(97.568509006405942907421906549118839395958802357751), SC_(87.066311152560258360005769540860086519286534578454) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(96.302612858518283709246934368506433942499259910698), SC_(100.25674401782485230570540263931807103408593637078) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(96.385212641033269959086011893082429190894248710337), SC_(100.20288305186671121306217580304109156049220220515) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(97.056178246072585545448744295093487819877895554447), SC_(99.730440044935050677374566021854396718364421462783) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(99.915620606945997082825044830771434239963476923664), SC_(96.803788607648547633731025849877009625629843362907) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(100.02760280613057254423425393587351724682083382942), SC_(96.644783955039517995515369932585560488422334349434) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(100.48486204043269995352945994473162591927761682462), SC_(95.936123118466509565122023291719833223677795994635) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(100.54358218677394102916984114271044167233384726745), SC_(95.836980016962354943183597806948441580975322885464) },
+ { SC_(102), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(101.11542285588358068003997590845367290788097669958), SC_(94.731087264830922630899778436819099173707655975884) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(9.5311992295056841462628434239846898249452970051196), SC_(17.480418958328505207260538231638427453951331258138) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(9.6584533041508528619969444531802888379257874721588), SC_(17.330731809622492416863120459176405836205473307874) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(10.735761049939511999177430337333042074329584380849), SC_(16.097821406636012344517927002712726638397045351302) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(16.565299492183664773996318158323627932567769426795), SC_(10.321084676314554239255625432489933480208823724416) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(16.857460386951702723034998692995951182028584417416), SC_(10.065791960949573590646309581770577560927767636161) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(18.139541127452114554913425450588176959391602210312), SC_(8.979748417015074101220364683626286051258205885204) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(18.316496467444591789224251152041275464141671740938), SC_(8.8341392015703380303470453311944536570066600821417) },
+ { SC_(110), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(20.255550519206839043668944319526734618212855652425), SC_(7.3043157564650578152771580085891623372020131841304) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(10.352784957695106415384161662722173698759841475183), SC_(18.525006793352553594391943383795848970326679739823) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(10.484206587558023630306074730542777959234859321959), SC_(18.37167226861510913165720573060813802702174526073) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(11.595820390961819270439100184871235739716557277055), SC_(17.108052406435486520718512179244152127120867942847) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(17.587317570190287728608547891729978050981432786118), SC_(11.168138717341224366472186597008840737948212047627) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(17.886755345001343380288732866080327327512632241142), SC_(10.904717157439616652245000363036567093007185564766) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(19.19999009644968147169669237617423114964817342146), SC_(9.7829703674417416447601191973279139105401365579394) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(19.381149487689537484752879539375268680964631170468), SC_(9.6324266359464271487155559676217879711661768897294) },
+ { SC_(110), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(21.364849220523239504830418459055294239392716287481), SC_(8.0483401198573268889581949104829694557915698010208) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(18.88193744861250885407727000922396593115457303044), SC_(28.801413797178619584075281359169255681798807837557) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(19.046548205788864576436301751563902251246270216112), SC_(28.620075464100981748779043570084250219002722135071) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(20.430740960559105594550271105332990851877554732411), SC_(27.119797228136994546970497011228178005608058541436) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(27.69008023226574878169283616456290493155748131413), SC_(19.899861294734220892819896545780896217097418279213) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(28.04559649468282024176106651348578921854475971442), SC_(19.571851123442908728509388752516043864164971733774) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(29.597908270950176889218065013990342729413992018948), SC_(18.165700028813246859764645137002658515267245113205) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(29.81120041693909230812631468254644674091953158368), SC_(17.975763581953372960805913848879708480128263452345) },
+ { SC_(110), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(32.134122774595544213972101074336850438105758703031), SC_(15.957354360004545078336007663886168868210267885587) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(84.445731982734573228514115285672497857063836680566), SC_(93.730489351315609549554036910315394383223308268403) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(84.617038209823759124007800202453407117172816957677), SC_(93.578069187195003302460148504530958306117146094544) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(86.032318226881423394473463982235356780299269343234), SC_(92.293837610839661238221835143223693504601729501887) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(92.786906519476999772050453176275702830807230582404), SC_(85.494770245738821129984768859211851462623005459924) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(93.091230373089260591595694835435533440560578888559), SC_(85.159395166099199524011066537053412218186642566661) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(94.39289811472596815107740575037423278981834055352), SC_(83.692701558751675278649968230278392016719008106057) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(94.568340357738521297631142403886491455369613685215), SC_(83.490884758444170268245624538028169446073515867682) },
+ { SC_(110), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(96.426633907825001942092980466101610565821706022826), SC_(81.288605752396751908652355598623044612606306990051) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(86.883493364703087667890541611753138841329973369939), SC_(95.751374139356056580938832283449403606407300189918) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(87.048114408257289533864831333469452350304726018651), SC_(95.606868200728318119866305559679066410346455278925) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(88.4069036207752576128908842277112264287421047613), SC_(94.387641942629699353156760407026847366263489384696) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(94.856098570513961897229749444675951748994394581185), SC_(87.891080675637989621508437680801646110839924005376) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(95.145019155112401475914331554375023336892150100475), SC_(87.56909163985267423709405610182955322612335514176) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(96.378869302946612315216721396889334141102332223091), SC_(86.159472156520441183060129479254309198128574424277) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(96.544919212415243505129221767441377688346510206447), SC_(85.965327069125056999966892559752702478005688762392) },
+ { SC_(110), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(98.299676434654431821130035470603843501334645947136), SC_(83.844049304667358475111017410878023021934387426832) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(95.613341419350033545992164658934422339977914941371), SC_(102.58001016800569317930686656211982320999058022544) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(95.746817620324770699900424946019780004668689606918), SC_(102.47099698095642986175139170887421259190109884851) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(96.843460118127644940785917756029322604791833238296), SC_(101.54396464890553009117648492564268216904035410906) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(101.90164472746385878017346583007791798411635010629), SC_(96.428239157637359601598826053621780942117848804625) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(102.12133002404691705111750580384244923317413954869), SC_(96.16836808055239594081995983838857754028761968561) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(103.05111664638367532524388715469442488532276982095), SC_(95.024782742177757682528412151413819962433803238977) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(103.17514446343391510399479696269359385850998195512), SC_(94.866549385346926568834636264333042060733933490013) },
+ { SC_(110), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(104.46778032848804609991839734905078280228134895151), SC_(93.126831491287759242155830626631905077683204869898) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(96.577268255645872260217124892956649447979952522736), SC_(103.28310752388057060861258211136239465162366842163) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(96.706406973493689176394357091778058623212457609772), SC_(103.17890893525577072689399763090115222196698167628) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(97.766643513745322888043623580687139481148256363294), SC_(102.2915650063524215924844656733913255655443644485) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(102.6341865062394079045880502557367683126898061993), SC_(97.365372488632961487569633614272722940298851007608) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(102.84446788327680091928533131189466619090743442466), SC_(97.114128083162065404633450614152965732379951020718) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(103.73301285820780601854038503195990199217206265326), SC_(96.007606642528597306650663825503412595498193217587) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(103.85134698698012056956239072423837436298150837409), SC_(95.854391729828185327631572914798186390827310015072) },
+ { SC_(110), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(105.08141118285361256949969877297338048103034428707), SC_(94.168233132529090081436684716915122962817931114362) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(103.97565157381340246914904601541398189457031869727), SC_(108.08502007846483371724543358606478969673259944166) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(104.06097914419886624979278717246735467064606814919), SC_(108.02839286711820890696390854754148299501074663144) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(104.75459307606926636092702397206406620458067603031), SC_(107.53310596229390629678529754771993683603328826059) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(107.72696657343394690656973274374203280742551497175), SC_(104.49357613388784551183399097283639554755036942631) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(107.84436029241709455399960575448125211159580778636), SC_(104.329204979801841124202299920179642338448355729) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(108.32532128823860819514357963868981683768366936785), SC_(103.59720114487939654393782321262591848160447059253) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(108.38731607810520439284454618069018524759691977947), SC_(103.49486029911472453877454432565460982330324622811) },
+ { SC_(110), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(108.99541996323565737934372266821034303079456117103), SC_(102.35424895521932015307681694777176335089517201142) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(10.404501822180385700715329671490535462630986873634), SC_(18.638941312877205514365907274862319688175417653472) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(10.536765848606679942303482203691810453563129513277), SC_(18.484257406209677342088827220163401105367779168761) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(11.655715166903718791230785778321405230385252251589), SC_(17.209781383196939029398373261113014637613906663332) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(17.693108649339633904780556983925842663286232694063), SC_(11.225166863786548246823738433355908965051053272772) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(17.995118737395024896601759117583489732424163602795), SC_(10.960007236823616293030063800755114157200700200648) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(19.319947138671172887213278184134339524908392023266), SC_(9.8310960070495122263777473954746299894746472540517) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(19.502745819914267349231266496720412950894976684918), SC_(9.6796201577950928915639679355404161490180214919567) },
+ { SC_(118), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(21.505031334616551708215451533553627793607494157515), SC_(8.0861528610157949697291459816373044363089825950917) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(11.290060229086740993600074469850161298532583842386), SC_(19.75539587669619285074112582447291810107620147674) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(11.426628982317421122542578951235289221479887389598), SC_(19.596926524754548682206919025850304542334728452549) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(12.581029517659022550051490169576050178074078636458), SC_(18.290590850875332123078143444122104031048623960171) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(18.786144097236733234020941932804021906497188858402), SC_(12.137038489909107314374033231920620418954749459132) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(19.09570361665091250594247179237693747499603973208), SC_(11.86347863770244820723468354569350842965401812574) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(20.452866953416694083098789103489286923299305422463), SC_(10.697691454120541570842437245934478088498598946257) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(20.640030833046467922146960501700284163176079993796), SC_(10.541121577332541157735657557605726265300940662967) },
+ { SC_(118), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(22.688700986191269352955390042166422508447653676008), SC_(8.891682455729345206656431975091274946818185167209) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(20.472700422244131074441467612913645720014152640566), SC_(30.747209824566426787929759373244556083970373500121) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(20.643535782941428117416802894626612379287750408983), SC_(30.559653609449400412440246668638297005716880023987) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(22.079504915033133265125184944045933803025485746634), SC_(29.007638177464812930088288539398026771358542546304) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(29.597651526913630927095933501178999191487379791693), SC_(21.528883060551029329325136664163091043655789109376) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(29.965427252399173451487056306274131048893296224246), SC_(21.188604273990333212517389290053489306004734324417) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(31.570931288316848106432929757652463897502103039966), SC_(19.729199955423354569369429749012240947930875354495) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(31.791492200064023216783769047971045739189137450471), SC_(19.531983058789152495905903663320335639789020293151) },
+ { SC_(118), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(34.193030856019682819754802482772208848939143743906), SC_(17.434755051070521739274216035818712407458037151877) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(90.797248021471103618264083483493637293116464626711), SC_(100.41453281768142901195422247191773745981608247276) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(90.974378455795622071247116507700159314179736748532), SC_(100.2562799366581161148453857152259630339437499764) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(92.438116732889332978895579938763830836429044401402), SC_(98.923540650745538007584468314059980491562319053542) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(99.435103724984032846794406201240865035557215406819), SC_(91.88208949918755465831091531489242648980288150125) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(99.750921608720062264007968050283574636962636463589), SC_(91.535231936396850534984075833245299081280171979469) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(101.10249160539694448556532591472481321373765212021), SC_(90.018713314645521576884828359124586661691168920011) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(101.28475787858887608269666419734618452942268726978), SC_(89.810087334240168693849810476834797191893361611305) },
+ { SC_(118), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(103.21696535239064121075578887781803739517044162466), SC_(87.53415314393764710493553127385326824565189696659) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(93.404673587163035131593981396699191769568964798265), SC_(102.59030758911368759256890854971815018735212916476) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(93.574860417883339060008971120928792123311032167247), SC_(102.44022605145739860082028361870842126203028049647) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(94.979955370212930566917859006048472550072649652805), SC_(101.17463717710367982294708054459058768121906433434) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(101.66076885078961354189138396003247954028425496839), SC_(94.44647450140145073212726982869152313010031906655) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(101.96067513250970868842463316011127168828291763115), SC_(94.113513046342276929524519788669073542555664180503) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(103.24222906619147843735461955731802972380439362952), SC_(92.656278889527315627661004693822844358701131846015) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(103.41480366886864742875214578262973937925111097375), SC_(92.455626283608250528748650430950016252448791168784) },
+ { SC_(118), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(105.24026060384639529306131125289380903325347388253), SC_(90.263949307875257237406270601468463429622175104081) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(102.73441318553958687286478882128168154020299460939), SC_(109.9515502806333607118067657994402479082935970167) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(102.87227835022307980232344301148186227526107533675), SC_(109.83813021950417612279795935674072464784440540613) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(104.00542278092588518196000578864986371681613388236), SC_(108.87449396132728777449159443693478629283840436512) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(109.24612118209186814047626238211895432913494446203), SC_(103.57628498200538145138215961411046650472947351606) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(109.47447953712416375306922539803808753432248563691), SC_(103.30776461223548096513176825856144634968549320143) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(110.44197868931555836014307009564906587344466170321), SC_(102.12663009610856071860265691497815161571096908951) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(110.57117257773396737429866496207213267843743538218), SC_(101.96326270849367583745362768440114193797899237003) },
+ { SC_(118), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(111.91996445899388029255441375864341567734381212661), SC_(100.16796655171222793394095819705115976401659742693) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(103.76361481107101912465786205561847419200840619299), SC_(110.71070637081783873621309107090531887636287074222) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(103.89698131447571311636996483906208450772478165244), SC_(110.60226058639410474056509416899278614589467719402) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(104.99237683579703410209745850416038339740773021813), SC_(109.67964755544061844611624682788566829503053165786) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(110.03570601158909794455598052088322962373930911656), SC_(104.57770148115575685270386967116524105122899806124) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(110.25434410208696010831280455112255944011819415401), SC_(104.31812601153604625465767153633418289853659535545) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(111.1792369010053383922590890341987846380442189101), SC_(103.17543393614332262433481443861492100031429779215) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(111.30255186638157567490432690321752458872548468631), SC_(103.01727306845828104879011315638072306547541818495) },
+ { SC_(118), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(112.58679829137816265038713437272686581616892401284), SC_(101.27756516651305774583863629117905356591364328281) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(111.65153306079136030472464361383372064044999486834), SC_(115.91056332571942716785269851004123774319607026549) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(111.73948914503923842143528709198838532647260731306), SC_(115.85127133526785874463436195198998548291911131404) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(112.45493124343788925928275194367636669204419208247), SC_(115.33396912205325572344372937446839188763779296631) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(115.53619664900614513226627323943613692533239055446), SC_(112.18559858389987209196120172516843378557017168327) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(115.65880568752398040093231572702132539092403823872), SC_(112.01605525387694196326991028449752882969348966202) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(116.16259710230660219192291858263010407108967382139), SC_(111.26155856881104039153434436032797437014621967278) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(116.22774427454560352129688250375626876727996096302), SC_(111.15613708951556156153910218993127409333210950939) },
+ { SC_(118), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(116.87072316105687490671015767594797396298978146706), SC_(109.98208942093409763814941812150282789971778776213) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(11.282576314514349103677126147919154466117952175614), SC_(19.792686213986515693786581259393884486607316406882) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(11.419680812441834156668679887817997007868316065536), SC_(19.633173412522187082865638075490664648753938635243) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(12.578869048847407323677948837636965502126203219348), SC_(18.318525247029505770328824186448433529256441217135) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(18.817170920232743182670258117612298902761819161798), SC_(12.132982309151151670306478098616638215169428375153) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(19.128700024080038265001276324914078301555329253541), SC_(11.858288085629509255540035838405656900789724415391) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(20.494839514971836083902461052350331090539258289101), SC_(10.687960501768540234723303881874187633743038548371) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(20.683284668007751745196836496439100455921836594109), SC_(10.530817792791598546835518328233099618800810529165) },
+ { SC_(126), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(22.746662193828527941660552936662158462346081873275), SC_(8.8758987344722695298715416048005252992874590060943) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(12.232238469081499955790374060700653944359601134655), SC_(20.980877037854394085065393040378733001462910557322) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(12.373780386452849237823605680971287565262568091813), SC_(20.817445306260873917814533714819967966287725451764) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(13.569527377923134706918282761927211506472326474751), SC_(19.46982549296054554732364934998508682331487266992) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(19.981121472390240749262775387335041635046789621686), SC_(13.109774900654669333520423880089194255019602559786) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(20.30046350832794554724505190946476343660422737746), SC_(12.826417988850775960305454535789716124465876495081) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(21.700079647756784419354467632935738096089107104022), SC_(11.618079982983610900768583958322363279525777864638) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(21.893045795347720910361514476588633725817845138827), SC_(11.455688887033655065512459812648808787749068095054) },
+ { SC_(126), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(24.004489144985436133467624179125947746100484683357), SC_(9.7431431818018571975491185700580332728587613132146) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(22.069393901322386328476935543432477872311354297695), SC_(32.687073275916743253960594439426726570782118042714) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(22.246244599021445956386599961913553114434743352505), SC_(32.493507606912343497118947481969047579011490056875) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(23.73225391065656341477241324855948721498498921739), SC_(30.891486328216096829691724509066577244156601035624) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(31.50057032894149954451996483428980298420323571362), SC_(23.162551018640173468341426180948624821359363546933) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(31.880195278477987430070835135502677444437476315292), SC_(22.810414987437459631004500878064082431544593813483) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(33.537108025722101457988519109605297246169464991662), SC_(21.299548611439443146608866042394898569047753716988) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(33.764693468867402084464052672758683276841975902104), SC_(21.095296970941503519056843208910117289912566610319) },
+ { SC_(126), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(36.242197344446458740905510710265450122095646392107), SC_(18.921927095193265845345086659391837358175160558313) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(97.154323984373696265154412101133906923833884615106), SC_(107.09301921153370105254661555056023564614888081212) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(97.33708328075317954483589824805895909272332607675), SC_(106.92913001609833456882728226334834344204249828167) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(98.847657415538995652069655801907106088036540103353), SC_(105.54951150896702490101080354617765636912538960541) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(106.07894879795899129021673435810095307433112472289), SC_(98.273769057451193332306390300510408405147452042085) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(106.40587486887334402968038264694092212199027815955), SC_(97.915813434710968321342089969311434063952075855082) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(107.80566586411666804509597065861258346783823108798), SC_(96.351141436638236687929585990609985720861490752272) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(107.99452534686144868774204067514569396617554823605), SC_(96.135935230182048384187120156367855131362815817807) },
+ { SC_(126), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(109.998127751333590824154261691293251131849652443), SC_(93.788831813285187838868776010989958091903496368812) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(99.931169227341946702520282339489708751858167037339), SC_(109.42392912260114452872595635211672199989158984468) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(100.10673508508494155297684672864242369546589799879), SC_(109.26845996119357596099969446062881417947167336009) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(101.55658487777646067136139327017990838490094446923), SC_(107.9580663386451183616584520308989074194673531331) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(108.46128013109920726217545535154511975630332742707), SC_(101.00603693102101868316615501602274109543649218665) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(108.77180300493578439743201199661075128700131340323), SC_(100.66247053668645026611294374800739585657110662279) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(110.09945145606157494170304372549291724732597914146), SC_(99.159219910983229333797992960016039475572783756255) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(110.27832966763881936919431115915692440650127714509), SC_(98.952278715925681604840625946585433955873243971751) },
+ { SC_(126), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(112.17207027320375668496677898573600672739274037584), SC_(96.692580195315388623264031756780549837614127981026) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(109.8596886924119212603971363664420391521833579918), SC_(117.31889614879852038418961991952710034870300330525) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(110.00179513403159423295604639084085845161419864806), SC_(117.20121905199894747326643795635195862722905260824) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(111.17021615726072424416709670371323617125244947302), SC_(116.20221621491884089791674974157198832178668867318) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(116.58732046474589977721124123395016628312950843912), SC_(110.72762812036017210042136750562575831549850721472) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(116.82405875072542078464502491075466195314143849196), SC_(110.45074879378766299384163341024104354109157843107) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(117.82798671337136673566852387198285546329587220182), SC_(109.23332910187369887583627727870458413973433985956) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(117.96216940504418422659305482435396225373017446561), SC_(109.06500100884928839752441087801106430683302134663) },
+ { SC_(126), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(119.36515855294228625329158503898947282999580912119), SC_(107.21601192674668705731437757934902155865947473937) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(110.95401317596261808263574905798021341180582420505), SC_(118.13426448851367332444286670524786121062666384247) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(111.09146512778697548390067975266778167084028079518), SC_(118.02171615832703461429648640355241481879153890266) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(112.22083888233413132518590553231688750899132179388), SC_(117.06502760362601474622601489053655359798128499597) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(117.43406970147550859668027897255547575371674770271), SC_(111.79320877634766771879149579559035959967979740767) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(117.6607817549785791085401692223912722817863512441), SC_(111.52558201187455966659002997163101004480604795891) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(118.62078290546241610357739644418798837938629372588), SC_(110.34793754956977423300949994479301195651592073966) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(118.74890735512541530140491776176471133379840587094), SC_(110.1849978115774059117046635772758133297651493946) },
+ { SC_(126), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(120.08543780834901958650753984883961829897824255622), SC_(108.3935586086277906742475464547905609163984682111) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(119.32996767423927810254632032210432875148831487115), SC_(123.73363652444767179828936999195759463333486167797) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(119.42046305445129755014720157643333632756225021377), SC_(123.67177135581530255522101080556469573327931151991) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(120.15699588553256673359642070352360809466728644663), SC_(123.13320153426021900670120466141123950224526428985) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(123.34351346463359047700086477108916124576489719325), SC_(119.87962774043454997690173775134994014275739910067) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(123.47116078057844177139606626940039347240976503115), SC_(119.70508695946898822175765857231074130399626997453) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(123.99699585256225784950683574309476593078726737969), SC_(118.92886140656770446731835240466413429015556057235) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(124.06518489225471329964063319278234002616137641504), SC_(118.82046448170754762933210389098080206569412137714) },
+ { SC_(126), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(124.74177600985142969515653753524211323430250474787), SC_(117.61413137674664647430428869322814194914254850327) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(12.164973793479179055838591076757301598446237179049), SC_(20.942103743437730006224316187647871075790002199686) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(12.306765407217627789092947349271005159213199176447), SC_(20.777914064596120148747915355600001193009427892992) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(13.50492277074412647982037799845184139922045258231), SC_(19.424355930760879916599378543825950177092348045224) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(19.937839204252561131072238257348163265847413097561), SC_(13.044180663342977448639702370856465139889346258921) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(20.258588256951454780129873074456155071690054567523), SC_(12.760252684939217283508240344352930072297585044559) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(21.664737913463933292206929775917790595349907612192), SC_(11.549821877864571628127206783261101748629833723475) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(21.858651298510372290360371520193358669543384711849), SC_(11.387192944205093453654678628915644658961741548596) },
+ { SC_(134), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(23.981184568737368619437080977280700612221952488777), SC_(9.6728015890602524782674199585996387427420420479061) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(13.178858481859951488915907865820239149870591801921), SC_(22.201912509296400983747438576161533135535857773455) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(13.325216140733304316719571043150832234157758880944), SC_(22.033674570605443518026151843187672293451052755595) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(14.561005661202695855695530654551488370630968624221), SC_(20.646067410792168164361331294777082378780692225829) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(21.172612105170135100637077372995842886930104631039), SC_(14.085987875599015550688989868298865689606035208424) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(21.501429387445227133161093131306204142828039600692), SC_(13.793142837148418780435666836090845001119429391587) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(22.942161865778646740007785126241805465240215739942), SC_(12.543601867939642901052203892742089303132292080874) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(23.140747191812499679029649437166549967717287060248), SC_(12.375574872437885521117651832873486345113624083352) },
+ { SC_(134), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(25.31297511671939868624703913000220666140685395202), SC_(10.601951243900023506133865158724124005265682572253) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(23.671460557071470136411510801851150686353157815111), SC_(34.621561896755696764091388426507677903650637782346) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(23.854137117305881938904950115881024499072786614015), SC_(34.422175557424840322376377621526235653181495247339) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(25.388614192816636239743116710894975764590105822812), SC_(32.771716845500194041733317767837402412259148316247) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(33.399273838766922738633252613646971016957581077497), SC_(24.80042912619042845314064094012879859748216042177) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(33.790376379299730351383564777068721506432027450583), SC_(24.436808417649488898004140645685421342210459638286) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(35.497082433247449945694307625435519018104899843602), SC_(22.876101664641943736689916586543086332959586486582) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(35.731471241498740358190365799076468967496080481851), SC_(22.665037656869067067291360162942566219521191018217) },
+ { SC_(134), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(38.282540451562628725288414424091173491771301836487), SC_(20.41794699216846987575950781773694454403444863894) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(103.51643687806312053300603438234993262919863049639), SC_(113.76647094466222369290379918057565494655358447561) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(103.70464811045967852123508404668450557228279159632), SC_(113.59712323297982176183217896745365904874052790075) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(105.26058843585345237853011085968676594550748227771), SC_(112.17210020157806590218002044321176995024607769718) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(112.71885021286830058979080945915053471833055578593), SC_(104.66939893728892398296806830559414248706811113392) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(113.05653506306349381326663688526441684189767171776), SC_(104.30069348888752321743428971443084105001681594686) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(114.5030251489528990894257580889470196237232631515), SC_(102.68938209229292626513463441034135993330316793505) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(114.69826898687911147613486903141407014873767100302), SC_(102.46780297816678414529270054433203534594739138392) },
+ { SC_(134), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(116.77098895783546051134123705852799808277957961592), SC_(100.05178060261864140338932850882087173565907021177) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(106.46248008473228756043679937024191884139744342702), SC_(116.25273821956778736366837686930927198973349457211) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(106.64325582453186914057809228762395321149495234283), SC_(116.09205158245960321311558706949693495264494585162) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(108.13645559936848440030409516658339549027317340719), SC_(114.7382638351776232086332233225454083655623902437) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(115.25802276638601150332776916988123675009993502773), SC_(107.56937582997085787106137296359572423659091801208) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(115.57882801037387183187707007864632615096613181232), SC_(107.21553737361888421316737561198829200345926715344) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(116.95111442886327284069264070316430397981377280895), SC_(105.66771770076939782951272732123358576604223023792) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(117.13609624213453341206011426080705668671787372844), SC_(105.45468614967999360842741982478647538797186753159) },
+ { SC_(134), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(119.09593690150308349161415891280758621781651595869), SC_(103.12911822278080876770633125928983087812629206318) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(116.98877124943269649500704069322397388246221261435), SC_(124.68244241169938565689006019077068839790183212799) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(117.1349852375836192689356964644714035664082730024), SC_(124.56064379919947925342031700879737950874591996734) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(118.33757307076942355580039952793973481198311794848), SC_(123.52739419387184082523541152400758865382439529485) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(123.9255498857492744756672359342270987565691603662), SC_(117.88195743966152071432893658085665625507479621556) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(124.1704028137552979665789870356007477821411951818), SC_(117.59698211258788054403431023425851371010134540885) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(125.20959868801516376092982957287237522824843028325), SC_(116.34442176030631494253059206636460548742221912158) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(125.34861001869974986697317961543404317750164587136), SC_(116.17128986289294967877620647793897532302807804299) },
+ { SC_(134), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(126.80403009501984340283114198668443370391032243787), SC_(114.27031383229093680053634801297401341127846331405) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(118.14808078648710633999023280040133689903874847088), SC_(125.5541620296957555647865676312078478137616519852) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(118.28948930488464196771593540401522077005686546952), SC_(125.43764196328861561700174822237859536520114870599) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(119.45177192488764490099937017194749575462799821165), SC_(124.44795799571301415952065069242583222387922272413) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(124.82957337891704348158898362026531141240538937072), SC_(119.01159428411239698568182960197205421247172338741) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(125.06410351835422765556120215967623882348916175929), SC_(118.73616960442182199437256023711726521364350775132) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(126.05809230270001837643353632368389867741028810364), SC_(117.52467580221916362549441319753874471771057760513) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(126.19087145390693346727059500803176342103152956183), SC_(117.35710843884018855772999695555813223818525177658) },
+ { SC_(134), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(127.57797497037001166895897816061520095964573740393), SC_(115.51558289033520680083317010292724665924207426321) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(127.01071178257072634947245148293064635859502935035), SC_(131.55446414066887224550652711288484651595616080401) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(127.10366571036574603591153740233558230541692508227), SC_(131.49010892684449462236541745470395613282046136687) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(127.86062156511444338094827427503359000966961199519), SC_(130.93095008947311222672088836102200824329120179699) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(131.14909001692501036831198211963395002056480332785), SC_(127.57547172865108381096640752124576970679290478098) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(131.28161493190187081195636599904069640190922498682), SC_(127.39609170171313630690463721296956091996937312637) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(131.82877960084093564100603572279190766812865818756), SC_(126.59882869869713603581904268864670534578961118623) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(131.89991018137578984494109489185270830573155414953), SC_(126.4875514827833493769465357150649957500399321071) },
+ { SC_(134), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(132.60896374121318090743343829459226612264081427425), SC_(125.24997337963903660789206665220185538496106337751) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(13.051311557942732330100992894414079516115140246443), SC_(22.087577469526451109510918414920898740083265098605) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(13.19765065108550155588579574934561682783279090778), SC_(21.918849429942628028390444536789279409363793687465) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(14.433620481489611762311246505581780093141132930276), SC_(20.527531598353096307610225185043541433033617879493) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(21.055414255807215608171599765741975617262078390726), SC_(13.958463124006131095158101367806055401156282782225) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(21.385110704583394323307726689081546392462374964229), SC_(13.665575432701713202572764889119755525251576250857) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(22.830085170722179660564927484074763525194829482865), SC_(12.416236966064568715580776019387958350485272932902) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(23.029304414696760054329901292750945609954289167621), SC_(12.248286178766206629905277192945503372783229963226) },
+ { SC_(142), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(25.209230117936614074173897090141905670769153830255), SC_(10.476221718481629350464317199382694439665784414003) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(14.129527095720859029705475912537865984198255348789), SC_(23.418896233014534313195864097862733966165858344731) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(14.280557145087258830518366351226867087004546441819), SC_(23.245994392898230116951993332355571229502138891508) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(15.555201375110275521064980460861869915471737098506), SC_(21.819581726000994004961225177137395119233681954087) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(22.360924871573638540784777395319385804932727868424), SC_(15.065370327686753991293633864933642730879268136534) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(22.698937366862419508306371766408354652222963011165), SC_(14.763318590023063467942746964355523316768735042506) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(24.179568419819397037150775845084221744665709553222), SC_(13.473801945169107054408304962879313952309600894719) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(24.383606128926857063460886022132347888875440578528), SC_(13.300307704913772715883232859048352099027594199944) },
+ { SC_(142), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(26.614807582122391740428923677579586880422250318544), SC_(11.467450452285168793190997629438427766905275914377) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(25.2784252262898104289554838033379519728955415253), SC_(36.551151163183073355291998216394551136478462361247) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(25.466755030144293186977538445749252741701415789731), SC_(36.34611619636798190812364738622402462628026398619) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(27.048266997966301787442104958957686759673094716433), SC_(34.648649581011075081154131741111737527725699653697) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(35.294134792381194394311843035725743300216672655181), SC_(26.442145537700519403723880742530746188547480275515) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(35.696376198084717339577669122799626249707828359283), SC_(26.067379657847349923814705284129734246254490321989) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(37.451403437054149762125155603122341947931536384532), SC_(24.458309880478471885326825846061774640388186038211) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(37.692394095701388164369318419081106130685073041892), SC_(24.240636027512329967986667724085386175137935805717) },
+ { SC_(142), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(40.31484263856055765083913484670862592125345189095), SC_(21.922028173945326689371665427267923568730344447273) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(109.88314089048533942609869123161959621882652055866), SC_(120.43533339399250626974577090916531603672750878716) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(110.07664282844477638953144450836489873959266906719), SC_(120.26068912424855662695184662243473300055358000493) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(111.6766098606362707307093626626479479792835521567), SC_(118.79160525664365852841733714608172056611548251676) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(119.35515630916678070615119767343868051138081520648), SC_(111.0686296401439251298237098127032006034544677326) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(119.70328156884278954456073747669464223102882786169), SC_(110.6894917547346761339168204217664958473967024385) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(121.19508449534440278299951987965562105030098217151), SC_(109.03292059516642021127603853224448838436744244914) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(121.39652252121291376815199122104595958575423229571), SC_(108.80515746160491659948371023780830763486987005541) },
+ { SC_(142), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(123.53628795955367035840093650095590477414737183676), SC_(106.32226572796995008340525646479337344627330074214) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(112.99817980412189530634144638383078803769824573598), SC_(123.07716069730196913392899216638112685357722276795) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(113.18401129090979188808239118146006910821433285422), SC_(122.91141155711348821988574246847208367393289724669) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(114.71928066335988360032140338068560241546758442313), SC_(121.5155148927729899473648938852527363009965476277) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(122.05132964953459707674631073071448056708467729652), SC_(114.13615693958655977941491191602259652896374878039) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(122.3821127539419767945131428711915763318355694487), SC_(113.77234980575271430360763247977709131671936760473) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(123.79771057631245145947545320829985091156881798644), SC_(112.18128003076504184818949505118552753548763083484) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(123.98861390939744069280170597338045520961474774053), SC_(111.9623387276786037978944163967586920275336008951) },
+ { SC_(142), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(126.01256835065359401530512358801575385779863480223), SC_(109.5728615289155123752059741420219590267337464438) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(124.12132287597211607838221673144251443563062946529), SC_(132.04252553849817820089941864059890647999057825812) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(124.27152256970497544520107584135026407222202125627), SC_(131.91672875484289561450654860229459692344439358384) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(125.50726590538281001804172473515306619560100322924), SC_(130.85025214496150197335604602066233460647695160476) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(131.26107161117820071470287943972554089684163502213), SC_(125.03900785897227099699319632068383181224735648831) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(131.51379758937221174610796262187321983424240558374), SC_(124.74617615546517292849171432173311454310269759817) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(132.58720489197725599190598408848032574786852668875), SC_(123.45951787243960117716357691526013161957120205939) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(132.73089921669508933496622740223884178496726992195), SC_(123.28172508560526594832095978535183324760793216569) },
+ { SC_(142), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(134.2371466804899999693432412616887946338301816292), SC_(121.33031544090402321140235096703233591170008719561) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(125.34549172543396937919889009709493204819026445694), SC_(132.9707231384538013892085128108247697724730987633) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(125.49073939070800138960077421556273466196694235629), SC_(132.85035037793922912449343043127669697912751418209) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(126.68495642095345751662844821136499275462676603373), SC_(131.82865453081584743954955158952311284950352469038) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(132.22246942613369722791205622500310423325232266205), SC_(126.23260235721122588559124901273288711227431045051) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(132.4645846486369924258969790353743781498358285075), SC_(125.94961065386364567722375498909202357981726407554) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(133.49154129259556196756834507438186770755490909533), SC_(124.70527242770003862101699316244620227855364236017) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(133.62883442439568322557629873094770535724764044766), SC_(124.53321519631309817681409990285223812816725642785) },
+ { SC_(142), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(135.06495836153030420697478274944593959639437147597), SC_(122.64310099717586895152396342354109672529262744365) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(134.69355815210337705361630811791401138996869884729), SC_(139.37323946311086748997900731702510451576301232358) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(134.78889709124908781215101061366593574686299021999), SC_(139.30647002850775496387223481099351162147613019178) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(135.56566767205304074706886822151501010760371884752), SC_(138.72734129787412779087236225796632496186205776078) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(138.95307525149357629795143675208160795205964708643), SC_(135.27296740330045743234805238506688740185492797429) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(139.09033116664477808472507757518679991184179341544), SC_(135.08889225891946980446386346154406356842069364429) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(139.65817417581237918738475977933085466095100846903), SC_(134.27122143670113381576055287484629175224834223619) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(139.73215482209550223096717917082886029977273834826), SC_(134.15715054653188339529316848231416300308777063842) },
+ { SC_(142), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(140.47262155736106117958742912808823973048581745725), SC_(132.8892739823397270295416842380254090111853956217) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(13.941260212382988427562319433276446825247465465584), SC_(23.229437443696521126911088190939308502892330771878) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(14.092018936571034281876823116039967094870287418383), SC_(23.056297945526348513913702353963967125063014164092) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(15.364741844342962807083964346852363154789902217487), SC_(21.628274394214026597931700307335106757408801244277) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(22.170154872947448640808698620101499020265225694639), SC_(14.875572412414013601850526353014668334599934130334) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(22.508548980471349565056225746322929102384765579019), SC_(14.573976007070542700270424614728102213277710059357) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(23.991262317318698105098006000983762330055604711618), SC_(13.286824440605141291731804911141338839735599686408) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(24.195638692349604187332533186971120004213206240471), SC_(13.11370221117862598563103415183685162882754065639) },
+ { SC_(150), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(26.431342183979266542925017949821371744031355456057), SC_(11.285609412716587944740513533466493775260817735342) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(15.083905902039569687241298607781916380238725415024), SC_(24.632167201087605807851987450002363861184971855249) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(15.239477083104520601934575135156367129963601601243), SC_(24.454731835495431325731597061104734282603253622983) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(16.551888041026700644667470046050508212563398769837), SC_(22.990596582055164831585962645935866605412001641516) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(23.546325570983470951761625552522658745226019203307), SC_(16.047657850806700731122210781055657310919730475304) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(23.89327668373196984275431382153286623248731403494), SC_(15.736657189635296666724103321175038969247265574025) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(25.412690660562331802824258581910414570560096089671), SC_(14.408288558930987269959611369521657398202134770523) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(25.622027970627328522494619377070946052748253489625), SC_(14.22948142240874135636954476449398748345302372235) },
+ { SC_(150), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(27.910544548114196146948552535907145087367177278829), SC_(12.339076863232828126008054317306490480283019706454) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(26.889878893743561196782046466242249539196003790068), SC_(38.476250329722642815021251526266013365479394486742) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(27.083703817396490368981472108964719755433421913135), SC_(38.265724373917406351361722861543781529103125875767) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(28.710937854893079501133967225177271670516038666034), SC_(36.522559858852308147151612493575983261430322922879) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(37.185474032110076285173004450994346898024699751145), SC_(28.087380107035552881803645779646899295623355926027) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(37.598543897908252031433365951914829495153038909875), SC_(27.701780119161602084319459568111582009812458001626) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(39.40054348194375912423140528831412410251959059751), SC_(26.045700563041058798039405616383108675433841931414) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(39.647951380235735409231441563524693180322577142242), SC_(25.82160232300497420435150447582754254744846835872) },
+ { SC_(150), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(42.339777151249013811498664957545610820200325869451), SC_(23.433494157277334710420843672778756186210502811448) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(116.25405232877980283477824218063982146188867548012), SC_(127.09998992069567931352016938677596055903106792813) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(116.45269724625782203203429656662502673376159923492), SC_(126.92019743243202393891262234254421480286563580359) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(118.09546353524966560275286270509416430307016854153), SC_(125.40828372827369525204371610123572752002302261582) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(125.98816699642069378674242082829807592774145574957), SC_(117.47116035131636964651843200815972208014148759064) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(126.3464409938376470254461450316412243694304750439), SC_(117.0818808721273965884642083698074387093668162162) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(127.88228713446369555119954696480552311826019250306), SC_(115.38131400186140629905296808378199312583628500856) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(128.08974523615398988666248411873815363417398568375), SC_(115.14753988473909803820824694682042458692632232978) },
+ { SC_(150), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(130.29466017890473967979788319721655525932981929512), SC_(112.59965587177014763294123753129577592680658191952) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(119.53790145957088920034512811549294190881082769855), SC_(129.89756307262890251520754064985194427505747933592) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(119.72864747224908992476479192232055644509667952585), SC_(129.72689335692993453776168692264100791617680641056) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(121.30481317482152331903557014881367476181786413188), SC_(128.29006511825764901075685808976927485457572316114) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(128.84148739406649198491898815957482970790253748508), SC_(120.70609258077200971053500689879657724095743809299) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(129.18196940384201358121315930958455784175311610786), SC_(120.33259477362205886719246329349858863108941434939) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(130.63966379410665781923068741883789831019595823826), SC_(118.69948330891348402022585811745257796437857045686) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(130.83632196164729206495493413738298434915996192371), SC_(118.47479769522403274005105678498509782328998216876) },
+ { SC_(150), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(132.92257317648028519740161039350246493356568996629), SC_(116.02320629435435915684592951800126166747666808962) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(131.25705281427876576849082221768151419698464686467), SC_(139.39943515109906479702007329500737484767036884441) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(131.41112659967210579031037661150230119832100132296), SC_(139.26975308516013283384787826579597296242794430336) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(132.67909886021512032469493148874826606103615336571), SC_(138.17098324155347320884747070026242995636204862534) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(138.59411142122310148786620250765951859757566962916), SC_(132.19855133716757499404651192815290935520237015746) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(138.8544892266869995925513601100276729229022806447), SC_(131.89808280570207291764963182452995060482116317836) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(139.96114112445202225923202191604987183398865382435), SC_(130.57828177168034202249023935519667789184174083847) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(140.10938524808575231085452284668561537735034878315), SC_(130.39595898443911590454543775824728349902520402564) },
+ { SC_(150), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(141.66499575182095959427922368583031361579470604795), SC_(128.39553787986754551569729305193107469384663398951) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(132.54596563410654925626290854776184296006604013973), SC_(140.38422684344707569753185015820019564990099029679) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(132.69494488567408121679586898664259167740148373106), SC_(140.26011032706232017913974568879322424673693952087) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(133.92020353348486551716840167404814537803039986312), SC_(139.20730312880017474344642492997728161954746214936) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(139.61297521961324037120076294767652120627917602396), SC_(133.45601308938283398150684975087572272148430818497) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(139.86246218260223453682278430553085866859260471362), SC_(133.16566590515785773584211794088148462167848380997) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(140.92145356706156038889594021652400774995959349363), SC_(131.88940376781887187922981010550651535280676567379) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(141.06313201278141278943348113689142816941329657276), SC_(131.71298282905685190152291021999403444039326214833) },
+ { SC_(150), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(142.54685901759121485441661609599204373636276928668), SC_(129.77565112706231531890304028330436322960682183018) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(142.37832876812224264424802779992995642243792240753), SC_(147.19013017304003622559708887321459787496476175261) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(142.47598538353214997827771104797614412715883744352), SC_(147.1210159976750839539440758823140903245358155233) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(143.27201350466220984238793866688686011810287571453), SC_(146.5224849637359251853865345897086259008705517263) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(146.75559839791572035114597389089392772486482280383), SC_(142.97197466951559747666964829069534442912421386375) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(146.89745091365054020707042082509540394427880270923), SC_(142.78333642619553576189898211626370726573588592912) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(147.48537555408611955069698836532872253600429401351), SC_(141.94583429402499269535267626644285154488346507301) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(147.56212250564996154384697247922161265018349498648), SC_(141.82904901026404666828270081671114220500055353926) },
+ { SC_(150), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(148.33304207784629990988446925937037947255540662181), SC_(140.53173990115956638215866295702074713605680994262) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(14.834533823431491865711115241925781613990976203301), SC_(24.367970103960765056319007713155923123713170364061) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(14.98959454747595162118309766448177587365409613686), SC_(24.190535971768004367780561656179425653767588613535) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(16.298095501364366471615766898813571052627489189173), SC_(22.726777109490819514174180139940817304307101958426) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(23.282285661039498179074401114138516325616914105347), SC_(15.795285123302576470575468377937404158220678722603) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(23.629147490873518765107649872796720950929728887106), SC_(15.485211018190073313333995451015580465832505428705) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(25.148600018120659629138547794480367841655347320238), SC_(14.161253377838318645502485357098610517058952780429) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(25.35799663234395198803591994635869763560034683012), SC_(13.983098029922665887921070633109463257121873250058) },
+ { SC_(158), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(27.647992165942754767016647029776944976257281186257), SC_(12.100488170484327477382310596861328427334646675016) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(16.041701141914654837400131816542584299335555265932), SC_(25.842019621887887185171240344500221318347304261435) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(16.201692677812049768127593987452594666167727632818), SC_(25.660170755408478825415314352986805893390690861906) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(17.550868972529664610384099633753314784285418713836), SC_(24.159309985843692351124118748247439409160019035404) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(24.72904489493932509226986081985176308602236098841), SC_(17.032620854594497974725163203753923818129291050044) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(25.084698370948136578361743118669488423971907972934), SC_(16.712908531812175427850910660778446855600022010694) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(26.641868221186012240675867803780790693823858794749), SC_(15.346721812809736187220742166276354388336017213264) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(26.856364505699981174026625924372268291833741483808), SC_(15.162743738201952527407886627899015999210623083268) },
+ { SC_(158), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(29.200670153952847251036971174127990864718456716178), SC_(13.216341583254394959663990540854822427815578115169) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(28.50546647805453821024892864447773628644460370511), SC_(40.397214663743407017149578521906668518083374907361) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(28.704640970739660503406033737717881610704607405116), SC_(40.181342857040268489085560666658761221457361661556) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(30.376388421479308680082008295102274949058320664464), SC_(38.39368669908482689787445303471270761946218316699) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(39.07357009100674126275457921350836931059378354277), SC_(29.735854853269802581017634474411935699526563031705) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(39.497182593927828257710628347095483692071259290978), SC_(29.339707140720808770324940154990018972820036255363) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(41.344912666228434809043454799448566519464030893166), SC_(27.637863407788572281300745215406525452378427947379) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(41.598567859146961202721158728069929407998226368722), SC_(27.407511445227720641775789487708285974902772634914) },
+ { SC_(158), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(44.357928237675322587749128811630301413746318734508), SC_(24.951758107800774735235513729259407447788767426528) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(122.62883813782892274398646553006144035880836288856), SC_(133.76077332285194284979381507286876856223333290313) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(122.83249002766157260855653773197347682519547091691), SC_(133.57596914518499149235712533715079118672781638431) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(124.51692536354013627696810930357447595847489286512), SC_(132.02235883841770310614194564819853943503672130557) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(132.61814268438890247180978943756913152979348688193), SC_(123.87672994396628312836960638592341366600378339462) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(132.98629691067073799441866729061169271689024607013), SC_(123.47757667394708741356488781835166994730325690662) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(134.5650177699972942872853718005346789490853382259), SC_(121.73417784746839634865939938049204056996255699424) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(134.7783357501060175963950501468598043892268928226), SC_(121.49455203004307762315959871300757085015752622283) },
+ { SC_(158), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(137.04665672363441752398621558987944289427381315352), SC_(118.8834032073747953014628927088473749600508954401) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(126.08132656654698219220112182237380465943604183903), SC_(136.71426351371404403198646948904505918630645175836) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(126.27685709013900787614539146216584968631907076752), SC_(136.53880383882205539671002342590184252041081892321) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(127.89283882531637004731368726509631125291499543777), SC_(135.06212779738517859552654610031404368266394106077) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(135.62874486638494390055817176560300633753514114813), SC_(127.27893304361169587941335254689342402184092198446) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(135.9786689950755282944821135440863705025739879845), SC_(126.89600053886126082159389701659503814700498474935) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(137.47734198675517845781157821978343108967508753737), SC_(125.22195988519229874127939012777943130545443458892) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(137.67960164416949714878377274324093681414211056958), SC_(124.99168224859376998966367231143575665926833592368) },
+ { SC_(158), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(139.82647910572930702377782155146430258754073079778), SC_(122.4796285802973410465029394403325620182449673363) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(138.39570877964928385049286948040792126420948546363), SC_(146.75342266565785649196873956963072045846509828994) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(138.55355391549506116225487251122571497797168662793), SC_(146.61995914872623359459417934997478980873936681563) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(139.85290205134192877561909276085934743904249282406), SC_(145.48975528851425019283553916592813906847747686165) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(145.92486540104352167871723503445761398488415934604), SC_(139.36039000873175404053520857689199105517664320038) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(146.19269147073299390681831540303548680523836356842), SC_(139.05248677622128321990365785838630848875385290771) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(147.33169877992221176121173505249763663795192601303), SC_(137.70042221787558773459424187214258283987653587558) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(147.48437027827726836888682900721441570001374864084), SC_(137.5136898893455658858156979784683622923847846595) },
+ { SC_(158), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(149.08799959399724789659381189353409192976883113554), SC_(135.46556576350227002780853751983142064500857525061) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(139.74925926737315332448089493287836331394325222077), SC_(147.79491537453148669397216836294015706050065263723) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(139.90187109787960751420543752284203539513511394638), SC_(147.66715528893402191781770624997219533599186480444) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(141.15734943516110619279039114091034532039683947927), SC_(146.58406531022406869173675281217653683135789388306) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(147.00127956136524090567586779485957138187898435171), SC_(140.68163568854854250952465427100955008071106009383) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(147.25794196649899342101013097132812433753048295096), SC_(140.38412777579205088288673679109379586489435777461) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(148.34811001585345075505915939561947716376318216555), SC_(139.07678901948762859250816818055091557374703377444) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(148.49405553474518451818972806133052592512729363593), SC_(138.89612047678813563284835080687616824125597020467) },
+ { SC_(158), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(150.02408494228068205716090887099564643441187675718), SC_(136.91283272663169062873896808602340765556423318092) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(150.06486937848522813267903680265720239055168701747), SC_(155.00528273792471111879056111446404310095730601385) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(150.16478171285077304707635544625380678664994080614), SC_(154.9338877625925938276944232260643450021941365284) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(150.97955453629495644821784889587131006951039740395), SC_(154.31647706662629438772068827623407153930023132681) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(154.55677237171981294091269376587353631151103617094), SC_(150.67237216924645350292822176816688035952660140891) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(154.70309772860293023886598616338728007426306651632), SC_(150.47929233810345842857860869005666192634252903097) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(155.31055493103053741380383121532167236240345858341), SC_(149.6224893398907771522457861128862006671059298441) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(155.38999117821742710874682342633685036893159123101), SC_(149.50306258484484550078827980277180429325913146142) },
+ { SC_(158), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(156.19048177701124237444176200343243064946124956017), SC_(148.17711702201635801025732027820980268560194347369) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(15.730882295682088284271923162208775002199165109287), SC_(25.503425939887356094602618222010976022350750223727) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(15.890136312973695587325398662144026112251234190607), SC_(25.321805187148401735526518365369286905110161301634) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(17.233514006342752197640725520375226705077764035964), SC_(23.823208341291552685984652682477035863499801639427) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(24.392003041640273181592314185101684223538451022765), SC_(16.717405795582698161358767364088443714359774568845) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(24.747119973306019956302917122278223593824323807026), SC_(16.399067539202474859607646012047964563044064226605) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(26.302387426231451115880158964190187338683438808552), SC_(15.039234399106404669456623689947035495557139246717) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(26.516677733456366772694943689309674576495776622943), SC_(14.856173706526874566755760565629669231733790002225) },
+ { SC_(166), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(28.859592185504946251869286052375467518306200367751), SC_(12.920441734872845910571838848364470485887287094783) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(17.002655873301028624482778702125311234170130108104), SC_(27.048710788953605795110812312671313143704245308729) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(17.166956143905516964110547684290297073585122891804), SC_(26.862559395529206826971158969996462606565503587325) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(18.55197206469475006476706923075580245175034881728), SC_(25.325895103012567508544085456814818978970803322086) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(25.909284595216595130199881491145317111616095140463), SC_(18.020058469034275957706402694388681615578126260689) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(26.273421969182514087712053859556937695531702195319), SC_(17.691853817127678021309406088048817024461817232649) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(27.867398106995537331734269140399483951049242245141), SC_(16.288804474768928862693883761569943972335485314062) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(28.086923364769654195430745064965230216734679021019), SC_(16.099786604796217246342763030159638238254367159465) },
+ { SC_(166), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(30.485607673427880596074246571332749537098722628625), SC_(14.098817487276691196810806347484595845426921549721) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(30.124877372391700438733358280910721388358803131123), SC_(42.314354918737223388868822731783280063663684862909) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(30.329266873326189949059026247455632666588125510383), SC_(42.093271468097469281828074541976379124285263210118) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(32.044410159222698816331480741994793149833418457182), SC_(40.262239185869658857092946263162567432715716883031) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(40.958666614749094247859930145470238856980638223969), SC_(31.387326574209787502559321537072947003776754217016) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(41.39255743168416633522565166452098149821285847712), SC_(30.980895941085321898911175777495689212378513439713) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(43.28486968554132075661728403539714480429230333112), SC_(29.234439548326688047624167282788784346743481879173) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(43.544615049643608335163120147616080139430505092733), SC_(28.997991602834847507259069947528006238399120687387) },
+ { SC_(166), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(46.369806794579899634567726970785022554568736880013), SC_(26.476307037853065883773316924982760522542304747516) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(129.00720701104822137903935575669184563773650311133), SC_(140.4179747049256498670310941182983151630052304315) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(129.21574011335512495207237911150470471070212796756), SC_(140.2282850454724782611458306663436962985188329072) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(130.94079933048737663315673846828596091755958756951), SC_(138.6340258988920435593011595083869510766953058245) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(139.24531120192948183367593060054542658967304897567), SC_(130.28511001379967746322816463402115357597668365469) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(139.62309739842742704999825605103658883056349708538), SC_(129.87633060524473487138534605960705955573486092925) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(141.2436128566279469915746338986442275675188787977), SC_(128.09117587669867106131656107835923278599329695929) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(141.46264267155059989119174648257867712520874076656), SC_(127.84584561956520968516784282686627623378663027039) },
+ { SC_(166), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(143.79275926705993344572344357297193472002266149644), SC_(125.17302871532754043961710175594992239655801557604) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(132.62817657560860470127723917173447022011402122719), SC_(143.52754032171499157136250446446004116231405132608) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(132.82837139373789246289187769660981281225443457574), SC_(143.34741142005838784704919023774646370847829129202) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(134.48317017161538481927020541722477144389437873273), SC_(141.83188955112182042389286891271987712802264654488) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(142.41331979688369398903061071345205067985663621245), SC_(133.85445992130809944634052960952931025979639616882) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(142.77244863720980263513074938337114515110113145613), SC_(133.46232942944628023947576164226859554656758126487) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(144.3110669028824732150262074167104678083977375201), SC_(131.74838822523012682829158278899038848751649070061) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(144.51878635562618726286827548256161530392894719302), SC_(131.51265935478332609733612584848817756024664700609) },
+ { SC_(166), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(146.72474731454226090247579643629738419273676442648), SC_(128.94167027574993129538001198025981936906367792671) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(145.53707019057480655707518578948835089252275002145), SC_(154.10470798918816823280775451080418335474756271499) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(145.69859169245739606525151904410547688437797055885), SC_(153.96755894475658641638499699367848062043500494598) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(147.02852694914147783488521809655154882144159017426), SC_(152.80671514897015861799163451378631955192018461079) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(153.25350513025910125641169246679674436106383089039), SC_(146.52435087320730821023226811872323611853327828692) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(153.52859133060717227923878126548065897843608927827), SC_(146.20919983257910752509104910550622716298065072045) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(154.69913264998332394279543402859498303156196674342), SC_(144.8256845784993434375344657000559511659402719044) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(154.85611849153327842844710922986737130104003099131), SC_(144.6346540524523711448513169222899293177851049167) },
+ { SC_(166), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(156.50652690825195375163221915207275884260724368196), SC_(142.54003600386456802166348177623266705595898002204) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(146.95515996041869353091137065611524514286096386595), SC_(155.20300060937613004060620562198955840444891094575) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(147.11131283975725910247025266816354729721811724535), SC_(155.07168950164541216368938354142468971444730421218) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(148.39625090305109068871066359407593048533555774228), SC_(153.95908245009520424497966375100560787809972520164) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(154.38754766872212188983401207823037002207656785202), SC_(147.90930335061941601171044390886333960987789650629) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(154.65120410813000541554276686429925975595085082243), SC_(147.60481477990897461353020610064924261125601927622) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(155.77175624437535425366815454959346398993528140617), SC_(146.26718268965240882133056604294499670171853562487) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(155.92185968522567250479638460964140087032410865771), SC_(146.08237385720712049453248440987537157568822077304) },
+ { SC_(166), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(157.49699231129951442777710637230055535464484183198), SC_(144.05429569272145332460180742447706091793910944019) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(157.75304528035762381208853699667032737301474093451), SC_(162.81882590765961847350855404059746408387499854387) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(157.85515607592923469048809046876821290616001349651), SC_(162.74520920972856971633734143532033548046536055244) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(158.6881995359903949514095927114661651288902453154), SC_(162.10940204475966683814575982217766599478996797817) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(162.35669647176027748170333609419427081261435351347), SC_(158.37405395247993883660487162134502671236623160269) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(162.50738024828618700965733869325949029045947367824), SC_(158.17664485822295167562174500074993253841176738141) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(163.13386277712994236614854540614093107634752182334), SC_(157.30103118445213143609081518815099109090425015974) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(163.2159172438669384868837994776886416864226550342), SC_(157.17903032688767865785391814832225547999720053904) },
+ { SC_(166), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(164.04516643912107651239826221923537717206274104321), SC_(155.82518345504587379475105858887658134116581066294) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(16.630085384586891122921950577607564518209157352179), SC_(26.636025508073967963036438832479929411646265010237) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(16.793431838461065091638576941457877419142930158672), SC_(26.450318391530995789712909443474269674016081471376) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(18.170849842258363683136437275603959079140203440751), SC_(24.917716541446471951033247008314276694763653414505) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(25.499479968274895925903407603177150186679233226914), SC_(17.641762253487237550187356591794630630974713344985) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(25.862654628024120627541220791900380823607202987051), SC_(17.315358024248090101068229336109288617567603728987) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(27.452879131154461311186462435552293524845476618144), SC_(15.920512718744036830631554172438109921268730269429) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(27.67194569060892981032590643057240623011767525665), SC_(15.732665182726350782769394720639120884069400201297) },
+ { SC_(174), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(30.06650502306751443943828942702851446233993366378), SC_(13.745103939206292075017090023528561820509322563591) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(17.966543820244285168761079414676636711225901250151), SC_(28.252467256825567541013583291647090586068603913599) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(18.135049260303834921722236657760785914990714320961), SC_(28.062116342609402642288160931347354843751926224352) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(19.555045699051514394039733483290765029773591932542), SC_(26.490504413862228427176798464319633794241531422998) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(27.087222324874055740418021652985746350904026356876), SC_(19.009793755432447572584990895149008842750375383683) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(27.459640794895286154384811804956656903827252513459), SC_(18.673300327867764981466170386744971038854683406917) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(29.089541828924231411312149333829269080519483507739), SC_(17.234274838501216260085401776808145825794718597404) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(29.31397541054841260185225754793896184045913002473), SC_(17.040338808449044155845628483662229175535933043975) },
+ { SC_(174), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(31.765729715154371500591319185328480572171210596184), SC_(14.986128814246495293842606941747731542630884661401) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(31.747838016716784907134432528304712558212121410056), SC_(44.227944771888194825144697161550340544574369625399) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(31.957317637800345859515106193688775856581323010658), SC_(44.001774259767988600589196929093905537749405292521) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(33.714819363905521609474352742975147314885638761739), SC_(42.128401467559344580208520301359521842272184108196) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(42.84097818906319480068459585169733724434035396392), SC_(33.04158104443330035339614946331439931238175610804) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(43.284901929810143060713868547657527209960455260523), SC_(32.625113296848073423779955982803311090927136944577) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(45.220730424216647648693977413589411741491944157457), SC_(30.83511295783610956486883271141568884999422417034) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(45.486420122605335100515560084209198990454532163482), SC_(30.592715397971676634680299034710356546137932802327) },
+ { SC_(174), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(48.375862645694255733700964785039165186027176307681), SC_(28.006689415066868088553355980157619415096380851604) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(135.38890241210559563184959370511073141872378925692), SC_(147.0718504422228850005997665658219563315644407245) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(135.60219998904780064702761039663668203331378954178), SC_(146.87739242576211523908499111211677328396547956159) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(137.36691280959160413559517529432453491657334804886), SC_(145.24345696413794523715361352790681935688258984742) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(145.86987323194821192683189966206797697157614255695), SC_(136.69609941080434651942380503610132732241532626744) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(146.25706096592990551219344186465496140946994925397), SC_(136.27792377180190908617170610584045533303932138635) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(147.91836866831922816366084008941301360444015468311), SC_(134.45201198315479262026288765910838306542980157755) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(148.1429729644461600551202895221256850981062820034), SC_(134.20111396413409282475687216039398099396344304764) },
+ { SC_(174), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(150.53339171275292375293063572638838743696824886683), SC_(131.46811066156084124523664820276883588208093154504) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(139.17820619523557475968496851118072092921754375034), SC_(150.33763859071138611498470063248928065440761199578) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(139.38295371827289805550659416365647029605850274302), SC_(150.15295249806070869141915315997068365858212488391) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(141.07564214458065778335534384507240407121049769901), SC_(148.59951477996985144689232662077844334002737950603) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(149.19540397338312123904068652335113869127617382201), SC_(140.43248087733430418774047756901610144644412233845) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(149.56351717575566821337085193312204630548300917305), SC_(140.03137214474417393476628863401048932126993882076) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(151.14112185530190410198511203548235156288378741087), SC_(138.27848519748547275036795602156169547138790836558) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(151.35416965380214867099605298703133458257844599197), SC_(138.03743576111731164442746753318699275668136255488) },
+ { SC_(174), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(153.61778361869456865893958213271146800962303653969), SC_(135.40892807158012420877303935132573291090752651223) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(152.68094285739213056166008149975134867662539082553), SC_(161.45348478026549757146556801923679499239698355776) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(152.84605256879867753996619587584742077584060867063), SC_(161.31273917941911868776523093764865460337116590171) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(154.20584279919699905369851960480905623911472652655), SC_(160.12199222597726188594615753832107764541022494943) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(160.58018176288518512795899077227999151371034160926), SC_(153.69028162899111115436870946055289368833090886125) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(160.86235353463054577967401877259632114543033814289), SC_(153.36805626066039221089197077477025657043861337973) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(162.06366704839458279449320176938271980464060622958), SC_(151.95384469454449010086535015459883676711016067832) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(162.22486245089691493533886503244290204176988035578), SC_(151.75861929321033226830872269742981891699148070485) },
+ { SC_(174), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(163.92090187144752276295197651447901549789625754851), SC_(149.61862903535704793060419918729867542762736154823) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(154.16348050353633326276191699341757843118791393661), SC_(162.60866913886633326670536586025108228653507208925) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(154.32308948323334889397590997181912413795245137133), SC_(162.47389284038981595003893068252364844388721099218) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(155.63678186340716314681793119508647064846455173002), SC_(161.33247912449068816296481263807682471341792298124) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(161.77192509834208986830232716380034182770332940046), SC_(155.13886923840990455190899423811038950982951130931) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(162.04240726326897269503467861442751334896084293375), SC_(154.8275671542890381782662617219645023942027904776) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(163.19260847676049465171388143937765824975010832402), SC_(153.46036867648449593334202194384907579348287058534) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(163.34676866952292124474121806349827378441185732832), SC_(153.27151913422131882828995594468092992295745740099) },
+ { SC_(174), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(164.96589424172364661776042235336773557485429381716), SC_(151.19973190414667901036433016779710543290653219033) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(165.44273802071368676886246253636451040777756854428), SC_(170.63087352072307225875793596896190928660648614969) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(165.54699415493413402787816683296220919155730765042), SC_(170.55508988446952069398496297555199487329754760358) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(166.39786831601900240998308010937415796626550674918), SC_(169.90133462271773762512407312222876036655797182992) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(170.15545853982742078810499731394323640999728693652), SC_(166.07692687181743258960632247791434556772299695211) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(170.31039455704450657539648516917516791313861093353), SC_(165.87529275262642585007975099058278879314430840872) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(170.95543210598052194607939364837135806908442896555), SC_(164.98132317626948012012032161787655836131307029407) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(171.04003895536038071176020216192653610841250334205), SC_(164.8568107006794802544986238921394461388145170229) },
+ { SC_(174), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(171.89729573360168516885036545341273269598403274596), SC_(163.47574409522903401186530988442444244948490869974) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(17.531947936479945686311006376470981911456604808202), SC_(27.765964212244578454910971052697504569143678430791) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(17.699292918455615732522701268972042194128163478101), SC_(27.576264117709964686936800245819951712787295829006) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(19.109972252542561262033790758621656450348653925074), SC_(26.01043323367203782340543483109946004077864813777) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(26.604869673777457572054690762090245373931881916146), SC_(18.56820190067482250375651658295547416610487581835) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(26.975918195732704609902325464900925649419919397513), SC_(18.233916266628436735575817353590624704891757292688) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(28.600300679738085824725976098488414550716474556778), SC_(16.804862619314673714886054863580566488674681480708) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(28.824034114413504494481014290316831224419725095736), SC_(16.61233853911649922084111025046696686309133459836) },
+ { SC_(182), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(31.269052010266191919638746359361208758143570422323), SC_(14.574150652776932179809408889604486602176697837208) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(18.93316448290132121994067404613374787372423392856), SC_(29.453489748828425019769228919269319168742967889207) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(19.105778657321147019524158527977444014076987226637), SC_(29.259035261956559971819996946429584795331083739483) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(20.559955485576092466176598855338206860798578807421), SC_(27.65327301587099401981144304721394054006287655241) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(28.263015485374154425075978859880144600730561223897), SC_(20.001669897197003609010398893878116875964307252617) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(28.643526126779100230645988284699130253836330957402), SC_(19.657077274221290314217961374008084142714268571093) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(30.308531072021507174278065968675446273345606788123), SC_(18.182901050302782936032049703976493846265986575654) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(30.537760610222960882816927778001229472077263528021), SC_(17.984160084683656258967758125968662449495067956078) },
+ { SC_(182), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(33.041366325284998388520798456019298728927077311434), SC_(15.877942913141048070734540883972397774119689225645) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(33.374105992542268930509315598970957629176141675216), SC_(46.138226736343407093873235551895499237138662986177) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(33.588559412070109828045689303672449492397191938745), SC_(45.90708521861951526867044089524482730740581062763) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(35.387453213187700634047492958764414271869801213615), SC_(43.992336731664407724511122577960950273761478110297) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(44.720694972361650962620379233715660723788215725647), SC_(34.698428401274693037430365170486146775869264306501) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(45.17442302223162743704221895533718878215588796546), SC_(34.272152515976586229546640578597942253321532287099) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(47.152774784225454556684008922966632152191664339053), SC_(32.439603614594136126074396219508272770839361545224) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(47.424272977062733026629751143895870241140565189108), SC_(32.191392742129978147350875793109324522820932756262) },
+ { SC_(182), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(50.376494297748644153459556557893935665091121258751), SC_(29.542505322869550158869869269269559011195536227731) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(141.77369702827492297164632692214968170924868690348), SC_(153.72262771766762024060797645870003186907947370279) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(141.99165033455911283699993498614423002629774039668), SC_(153.52351042615542720784900708878453730441896113087) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(143.79511283280314142429133242532180871632720389366), SC_(151.85080453208572944710854036002363153144481568064) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(152.49200663370082541213993457375007128886950244824), SC_(143.10951989260964435573176721642440993659893338795) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(152.88838126189354328771902693664270536179608139588), SC_(142.68216220946493771756884773458109250966786342056) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(154.58954771083762164367947749700215074158078522074), SC_(140.81642380275876958234731100187882007285744836227) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(154.81959859634846061787693184338588523426780719407), SC_(140.5600853263975302259232118709689493092894266696) },
+ { SC_(182), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(157.26892945427488378176463295111084732994249048734), SC_(137.76827544323004394231565849319450873705805644771) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(145.73119808490140826173633443989531824230557681816), SC_(157.14477550234785535927186381030566622015153420777) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(145.94039436536157953659561367850056973189187591552), SC_(156.95563655448568346422428979553742509980461668409) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(147.67010847959374534584725518348584393559304181322), SC_(155.36514919926854447033372250101965664994491123028) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(155.97516737153016605909957185919836398897935652734), SC_(147.01282548626975408283021709958623713436638974406) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(156.35205969418208055497816752592470900945624040421), SC_(146.60294322908089291369813333049616428706948897789) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(157.96775785651759192058371260956750640437114633035), SC_(144.81199994360290047831119381348749323851266044372) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(158.18601161755381924333279509365860020883421476471), SC_(144.56575164515219606323013213909278387779250955431) },
+ { SC_(182), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(160.50594735474549135119110768976011712937496292326), SC_(141.88104470086455474110364061565774970640637690125) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(159.82715476288571868477496831944614077256957411775), SC_(168.79992463270461608609249848545812664801842631018) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(159.99577057489197125865574658573498989899965277884), SC_(168.65566529540172164190031605076114415811417324354) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(161.38473377940867819812512504420154136648099801438), SC_(167.43570123432817008901795793272018633093800718043) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(167.90502927426609827146251116787848949737920566583), SC_(160.85804736380628541058763611408533046792803518287) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(168.19412407511900693215061705740180018683929068731), SC_(160.52890926622038895685527799628515735075727852434) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(169.42550067935955231665410909596974576162253341162), SC_(159.08470400767947523226055182129300717363588043501) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(169.59080815229801252390096445425947190998970245547), SC_(158.88537995027260866971898643085693139677308192603) },
+ { SC_(182), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(171.33141131748400208882425889613059985005775297921), SC_(156.70106184587052489034072752890683886952144350208) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(161.37405507097154294750468584431379674049438604175), SC_(170.01208629614148563560399650411043036135380833597) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(161.53704103184829200359465563560696457946571960776), SC_(169.87392469737355236389616452168567137042117275288) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(162.87883064753156797907380189629382339958917969443), SC_(168.70436577552381333308980437837055317744321482419) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(169.15454086974119366471270776523791996960145163243), SC_(162.37020328773798853868880745832597809148196205689) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(169.43169204686889496386293982052820734137407704868), SC_(162.05224338399064247803814760506269968523308438178) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(170.61085824831404494689858331391281172846457794809), SC_(160.6561555679604216810653180438133474816549034962) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(170.76898107611593843519722586069976738520064813659), SC_(160.46335804743188743522443750235125050960044630628) },
+ { SC_(182), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(172.43106774281435451404789848772600368293538174334), SC_(158.34886849728211839100610233562162891631644147279) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(173.13384277960575484367110309094829749066664763194), SC_(178.44152677534984757224253267877467573847396276997) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(173.24019479116596260076490237515851906309010041749), SC_(178.36362717602176303760714965677644473052771286432) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(174.10848994725716822141891491031704666286722543391), SC_(177.69234128819508439275175261608723371595040110568) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(177.95313670561872607972977888034289563747497277845), SC_(173.78090851720079435265502861864315165116011692231) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(178.11222609947689904315450957995779692020590337629), SC_(173.57514644887766672308599278581186174945095205679) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(178.77538112632532783930522431179396951967312692685), SC_(172.66324438622814959196517129401554383606307597773) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(178.86247916857828730222586362494431394013049586469), SC_(172.536278454528364738173049149446956672694996604) },
+ { SC_(182), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(179.74704703467261995968167776506816209608662998539), SC_(171.12862630843595903535560113760182853816619375608) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(18.436296061781527310579523443856549834112992557371), SC_(28.893416144568906163840177851767664934710392538595) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(18.607551848486962887595158742872924637163080685588), SC_(28.699810337309075355078399274117735435016293692494) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(20.05076469177813369222893711923597270126489411777), SC_(27.101475598835186528568739294851688493344241488876) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(27.708308681708907387316464620021892170636857022053), SC_(19.496588739471796882326076554979361305326801009524) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(28.087059234516159300252198590915502767618241550098), SC_(19.154594148311887683540243419772501101260558765235) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(29.74485301262129322811709469497077800370747537314), SC_(17.692083011648465483902066675831863918318238279397) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(29.973151127121419586813424029894984709497489131701), SC_(17.494985389682336325824846850723694648118363213297) },
+ { SC_(190), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(32.467519370176190170315964190054362162821004424932), SC_(15.407293318953194912770553639322739453418140006652) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(19.90233920629008185569957632590428546643677606566), SC_(30.651957101185571378580412789281000622159688286459) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(20.07897202755269449380403779223374229315632893376), SC_(30.453488702480085297538120086348554526645100847872) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(21.566581641742210470239824917440804374198252127865), SC_(28.814321277719219804468269555976156241713603573322) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(29.436804318356865886690933950415871369394566177401), SC_(20.995547136117881675025181435834045455025169375557) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(29.825230570245213810033096818153337712394393045045), SC_(20.643032453861564924954727292100625552117395079677) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(31.524572250661608956989387208791751101467771504005), SC_(19.134476549834168529058930630621839012870369837996) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(31.758492754429074989249706165810825101560375328712), SC_(18.931036389674743989708474730373603612739854714649) },
+ { SC_(190), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(34.312811496845506580525890528844524397789897128325), SC_(16.773963619930701835081901384466643197091875514966) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(35.003465275347463797307859741831619184289860017443), SC_(48.045416913916987707477926334766358896522099158464) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(35.222783801168269566147829390346011828039049540104), SC_(47.809412850104870502578141781841586913612866355221) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(37.062166587823679378600122248902965372848945542277), SC_(45.854190400437091902273896851962418204343156288286) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(46.597986420015180293075236922960983249618295652851), SC_(36.357699434388851955033114372215220579081422694997) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(47.061305111637762074377983141397903565269114459513), SC_(35.921829395860089372548770300866830817026191453204) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(49.081252174375847466571466378993568838224365420936), SC_(34.047662008466007591965702721781936105122976523721) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(49.358431926645590789641019632818086139561077383404), SC_(33.793765162303110136710885726637272221215374933183) },
+ { SC_(190), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(52.372056779927097977013239076860222620023271862253), SC_(31.083398558488133316817852271416012518989634215536) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(148.1613883120325286729720577603601930978469339151), SC_(160.3705089730347621226641125672114871748266042249) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(148.38389572270640024718722474846181143803387534231), SC_(160.16683432615065789175624792461200568041160538019) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(150.22526309214907113849670542886892822374414262856), SC_(158.45620452079313752737125856066386176562388634274) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(159.11186991873718287138838274486814431524488288909), SC_(149.52521263048173557323639160397928305208062044512) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(159.51723086241806822611587404942250571241369316394), SC_(149.08887308147859707399697939742547421515968538083) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(161.25738387573671567021296284817690287766902303957), SC_(147.18417756447412921565318512064741819177822632248) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(161.49276188136430586898075066394266906100823889638), SC_(146.92251758648068781178306255311645301998424356815) },
+ { SC_(190), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(163.99970680960334984914200542062583186218025059468), SC_(144.07319023342505795978707574444801931690936098352) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(152.28695858963604649828892095741199479434387797985), SC_(163.94914458236368421821114477763124479991386615174) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(152.50050648803291956261931865487154784993993184887), SC_(163.75565025880370218265361244011550308861765315649) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(154.26643884743974172864654110476006570395889265052), SC_(162.12892268281995691957383563350703729826592973122) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(162.75276147652235017498097762986125364348443273787), SC_(153.59534189074900450664839812681738292809315478647) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(163.13824113410559427668965206023457185959336607243), SC_(153.17687743350519494748279078272640280930866035005) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(164.79119854984090786560144646435288130747468030528), SC_(151.34870895202077584075804086754656008516546948604) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(165.01454395949805585405306796424131284453692608246), SC_(151.09737551120859792755923003323152697218659311457) },
+ { SC_(190), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(167.38955850907513620440962259327592094764934547108), SC_(148.35770190099554233977533845521040617279658475443) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(166.97555267241552362047532253920449640696376775213), SC_(176.14418043978230809281523090094258690721943545972) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(167.14759786273235368981985139764847595689423937608), SC_(175.99648471256244950676586525838184929438139768614) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(168.56509671627899694321253105980325685443681365318), SC_(174.7479444315833488532873547629775308634589339169) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(175.22816707369492083525539396094402788023100604167), SC_(168.02752789592155902521149036612750978270463525599) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(175.52403306009119626920079771030693118893926781333), SC_(167.69162808230476546027799122186149632925750165642) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(176.78481055023549609868629292118236032582303973867), SC_(166.21808564552557866231669086643521675353139333556) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(176.95413908599582751994792714752359021138476693063), SC_(166.01475282601866571980717482809033553951515194422) },
+ { SC_(190), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(178.73831049532571989036396451989316994846634994576), SC_(163.78708237979528324069246359444144671894881235317) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(168.58673595042033994507422298584680001578790869161), SC_(177.4133993968974312787674021168164659288953519731) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(168.75302496535511405983586476648030562972987626096), SC_(177.27192710255056372480924030961509805526141003049) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(170.1222977876457420051221555163175699104496797722), SC_(176.07484085683687925381131362092992972177793929294) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(176.53550997908254895034971848574916465227438075229), SC_(169.60318964179395080376717970585113901741360346785) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(176.81918377778164605773765187870285046435976045175), SC_(169.27871741133736188499927994467389405350279264984) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(178.02667617724398934789994379921622116573611329931), SC_(167.85437286514698995088542327117671776502631836395) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(178.18867379273184543312603705300664332447450781881), SC_(167.65771399963666680869779243101786213507134318092) },
+ { SC_(190), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(179.89275928843532635565204363137572236066007206791), SC_(165.50146246577198561530696529813984463719278040532) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(180.82626627116482539598224128166248568797351440021), SC_(186.25087608247759172273975412527002844490219625801) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(180.93466795868491637128049759222612730029167893702), SC_(186.17090809946156840646841549832872662249832073336) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(181.82000132890499181062890584653230934379388219914), SC_(185.48248149562441428040989615128864176407338478377) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(185.7498008088529565509730776758412533223157454911), SC_(181.4859255599879402076629026643004514597415869146) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(185.91295123950621862856838067896036893399516955656), SC_(181.27612623887545010638732660420366707068488666455) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(186.59381540978530057173982322787894949960224257601), SC_(180.34668718790423683274215713913260626751991201254) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(186.68334759552856218103972243465816167362181070498), SC_(180.21732211479331186051514945861516570211313117257) },
+ { SC_(190), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(187.59457860671264035133583266119903046910685225399), SC_(178.78367647092988617778484441256188436661469909422) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(19.342974027158486932473431746522856929871710298385), SC_(30.01853720415440482436955577429322789164066629107) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(19.518058429672246658567025607599480912354646155903), SC_(29.821107469356046262811479559190126447030386073221) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(20.993122754042093907926719362319205810230863022454), SC_(28.190948573700989476445176959486147395165882319152) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(28.809919251139046420075242492657666881425265623104), SC_(20.42680094910156695888706397275706007114420827814) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(29.196210780186694926978614713977266614189104474439), SC_(20.077258999355331891804484450944614495474494097677) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(30.886716065694442866665900913462050128822200770423), SC_(18.581993830267420718879229370141028455384626109883) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(31.119483093504960332802087183351578434345198394208), SC_(18.380419143229209773210313065860110416205158573383) },
+ { SC_(198), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(33.6621633627640806304767680168243201610121133358), SC_(16.244273717023501328724252655101706696607262709023) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(20.873907987651403277327272993912303573576159292108), SC_(31.848029465102922482927502747559189284968428746056) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(21.054475048460918460317805200483193886866939886457), SC_(31.645631185893996464534804676202477640908612227471) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(22.574816862753450535394807094204021169732983625802), SC_(29.973756993980005433219614643280003844866616116931) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(30.608714415784902460367345678822686550732379444905), SC_(21.991300283289165012898945693696602503477294091823) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(31.004890788984229419450800532466950248874222934327), SC_(21.631029538397776421842934497783193194192760292905) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.905791938304901123046875), SC_(32.737850206566602442538247100138032199364587804663), SC_(20.088816368660448732607635277353171558984140708862) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.9133758544921875), SC_(32.976363288156684182042422633123150377648035490801), SC_(19.880776061636489452942523824188535522482879820488) },
+ { SC_(198), SC_(0.135477006435394287109375), SC_(0.968867778778076171875), SC_(35.580328452649676026463691843367186354509414733371), SC_(17.673925888106871875701467279232803144845594274524) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.12698681652545928955078125), SC_(36.635722378824839324259747322039001297971732522718), SC_(49.94970885463168918958398922325708095898207926175) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.135477006435394287109375), SC_(36.859804148965987757350200459885029596751396595716), SC_(49.708943901958049260926789029187615727505191828762) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.22103404998779296875), SC_(38.73882948913239468866549605297511813152889798076), SC_(47.714092726088035166966948544131716428518543595769) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.814723670482635498046875), SC_(48.473004308903722439974001174243448815662663551708), SC_(38.019242571624382435026547447881697186755727586036) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.835008561611175537109375), SC_(48.945713361337111030316849246324617296938389435606), SC_(37.573978940110835236991962659990125134055218113951) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.905791938304901123046875), SC_(51.006385967655982988985964160962564396002157438002), SC_(35.659064680184657817531089561771833808014872754113) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.9133758544921875), SC_(51.289128317002886165116392084610491223495611629582), SC_(35.399601177844205354768063943089943809839824315797) },
+ { SC_(198), SC_(0.22103404998779296875), SC_(0.968867778778076171875), SC_(54.362868007755877679664114378678344729556978375222), SC_(32.629050221589082388127147299927443950618890734889) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.12698681652545928955078125), SC_(154.55179486079551400908974907168775826234197465455), SC_(167.01567552392070956222765808940809019994592809549) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.135477006435394287109375), SC_(154.77876112672710117516049512600663468916442090633), SC_(166.80753903026991667481953734987048827592938616438) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.22103404998779296875), SC_(156.65724150492076708350737201721298526395280666615), SC_(165.05977868685570963880484285226236801091829085667) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.814723670482635498046875), SC_(165.72960507459808559363556374474621331783281428432), SC_(155.94303537203302039038459253858514519744042492687) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.835008561611175537109375), SC_(166.1437643475072450213850589977706405097494459633), SC_(155.49790159057507093379090279421715326600188839423) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.905791938304901123046875), SC_(167.92208662510538605295123531016085392863105576667), SC_(153.55506390929983022173923443501958373918045961089) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.9133758544921875), SC_(168.16267981804798359388072629530735668808033811404), SC_(153.28819391079877000530366101763415840680211693349) },
+ { SC_(198), SC_(0.814723670482635498046875), SC_(0.968867778778076171875), SC_(170.72602305167669158015910296169100914823218665514), SC_(150.38255701073586332068266010439148117028178018157) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.12698681652545928955078125), SC_(158.84531427666256996529468940790405779783170794294), SC_(170.75091915739496235017282742674793916371301204571) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.135477006435394287109375), SC_(159.06312274949735363002228892956551356984637309286), SC_(170.55316080106777874310772013859230993787618429305) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.22103404998779296875), SC_(160.8645165246363626491313370689954259278090693715), SC_(168.89095157333355931870697618724042185451258904013) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.814723670482635498046875), SC_(169.52832198159022913533093139395802626206166211806), SC_(160.17989408693920543128651318357339499464532794123) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.835008561611175537109375), SC_(169.92220923595183344555444422166281142357641783845), SC_(159.75302676159423635862617153821637196311584446055) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.905791938304901123046875), SC_(171.61164421300958690613714659797237016654433863798), SC_(157.88841205816680346274497523683460835337964971394) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.9133758544921875), SC_(171.83997417674223656516147625252599536264993557659), SC_(157.63210004687400987993156006125300607964013211823) },
+ { SC_(198), SC_(0.835008561611175537109375), SC_(0.968867778778076171875), SC_(174.26890349964832540142374008818339483038217267433), SC_(154.83861470119032558506455797903091089573940433914) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.12698681652545928955078125), SC_(174.12599938256832194670600237012627852592760455259), SC_(183.48638912686766776434832568008483389014312105826) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.135477006435394287109375), SC_(174.30140205146075852828586109314856069573190108097), SC_(183.3353294604459270939051995723159993949969635633) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.22103404998779296875), SC_(175.74683923154893972970123157593558813936086903282), SC_(182.05881343182666751361099215623688066407292787809) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.814723670482635498046875), SC_(182.54970212776968039928403459188542445202050881041), SC_(175.19861561625049174899061898558303212767168292138) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.835008561611175537109375), SC_(182.85219703052325676898900273656490913160173348563), SC_(174.85609562154234920924457278948046066556288274324) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.905791938304901123046875), SC_(184.14175514818880931803902531903448796761102725543), SC_(173.35383124442109455659528289543932153499312709564) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.9133758544921875), SC_(184.31501953353370807942897331749426088039327798332), SC_(173.14657389512751016541954992336084145151889276259) },
+ { SC_(198), SC_(0.905791938304901123046875), SC_(0.968867778778076171875), SC_(186.14182773377281892266317500695832597845425492734), SC_(170.87646499666006831317729474448537786906334806723) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.12698681652545928955078125), SC_(175.80139088876971640454458767230025866849737594527), SC_(184.81274037163795522594824960978433149014902742764) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.135477006435394287109375), SC_(175.97091367887202611270560688562288369058307379299), SC_(184.66802725901383680203785406933598927970888746697) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.22103404998779296875), SC_(177.36709422830142837432736422365471553856012888179), SC_(183.44399257813184360915829323623369280881567334436) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.814723670482635498046875), SC_(183.91493544252435967529487260489039435537825625173), SC_(176.83772456903188105314181670627993054489495191085) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.835008561611175537109375), SC_(184.20499470938435293912506551369096236830629203564), SC_(176.50687637083981326014273233967785743218256746634) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.905791938304901123046875), SC_(185.44021502706079791875538530330822920726128423834), SC_(175.05486791719180519374486105656628403636269456709) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.9133758544921875), SC_(185.60600518546287820961807587569129998395593867928), SC_(174.8544288816673554299512299374901148074915954718) },
+ { SC_(198), SC_(0.9133758544921875), SC_(0.968867778778076171875), SC_(187.35118933081629895752794483350664191404285970376), SC_(172.65729627905434626520533992354239835019669345568) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.12698681652545928955078125), SC_(188.51992504244490340080005528655826495419566257943), SC_(194.05900258903283005099803149062650237406013488164) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.135477006435394287109375), SC_(188.6303331220830676580310543497658251423341666146), SC_(193.97701076046074516032975847123326724221760969929) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.22103404998779296875), SC_(189.53234603021285039139496576514929954318973421181), SC_(193.27180865521372522598112398729681330254903875139) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.814723670482635498046875), SC_(193.5455135676301538321769773838846777062911229731), SC_(189.19191241142306786263661185511699911534583298413) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.835008561611175537109375), SC_(193.71263854134416872645838036650533552054987276184), SC_(188.97816082266079820649321194472033610771495252754) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.905791938304901123046875), SC_(194.41082967521906462956969084961627525090833363564), SC_(188.03155529633252210917254869748952300151807587156) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.9133758544921875), SC_(194.50274265981510427273894463739203909382968250275), SC_(187.89984195464530485392340805060940086699896060402) },
+ { SC_(198), SC_(0.968867778778076171875), SC_(0.968867778778076171875), SC_(195.44003226368224219560317142136588685554998859647), SC_(186.4407571647469219519801521530859281798093586033) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.12698681652545928955078125), SC_(20.251841708195420720323760739457621920949366565161), SC_(31.141467652301973907517725437297093821976912463803) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.135477006435394287109375), SC_(20.430677513367510366086458808684337785609024930391), SC_(30.940290845489304392384594741871198901786247845292) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.22103404998779296875), SC_(21.936952473911317759599153651349418764088924822163), SC_(29.278946570596372572955132269631807456988720583039) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.814723670482635498046875), SC_(29.909811379897521429358684336091130290594923275773), SC_(21.35872889993246488712989992070181168891240019865) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.835008561611175537109375), SC_(30.303492526178536444904940784391582521615224330747), SC_(21.001791432994304695362478961859197175582301008566) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.905791938304901123046875), SC_(32.026051720961699121027340984614199113457148489815), SC_(19.474433079823571135647608013640752098632021506149) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.9133758544921875), SC_(32.263197677712535562820350195717072058716979143137), SC_(19.268471940303398440530664492910595537490121345569) },
+ { SC_(206), SC_(0.12698681652545928955078125), SC_(0.968867778778076171875), SC_(34.853214499712072016490770094230796015908332051299), SC_(17.084859675924401540916036763329531434102347995325) },
+ { SC_(206), SC_(0.135477006435394287109375), SC_(0.12698681652545928955078125), SC_(21.847726859629994238089786893499406134823761741646), SC_(33.041850930624025842535593558608871159898254682041) },
+ { SC_(206), SC_(0.135477006435394287109375), SC_(0.135477006435394287109375), SC_(22.032148859845508432969000390420892699087244168859), SC_(32.835601738093441761047261757092800118543251664037) },
+ { SC_(206), SC_(0.135477006435394287109375), SC_(0.22103404998779296875), SC_(23.584564574970978794509391944398898763920430674589), SC_(31.131677150713404841469549431606925761858638813098) },
+ { SC_(206), SC_(0.135477006435394287109375), SC_(0.814723670482635498046875), SC_(31.778858776848783333489726672402304277622904587009), SC_(22.988816678232830277321729576147916333944178032187) },
+ { SC_(206), SC_(0.135477006435394287109375), SC_(0.835008561611175537109375), SC_(32.1826297433