|
Boost-Commit : |
From: john_at_[hidden]
Date: 2007-12-10 13:35:59
Author: johnmaddock
Date: 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
New Revision: 41958
URL: http://svn.boost.org/trac/boost/changeset/41958
Log:
Added expint and zeta functions, plus tests.
Fixed ntl::RR iostream operators.
Updated minimax program with zeta and expint approximations.
Added:
sandbox/math_toolkit/boost/math/special_functions/expint.hpp (contents, props changed)
sandbox/math_toolkit/boost/math/special_functions/zeta.hpp (contents, props changed)
sandbox/math_toolkit/libs/math/test/compile_test/sf_expint_incl_test.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/test/compile_test/sf_zeta_incl_test.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expint_1_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expint_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expint_small_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expinti_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expinti_data_double.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/expinti_data_long.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/test_expint.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/test/test_zeta.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/test/zeta_1_below_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/zeta_1_up_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/zeta_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/test/zeta_neg_data.ipp (contents, props changed)
sandbox/math_toolkit/libs/math/tools/expint_data.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/tools/expint_i_data.cpp (contents, props changed)
sandbox/math_toolkit/libs/math/tools/zeta_data.cpp (contents, props changed)
Text files modified:
sandbox/math_toolkit/boost/math/bindings/rr.hpp | 2
sandbox/math_toolkit/boost/math/special_functions.hpp | 2
sandbox/math_toolkit/boost/math/special_functions/math_fwd.hpp | 44 ++++++++++++
sandbox/math_toolkit/boost/math/tools/polynomial.hpp | 81 ++++++++++++++++++++++
sandbox/math_toolkit/libs/math/doc/sf_and_dist/Jamfile.v2 | 3
sandbox/math_toolkit/libs/math/minimax/f.cpp | 58 +++++++++++++++
sandbox/math_toolkit/libs/math/minimax/main.cpp | 143 +++++++++++++++++++++++++++++++--------
sandbox/math_toolkit/libs/math/test/Jamfile.v2 | 18 +++-
sandbox/math_toolkit/libs/math/test/compile_test/instantiate.hpp | 18 +++++
9 files changed, 325 insertions(+), 44 deletions(-)
Modified: sandbox/math_toolkit/boost/math/bindings/rr.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/bindings/rr.hpp (original)
+++ sandbox/math_toolkit/boost/math/bindings/rr.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -413,7 +413,7 @@
template <class charT, class traits>
inline std::basic_istream<charT, traits>& operator>>(std::basic_istream<charT, traits>& is, RR& a)
{
- long double v;
+ ::NTL::RR v;
is >> v;
a = v;
return is;
Modified: sandbox/math_toolkit/boost/math/special_functions.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/special_functions.hpp (original)
+++ sandbox/math_toolkit/boost/math/special_functions.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -29,6 +29,7 @@
#include <boost/math/special_functions/ellint_rf.hpp>
#include <boost/math/special_functions/ellint_rj.hpp>
#include <boost/math/special_functions/erf.hpp>
+#include <boost/math/special_functions/expint.hpp>
#include <boost/math/special_functions/expm1.hpp>
#include <boost/math/special_functions/factorials.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
@@ -47,5 +48,6 @@
#include <boost/math/special_functions/sinhc.hpp>
#include <boost/math/special_functions/spherical_harmonic.hpp>
#include <boost/math/special_functions/sqrt1pm1.hpp>
+#include <boost/math/special_functions/zeta.hpp>
#endif // BOOST_MATH_SPECIAL_FUNCTIONS_HPP
Added: sandbox/math_toolkit/boost/math/special_functions/expint.hpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/boost/math/special_functions/expint.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,1508 @@
+// 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_EXPINT_HPP
+#define BOOST_MATH_EXPINT_HPP
+
+#include <boost/math/tools/precision.hpp>
+#include <boost/math/tools/promotion.hpp>
+#include <boost/math/tools/fraction.hpp>
+#include <boost/math/tools/series.hpp>
+#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/digamma.hpp>
+#include <boost/math/special_functions/log1p.hpp>
+
+namespace boost{ namespace math{
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type
+ expint(unsigned n, T z, const Policy& /*pol*/);
+
+namespace detail{
+
+template <class T>
+inline T expint_1_rational(const T& z, const mpl::int_<0>&)
+{
+ // this function is never actually called
+ BOOST_ASSERT(0);
+ return z;
+}
+
+template <class T>
+T expint_1_rational(const T& z, const mpl::int_<53>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(z <= 1)
+ {
+ // Maximum Deviation Found: 2.006e-18
+ // Expected Error Term: 2.006e-18
+ // Max error found at double precision: 2.760e-17
+ static const T Y = 0.66373538970947265625F;
+ static const T P[6] = {
+ 0.0865197248079397976498L,
+ 0.0320913665303559189999L,
+ -0.245088216639761496153L,
+ -0.0368031736257943745142L,
+ -0.00399167106081113256961L,
+ -0.000111507792921197858394L
+ };
+ static const T Q[6] = {
+ 1L,
+ 0.37091387659397013215L,
+ 0.056770677104207528384L,
+ 0.00427347600017103698101L,
+ 0.000131049900798434683324L,
+ -0.528611029520217142048e-6L
+ };
+ result = tools::evaluate_polynomial(P, z)
+ / tools::evaluate_polynomial(Q, z);
+ result += z - log(z) - Y;
+ }
+ else if(z < -boost::math::tools::log_min_value<T>())
+ {
+ // Maximum Deviation Found (interpolated): 1.444e-17
+ // Max error found at double precision: 3.119e-17
+ static const T P[11] = {
+ -0.121013190657725568138e-18L,
+ -0.999999999999998811143L,
+ -43.3058660811817946037L,
+ -724.581482791462469795L,
+ -6046.8250112711035463L,
+ -27182.6254466733970467L,
+ -66598.2652345418633509L,
+ -86273.1567711649528784L,
+ -54844.4587226402067411L,
+ -14751.4895786128450662L,
+ -1185.45720315201027667L
+ };
+ static const T Q[12] = {
+ 1L,
+ 45.3058660811801465927L,
+ 809.193214954550328455L,
+ 7417.37624454689546708L,
+ 38129.5594484818471461L,
+ 113057.05869159631492L,
+ 192104.047790227984431L,
+ 180329.498380501819718L,
+ 86722.3403467334749201L,
+ 18455.4124737722049515L,
+ 1229.20784182403048905L,
+ -0.776491285282330997549L
+ };
+ T recip = 1 / z;
+ result = 1 + tools::evaluate_polynomial(P, recip)
+ / tools::evaluate_polynomial(Q, recip);
+ result *= exp(-z) * recip;
+ }
+ else
+ {
+ result = 0;
+ }
+ return result;
+}
+
+template <class T>
+T expint_1_rational(const T& z, const mpl::int_<64>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(z <= 1)
+ {
+ // Maximum Deviation Found: 3.807e-20
+ // Expected Error Term: 3.807e-20
+ // Max error found at long double precision: 6.249e-20
+
+ static const T Y = 0.66373538970947265625F;
+ static const T P[6] = {
+ 0.0865197248079397956816L,
+ 0.0275114007037026844633L,
+ -0.246594388074877139824L,
+ -0.0237624819878732642231L,
+ -0.00259113319641673986276L,
+ 0.30853660894346057053e-4L
+ };
+ static const T Q[7] = {
+ 1L,
+ 0.317978365797784100273L,
+ 0.0393622602554758722511L,
+ 0.00204062029115966323229L,
+ 0.732512107100088047854e-5L,
+ -0.202872781770207871975e-5L,
+ 0.52779248094603709945e-7L
+ };
+ result = tools::evaluate_polynomial(P, z)
+ / tools::evaluate_polynomial(Q, z);
+ result += z - log(z) - Y;
+ }
+ else if(z < -boost::math::tools::log_min_value<T>())
+ {
+ // Maximum Deviation Found (interpolated): 2.220e-20
+ // Max error found at long double precision: 1.346e-19
+ static const T P[14] = {
+ -0.534401189080684443046e-23L,
+ -0.999999999999999999905L,
+ -62.1517806091379402505L,
+ -1568.45688271895145277L,
+ -21015.3431990874009619L,
+ -164333.011755931661949L,
+ -777917.270775426696103L,
+ -2244188.56195255112937L,
+ -3888702.98145335643429L,
+ -3909822.65621952648353L,
+ -2149033.9538897398457L,
+ -584705.537139793925189L,
+ -65815.2605361889477244L,
+ -2038.82870680427258038L
+ };
+ static const T Q[14] = {
+ 1L,
+ 64.1517806091379399478L,
+ 1690.76044393722763785L,
+ 24035.9534033068949426L,
+ 203679.998633572361706L,
+ 1074661.58459976978285L,
+ 3586552.65020899358773L,
+ 7552186.84989547621411L,
+ 9853333.79353054111434L,
+ 7689642.74550683631258L,
+ 3385553.35146759180739L,
+ 763218.072732396428725L,
+ 73930.2995984054930821L,
+ 2063.86994219629165937L
+ };
+ T recip = 1 / z;
+ result = 1 + tools::evaluate_polynomial(P, recip)
+ / tools::evaluate_polynomial(Q, recip);
+ result *= exp(-z) * recip;
+ }
+ else
+ {
+ result = 0;
+ }
+ return result;
+}
+
+template <class T>
+T expint_1_rational(const T& z, const mpl::int_<113>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(z <= 1)
+ {
+ // Maximum Deviation Found: 2.477e-35
+ // Expected Error Term: 2.477e-35
+ // Max error found at long double precision: 6.810e-35
+
+ static const T Y = 0.66373538970947265625F;
+ static const T P[10] = {
+ 0.0865197248079397956434879099175975937L,
+ 0.0369066175910795772830865304506087759L,
+ -0.24272036838415474665971599314725545L,
+ -0.0502166331248948515282379137550178307L,
+ -0.00768384138547489410285101483730424919L,
+ -0.000612574337702109683505224915484717162L,
+ -0.380207107950635046971492617061708534e-4L,
+ -0.136528159460768830763009294683628406e-5L,
+ -0.346839106212658259681029388908658618e-7L,
+ -0.340500302777838063940402160594523429e-9L
+ };
+ static const T Q[10] = {
+ 1L,
+ 0.426568827778942588160423015589537302L,
+ 0.0841384046470893490592450881447510148L,
+ 0.0100557215850668029618957359471132995L,
+ 0.000799334870474627021737357294799839363L,
+ 0.434452090903862735242423068552687688e-4L,
+ 0.15829674748799079874182885081231252e-5L,
+ 0.354406206738023762100882270033082198e-7L,
+ 0.369373328141051577845488477377890236e-9L,
+ -0.274149801370933606409282434677600112e-12L
+ };
+ result = tools::evaluate_polynomial(P, z)
+ / tools::evaluate_polynomial(Q, z);
+ result += z - log(z) - Y;
+ }
+ else if(z <= 4)
+ {
+ // Max error in interpolated form: 5.614e-35
+ // Max error found at long double precision: 7.979e-35
+
+ static const T Y = 0.70190334320068359375F;
+
+ static const T P[17] = {
+ 0.298096656795020369955077350585959794L,
+ 12.9314045995266142913135497455971247L,
+ 226.144334921582637462526628217345501L,
+ 2070.83670924261732722117682067381405L,
+ 10715.1115684330959908244769731347186L,
+ 30728.7876355542048019664777316053311L,
+ 38520.6078609349855436936232610875297L,
+ -27606.0780981527583168728339620565165L,
+ -169026.485055785605958655247592604835L,
+ -254361.919204983608659069868035092282L,
+ -195765.706874132267953259272028679935L,
+ -83352.6826013533205474990119962408675L,
+ -19251.6828496869586415162597993050194L,
+ -2226.64251774578542836725386936102339L,
+ -109.009437301400845902228611986479816L,
+ -1.51492042209561411434644938098833499L
+ };
+ static const T Q[16] = {
+ 1L,
+ 46.734521442032505570517810766704587L,
+ 908.694714348462269000247450058595655L,
+ 9701.76053033673927362784882748513195L,
+ 63254.2815292641314236625196594947774L,
+ 265115.641285880437335106541757711092L,
+ 732707.841188071900498536533086567735L,
+ 1348514.02492635723327306628712057794L,
+ 1649986.81455283047769673308781585991L,
+ 1326000.828522976970116271208812099L,
+ 683643.09490612171772350481773951341L,
+ 217640.505137263607952365685653352229L,
+ 40288.3467237411710881822569476155485L,
+ 3932.89353979531632559232883283175754L,
+ 169.845369689596739824177412096477219L,
+ 2.17607292280092201170768401876895354L
+ };
+ T recip = 1 / z;
+ result = Y + tools::evaluate_polynomial(P, recip)
+ / tools::evaluate_polynomial(Q, recip);
+ result *= exp(-z) * recip;
+ }
+ else if(z < -boost::math::tools::log_min_value<T>())
+ {
+ // Max error in interpolated form: 4.413e-35
+ // Max error found at long double precision: 8.928e-35
+
+ static const T P[19] = {
+ -0.559148411832951463689610809550083986e-40L,
+ -0.999999999999999999999999999999999997L,
+ -166.542326331163836642960118190147367L,
+ -12204.639128796330005065904675153652L,
+ -520807.069767086071806275022036146855L,
+ -14435981.5242137970691490903863125326L,
+ -274574945.737064301247496460758654196L,
+ -3691611582.99810039356254671781473079L,
+ -35622515944.8255047299363690814678763L,
+ -248040014774.502043161750715548451142L,
+ -1243190389769.53458416330946622607913L,
+ -4441730126135.54739052731990368425339L,
+ -11117043181899.7388524310281751971366L,
+ -18976497615396.9717776601813519498961L,
+ -21237496819711.1011661104761906067131L,
+ -14695899122092.5161620333466757812848L,
+ -5737221535080.30569711574295785864903L,
+ -1077042281708.42654526404581272546244L,
+ -68028222642.1941480871395695677675137L
+ };
+ static const T Q[20] = {
+ 1L,
+ 168.542326331163836642960118190147311L,
+ 12535.7237814586576783518249115343619L,
+ 544891.263372016404143120911148640627L,
+ 15454474.7241010258634446523045237762L,
+ 302495899.896629522673410325891717381L,
+ 4215565948.38886507646911672693270307L,
+ 42552409471.7951815668506556705733344L,
+ 313592377066.753173979584098301610186L,
+ 1688763640223.4541980740597514904542L,
+ 6610992294901.59589748057620192145704L,
+ 18601637235659.6059890851321772682606L,
+ 36944278231087.2571020964163402941583L,
+ 50425858518481.7497071917028793820058L,
+ 45508060902865.0899967797848815980644L,
+ 25649955002765.3817331501988304758142L,
+ 8259575619094.6518520988612711292331L,
+ 1299981487496.12607474362723586264515L,
+ 70242279152.8241187845178443118302693L,
+ -37633302.9409263839042721539363416685L
+ };
+ T recip = 1 / z;
+ result = 1 + tools::evaluate_polynomial(P, recip)
+ / tools::evaluate_polynomial(Q, recip);
+ result *= exp(-z) * recip;
+ }
+ else
+ {
+ result = 0;
+ }
+ return result;
+}
+
+template <class T>
+struct expint_fraction
+{
+ typedef std::pair<T,T> result_type;
+ expint_fraction(unsigned n_, T z_) : b(n_ + z_), i(-1), n(n_){}
+ std::pair<T,T> operator()()
+ {
+ std::pair<T,T> result = std::make_pair(-static_cast<T>((i+1) * (n+i)), b);
+ b += 2;
+ ++i;
+ return result;
+ }
+private:
+ T b;
+ int i;
+ unsigned n;
+};
+
+template <class T, class Policy>
+inline T expint_as_fraction(unsigned n, T z, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ BOOST_MATH_INSTRUMENT_VARIABLE(z)
+ boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
+ expint_fraction<T> f(n, z);
+ T result = tools::continued_fraction_b(
+ f,
+ tools::digits<T>(),
+ max_iter);
+ policies::check_series_iterations("boost::math::expint_continued_fraction<%1%>(unsigned,%1%)", max_iter, pol);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ BOOST_MATH_INSTRUMENT_VARIABLE(max_iter)
+ result = exp(-z) / result;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ return result;
+}
+
+template <class T>
+struct expint_series
+{
+ typedef T result_type;
+ expint_series(unsigned k_, T z_, T x_k_, T denom_, T fact_)
+ : k(k_), z(z_), x_k(x_k_), denom(denom_), fact(fact_){}
+ T operator()()
+ {
+ x_k *= -z;
+ denom += 1;
+ fact *= ++k;
+ return x_k / (denom * fact);
+ }
+private:
+ unsigned k;
+ T z;
+ T x_k;
+ T denom;
+ T fact;
+};
+
+template <class T, class Policy>
+inline T expint_as_series(unsigned n, T z, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
+
+ BOOST_MATH_INSTRUMENT_VARIABLE(z)
+
+ T result = 0;
+ T x_k = -1;
+ T denom = T(1) - n;
+ T fact = 1;
+ unsigned k = 0;
+ for(; k < n - 1;)
+ {
+ result += x_k / (denom * fact);
+ denom += 1;
+ x_k *= -z;
+ fact *= ++k;
+ }
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += pow(-z, (int)n - 1)
+ * (boost::math::digamma(static_cast<T>(n)) - log(z)) / fact;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+
+ expint_series<T> s(k, z, x_k, denom, fact);
+ result = tools::sum_series(s, policies::digits<T, Policy>(), max_iter, result);
+ policies::check_series_iterations("boost::math::expint_series<%1%>(unsigned,%1%)", max_iter, pol);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ BOOST_MATH_INSTRUMENT_VARIABLE(max_iter)
+ return result;
+}
+
+template <class T, class Policy, class Tag>
+T expint_imp(unsigned n, T z, const Policy& pol, const Tag& tag)
+{
+ BOOST_MATH_STD_USING
+ static const char* function = "boost::math::expint<%1%>(unsigned, %1%)";
+ if(z < 0)
+ return policies::raise_domain_error<T>(function, "Function requires z >= 0 but got %1%.", z, pol);
+ if(z == 0)
+ return n == 1 ? policies::raise_overflow_error<T>(function, 0, pol) : 1 / (n - 1);
+
+ T result;
+
+ bool f;
+ if(n < 3)
+ {
+ f = z < 0.5;
+ }
+ else
+ {
+ f = z < (static_cast<T>(n - 2) / static_cast<T>(n - 1));
+ }
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4127) // conditional expression is constant
+#endif
+ if(n == 0)
+ result = exp(-z) / z;
+ else if((n == 1) && (Tag::value))
+ {
+ result = expint_1_rational(z, tag);
+ }
+ else if(f)
+ result = expint_as_series(n, z, pol);
+ else
+ result = expint_as_fraction(n, z, pol);
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+ return result;
+}
+
+template <class T>
+struct expint_i_series
+{
+ typedef T result_type;
+ expint_i_series(T z_) : k(0), z_k(1), z(z_){}
+ T operator()()
+ {
+ z_k *= z / ++k;
+ return z_k / k;
+ }
+private:
+ unsigned k;
+ T z_k;
+ T z;
+};
+
+template <class T, class Policy>
+T expint_i_as_series(T z, const Policy& pol)
+{
+ BOOST_MATH_STD_USING
+ T result = log(z); // (log(z) - log(1 / z)) / 2;
+ result += constants::euler<T>();
+ expint_i_series<T> s(z);
+ boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
+ result = tools::sum_series(s, policies::digits<T, Policy>(), max_iter, result);
+ policies::check_series_iterations("boost::math::expint_i_series<%1%>(%1%)", max_iter, pol);
+ return result;
+}
+
+template <class T, class Policy, class Tag>
+T expint_i_imp(T z, const Policy& pol, const Tag& tag)
+{
+ static const char* function = "boost::math::expint<%1%>(%1%)";
+ if(z < 0)
+ return -expint_imp(1, -z, pol, tag);
+ if(z == 0)
+ return -policies::raise_overflow_error<T>(function, 0, pol);
+ return expint_i_as_series(z, pol);
+}
+
+template <class T, class Policy>
+T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag)
+{
+ BOOST_MATH_STD_USING
+ static const char* function = "boost::math::expint<%1%>(%1%)";
+ if(z < 0)
+ return -expint_imp(1, -z, pol, tag);
+ if(z == 0)
+ return -policies::raise_overflow_error<T>(function, 0, pol);
+
+ T result;
+
+ if(z <= 6)
+ {
+ // Maximum Deviation Found: 2.852e-18
+ // Expected Error Term: 2.852e-18
+ // Max Error found at double precision = Poly: 2.636335e-16 Cheb: 4.187027e-16
+ static const T P[10] = {
+ 2.98677224343598593013L,
+ 0.356343618769377415068L,
+ 0.780836076283730801839L,
+ 0.114670926327032002811L,
+ 0.0499434773576515260534L,
+ 0.00726224593341228159561L,
+ 0.00115478237227804306827L,
+ 0.000116419523609765200999L,
+ 0.798296365679269702435e-5L,
+ 0.2777056254402008721e-6L
+ };
+ static const T Q[8] = {
+ 1L,
+ -1.17090412365413911947L,
+ 0.62215109846016746276L,
+ -0.195114782069495403315L,
+ 0.0391523431392967238166L,
+ -0.00504800158663705747345L,
+ 0.000389034007436065401822L,
+ -0.138972589601781706598e-4L
+ };
+
+ static const T r1 = static_cast<T>(1677624236387711.0L) / 4503599627370496uLL;
+ static const T r2 = 0.131401834143860282009280387409357165515556574352422001206362e-16L;
+ static const T r = static_cast<T>(0.372507410781366634461991866580119133535689497771654051555657435242200120636201854384926049951548942392L);
+ T t = (z / 3) - 1;
+ result = tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ t = (z - r1) - r2;
+ result *= t;
+ if(fabs(t) < 0.1)
+ {
+ result += boost::math::log1p(t / r);
+ }
+ else
+ {
+ result += log(z / r);
+ }
+ }
+ else if (z <= 10)
+ {
+ // Maximum Deviation Found: 6.546e-17
+ // Expected Error Term: 6.546e-17
+ // Max Error found at double precision = Poly: 6.890169e-17 Cheb: 6.772128e-17
+ static const T Y = 1.158985137939453125F;
+ static const T P[8] = {
+ 0.00139324086199402804173L,
+ -0.0349921221823888744966L,
+ -0.0264095520754134848538L,
+ -0.00761224003005476438412L,
+ -0.00247496209592143627977L,
+ -0.000374885917942100256775L,
+ -0.554086272024881826253e-4L,
+ -0.396487648924804510056e-5L
+ };
+ static const T Q[8] = {
+ 1L,
+ 0.744625566823272107711L,
+ 0.329061095011767059236L,
+ 0.100128624977313872323L,
+ 0.0223851099128506347278L,
+ 0.00365334190742316650106L,
+ 0.000402453408512476836472L,
+ 0.263649630720255691787e-4L
+ };
+ T t = z / 2 - 4;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 20)
+ {
+ // Maximum Deviation Found: 1.843e-17
+ // Expected Error Term: -1.842e-17
+ // Max Error found at double precision = Poly: 4.375868e-17 Cheb: 5.860967e-17
+
+ static const T Y = 1.0869731903076171875F;
+ static const T P[9] = {
+ -0.00893891094356945667451L,
+ -0.0484607730127134045806L,
+ -0.0652810444222236895772L,
+ -0.0478447572647309671455L,
+ -0.0226059218923777094596L,
+ -0.00720603636917482065907L,
+ -0.00155941947035972031334L,
+ -0.000209750022660200888349L,
+ -0.138652200349182596186e-4L
+ };
+ static const T Q[9] = {
+ 1L,
+ 1.97017214039061194971L,
+ 1.86232465043073157508L,
+ 1.09601437090337519977L,
+ 0.438873285773088870812L,
+ 0.122537731979686102756L,
+ 0.0233458478275769288159L,
+ 0.00278170769163303669021L,
+ 0.000159150281166108755531L
+ };
+ T t = z / 5 - 3;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 40)
+ {
+ // Maximum Deviation Found: 5.102e-18
+ // Expected Error Term: 5.101e-18
+ // Max Error found at double precision = Poly: 1.441088e-16 Cheb: 1.864792e-16
+
+
+ static const T Y = 1.03937530517578125F;
+ static const T P[9] = {
+ -0.00356165148914447597995L,
+ -0.0229930320357982333406L,
+ -0.0449814350482277917716L,
+ -0.0453759383048193402336L,
+ -0.0272050837209380717069L,
+ -0.00994403059883350813295L,
+ -0.00207592267812291726961L,
+ -0.000192178045857733706044L,
+ -0.113161784705911400295e-9L
+ };
+ static const T Q[9] = {
+ 1L,
+ 2.84354408840148561131L,
+ 3.6599610090072393012L,
+ 2.75088464344293083595L,
+ 1.2985244073998398643L,
+ 0.383213198510794507409L,
+ 0.0651165455496281337831L,
+ 0.00488071077519227853585L
+ };
+ T t = z / 10 - 3;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else
+ {
+ // Max Error found at double precision = 3.381886e-17
+ static const T exp40 = static_cast<T>(2.35385266837019985407899910749034804508871617254555467236651e17L);
+ static const T Y= 1.013065338134765625F;
+ static const T P[6] = {
+ -0.0130653381347656243849L,
+ 0.19029710559486576682L,
+ 94.7365094537197236011L,
+ -2516.35323679844256203L,
+ 18932.0850014925993025L,
+ -38703.1431362056714134L
+ };
+ static const T Q[7] = {
+ 1L,
+ 61.9733592849439884145L,
+ -2354.56211323420194283L,
+ 22329.1459489893079041L,
+ -70126.245140396567133L,
+ 54738.2833147775537106L,
+ 8297.16296356518409347L
+ };
+ T t = 1 / z;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ if(z < 41)
+ result *= exp(z) / z;
+ else
+ {
+ // Avoid premature overflow if we can:
+ t = z - 40;
+ if(t > tools::log_max_value<T>())
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp(z - 40) / z;
+ if(result > tools::max_value<T>() / exp40)
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp40;
+ }
+ }
+ }
+ result += z;
+ }
+ return result;
+}
+
+template <class T, class Policy>
+T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag)
+{
+ BOOST_MATH_STD_USING
+ static const char* function = "boost::math::expint<%1%>(%1%)";
+ if(z < 0)
+ return -expint_imp(1, -z, pol, tag);
+ if(z == 0)
+ return -policies::raise_overflow_error<T>(function, 0, pol);
+
+ T result;
+
+ if(z <= 6)
+ {
+ // Maximum Deviation Found: 3.883e-21
+ // Expected Error Term: 3.883e-21
+ // Max Error found at long double precision = Poly: 3.344801e-19 Cheb: 4.989937e-19
+
+ static const T P[11] = {
+ 2.98677224343598593764L,
+ 0.25891613550886736592L,
+ 0.789323584998672832285L,
+ 0.092432587824602399339L,
+ 0.0514236978728625906656L,
+ 0.00658477469745132977921L,
+ 0.00124914538197086254233L,
+ 0.000131429679565472408551L,
+ 0.11293331317982763165e-4L,
+ 0.629499283139417444244e-6L,
+ 0.177833045143692498221e-7L
+ };
+ static const T Q[9] = {
+ 1L,
+ -1.20352377969742325748L,
+ 0.66707904942606479811L,
+ -0.223014531629140771914L,
+ 0.0493340022262908008636L,
+ -0.00741934273050807310677L,
+ 0.00074353567782087939294L,
+ -0.455861727069603367656e-4L,
+ 0.131515429329812837701e-5L
+ };
+
+ static const T r1 = static_cast<T>(1677624236387711.0L) / 4503599627370496uLL;
+ static const T r2 = 0.131401834143860282009280387409357165515556574352422001206362e-16L;
+ static const T r = static_cast<T>(0.372507410781366634461991866580119133535689497771654051555657435242200120636201854384926049951548942392L);
+ T t = (z / 3) - 1;
+ result = tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ t = (z - r1) - r2;
+ result *= t;
+ if(fabs(t) < 0.1)
+ {
+ result += boost::math::log1p(t / r);
+ }
+ else
+ {
+ result += log(z / r);
+ }
+ }
+ else if (z <= 10)
+ {
+ // Maximum Deviation Found: 2.622e-21
+ // Expected Error Term: -2.622e-21
+ // Max Error found at long double precision = Poly: 1.208328e-20 Cheb: 1.073723e-20
+
+ static const T Y = 1.158985137939453125F;
+ static const T P[9] = {
+ 0.00139324086199409049399L,
+ -0.0345238388952337563247L,
+ -0.0382065278072592940767L,
+ -0.0156117003070560727392L,
+ -0.00383276012430495387102L,
+ -0.000697070540945496497992L,
+ -0.877310384591205930343e-4L,
+ -0.623067256376494930067e-5L,
+ -0.377246883283337141444e-6L
+ };
+ static const T Q[10] = {
+ 1L,
+ 1.08073635708902053767L,
+ 0.553681133533942532909L,
+ 0.176763647137553797451L,
+ 0.0387891748253869928121L,
+ 0.0060603004848394727017L,
+ 0.000670519492939992806051L,
+ 0.4947357050100855646e-4L,
+ 0.204339282037446434827e-5L,
+ 0.146951181174930425744e-7L
+ };
+ T t = z / 2 - 4;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 20)
+ {
+ // Maximum Deviation Found: 3.220e-20
+ // Expected Error Term: 3.220e-20
+ // Max Error found at long double precision = Poly: 7.696841e-20 Cheb: 6.205163e-20
+
+
+ static const T Y = 1.0869731903076171875F;
+ static const T P[10] = {
+ -0.00893891094356946995368L,
+ -0.0487562980088748775943L,
+ -0.0670568657950041926085L,
+ -0.0509577352851442932713L,
+ -0.02551800927409034206L,
+ -0.00892913759760086687083L,
+ -0.00224469630207344379888L,
+ -0.000392477245911296982776L,
+ -0.44424044184395578775e-4L,
+ -0.252788029251437017959e-5L
+ };
+ static const T Q[10] = {
+ 1L,
+ 2.00323265503572414261L,
+ 1.94688958187256383178L,
+ 1.19733638134417472296L,
+ 0.513137726038353385661L,
+ 0.159135395578007264547L,
+ 0.0358233587351620919881L,
+ 0.0056716655597009417875L,
+ 0.000577048986213535829925L,
+ 0.290976943033493216793e-4L
+ };
+ T t = z / 5 - 3;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 40)
+ {
+ // Maximum Deviation Found: 2.940e-21
+ // Expected Error Term: -2.938e-21
+ // Max Error found at long double precision = Poly: 3.419893e-19 Cheb: 3.359874e-19
+
+ static const T Y = 1.03937530517578125F;
+ static const T P[12] = {
+ -0.00356165148914447278177L,
+ -0.0240235006148610849678L,
+ -0.0516699967278057976119L,
+ -0.0586603078706856245674L,
+ -0.0409960120868776180825L,
+ -0.0185485073689590665153L,
+ -0.00537842101034123222417L,
+ -0.000920988084778273760609L,
+ -0.716742618812210980263e-4L,
+ -0.504623302166487346677e-9L,
+ 0.712662196671896837736e-10L,
+ -0.533769629702262072175e-11L
+ };
+ static const T Q[9] = {
+ 1L,
+ 3.13286733695729715455L,
+ 4.49281223045653491929L,
+ 3.84900294427622911374L,
+ 2.15205199043580378211L,
+ 0.802912186540269232424L,
+ 0.194793170017818925388L,
+ 0.0280128013584653182994L,
+ 0.00182034930799902922549L
+ };
+ T t = z / 10 - 3;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result *= exp(z) / z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ }
+ else
+ {
+ // Maximum Deviation Found: 3.536e-20
+ // Max Error found at long double precision = Poly: 1.310671e-19 Cheb: 8.630943e-11
+
+ static const T exp40 = static_cast<T>(2.35385266837019985407899910749034804508871617254555467236651e17L);
+ static const T Y= 1.013065338134765625F;
+ static const T P[9] = {
+ -0.0130653381347656250004L,
+ 0.644487780349757303739L,
+ 143.995670348227433964L,
+ -13918.9322758014173709L,
+ 476260.975133624194484L,
+ -7437102.15135982802122L,
+ 53732298.8764767916542L,
+ -160695051.957997452509L,
+ 137839271.592778020028L
+ };
+ static const T Q[9] = {
+ 1L,
+ 27.2103343964943718802L,
+ -8785.48528692879413676L,
+ 397530.290000322626766L,
+ -7356441.34957799368252L,
+ 63050914.5343400957524L,
+ -246143779.638307701369L,
+ 384647824.678554961174L,
+ -166288297.874583961493L
+ };
+ T t = 1 / z;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ if(z < 41)
+ result *= exp(z) / z;
+ else
+ {
+ // Avoid premature overflow if we can:
+ t = z - 40;
+ if(t > tools::log_max_value<T>())
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp(z - 40) / z;
+ if(result > tools::max_value<T>() / exp40)
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp40;
+ }
+ }
+ }
+ result += z;
+ }
+ return result;
+}
+
+template <class T, class Policy>
+T expint_i_imp(T z, const Policy& pol, const mpl::int_<113>& tag)
+{
+ BOOST_MATH_STD_USING
+ static const char* function = "boost::math::expint<%1%>(%1%)";
+ if(z < 0)
+ return -expint_imp(1, -z, pol, tag);
+ if(z == 0)
+ return -policies::raise_overflow_error<T>(function, 0, pol);
+
+ T result;
+
+ if(z <= 6)
+ {
+ // Maximum Deviation Found: 1.230e-36
+ // Expected Error Term: -1.230e-36
+ // Max Error found at long double precision = Poly: 4.355299e-34 Cheb: 7.512581e-34
+
+
+ static const T P[15] = {
+ 2.98677224343598593765287235997328555L,
+ -0.333256034674702967028780537349334037L,
+ 0.851831522798101228384971644036708463L,
+ -0.0657854833494646206186773614110374948L,
+ 0.0630065662557284456000060708977935073L,
+ -0.00311759191425309373327784154659649232L,
+ 0.00176213568201493949664478471656026771L,
+ -0.491548660404172089488535218163952295e-4L,
+ 0.207764227621061706075562107748176592e-4L,
+ -0.225445398156913584846374273379402765e-6L,
+ 0.996939977231410319761273881672601592e-7L,
+ 0.212546902052178643330520878928100847e-9L,
+ 0.154646053060262871360159325115980023e-9L,
+ 0.143971277122049197323415503594302307e-11L,
+ 0.306243138978114692252817805327426657e-13L
+ };
+ static const T Q[15] = {
+ 1L,
+ -1.40178870313943798705491944989231793L,
+ 0.943810968269701047641218856758605284L,
+ -0.405026631534345064600850391026113165L,
+ 0.123924153524614086482627660399122762L,
+ -0.0286364505373369439591132549624317707L,
+ 0.00516148845910606985396596845494015963L,
+ -0.000738330799456364820380739850924783649L,
+ 0.843737760991856114061953265870882637e-4L,
+ -0.767957673431982543213661388914587589e-5L,
+ 0.549136847313854595809952100614840031e-6L,
+ -0.299801381513743676764008325949325404e-7L,
+ 0.118419479055346106118129130945423483e-8L,
+ -0.30372295663095470359211949045344607e-10L,
+ 0.382742953753485333207877784720070523e-12L
+ };
+
+ static const T r1 = static_cast<T>(1677624236387711.0L) / 4503599627370496uLL;
+ static const T r2 = (static_cast<T>(266514582277687.0L) / 4503599627370496uLL) / 4503599627370496uLL;
+ static const T r3 = static_cast<T>(0.283806480836357377069325311780969887585024578164571984232357e-31L);
+ static const T r = static_cast<T>(0.372507410781366634461991866580119133535689497771654051555657435242200120636201854384926049951548942392L);
+ T t = (z / 3) - 1;
+ result = tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ t = ((z - r1) - r2) - r3;
+ result *= t;
+ if(fabs(t) < 0.1)
+ {
+ result += boost::math::log1p(t / r);
+ }
+ else
+ {
+ result += log(z / r);
+ }
+ }
+ else if (z <= 10)
+ {
+ // Maximum Deviation Found: 7.779e-36
+ // Expected Error Term: -7.779e-36
+ // Max Error found at long double precision = Poly: 2.576723e-35 Cheb: 1.236001e-34
+
+ static const T Y = 1.158985137939453125F;
+ static const T P[15] = {
+ 0.00139324086199409049282472239613554817L,
+ -0.0338173111691991289178779840307998955L,
+ -0.0555972290794371306259684845277620556L,
+ -0.0378677976003456171563136909186202177L,
+ -0.0152221583517528358782902783914356667L,
+ -0.00428283334203873035104248217403126905L,
+ -0.000922782631491644846511553601323435286L,
+ -0.000155513428088853161562660696055496696L,
+ -0.205756580255359882813545261519317096e-4L,
+ -0.220327406578552089820753181821115181e-5L,
+ -0.189483157545587592043421445645377439e-6L,
+ -0.122426571518570587750898968123803867e-7L,
+ -0.635187358949437991465353268374523944e-9L,
+ -0.203015132965870311935118337194860863e-10L,
+ -0.384276705503357655108096065452950822e-12L
+ };
+ static const T Q[15] = {
+ 1L,
+ 1.58784732785354597996617046880946257L,
+ 1.18550755302279446339364262338114098L,
+ 0.55598993549661368604527040349702836L,
+ 0.184290888380564236919107835030984453L,
+ 0.0459658051803613282360464632326866113L,
+ 0.0089505064268613225167835599456014705L,
+ 0.00139042673882987693424772855926289077L,
+ 0.000174210708041584097450805790176479012L,
+ 0.176324034009707558089086875136647376e-4L,
+ 0.142935845999505649273084545313710581e-5L,
+ 0.907502324487057260675816233312747784e-7L,
+ 0.431044337808893270797934621235918418e-8L,
+ 0.139007266881450521776529705677086902e-9L,
+ 0.234715286125516430792452741830364672e-11L
+ };
+ T t = z / 2 - 4;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 18)
+ {
+ // Maximum Deviation Found: 1.082e-34
+ // Expected Error Term: 1.080e-34
+ // Max Error found at long double precision = Poly: 1.958294e-34 Cheb: 2.472261e-34
+
+
+ static const T Y = 1.091579437255859375F;
+ static const T P[17] = {
+ -0.00685089599550151282724924894258520532L,
+ -0.0443313550253580053324487059748497467L,
+ -0.071538561252424027443296958795814874L,
+ -0.0622923153354102682285444067843300583L,
+ -0.0361631270264607478205393775461208794L,
+ -0.0153192826839624850298106509601033261L,
+ -0.00496967904961260031539602977748408242L,
+ -0.00126989079663425780800919171538920589L,
+ -0.000258933143097125199914724875206326698L,
+ -0.422110326689204794443002330541441956e-4L,
+ -0.546004547590412661451073996127115221e-5L,
+ -0.546775260262202177131068692199272241e-6L,
+ -0.404157632825805803833379568956559215e-7L,
+ -0.200612596196561323832327013027419284e-8L,
+ -0.502538501472133913417609379765434153e-10L,
+ -0.326283053716799774936661568391296584e-13L,
+ 0.869226483473172853557775877908693647e-15L
+ };
+ static const T Q[15] = {
+ 1L,
+ 2.23227220874479061894038229141871087L,
+ 2.40221000361027971895657505660959863L,
+ 1.65476320985936174728238416007084214L,
+ 0.816828602963895720369875535001248227L,
+ 0.306337922909446903672123418670921066L,
+ 0.0902400121654409267774593230720600752L,
+ 0.0212708882169429206498765100993228086L,
+ 0.00404442626252467471957713495828165491L,
+ 0.0006195601618842253612635241404054589L,
+ 0.755930932686543009521454653994321843e-4L,
+ 0.716004532773778954193609582677482803e-5L,
+ 0.500881663076471627699290821742924233e-6L,
+ 0.233593219218823384508105943657387644e-7L,
+ 0.554900353169148897444104962034267682e-9L
+ };
+ T t = z / 4 - 3.5;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else if(z <= 26)
+ {
+ // Maximum Deviation Found: 3.163e-35
+ // Expected Error Term: 3.163e-35
+ // Max Error found at long double precision = Poly: 4.158110e-35 Cheb: 5.385532e-35
+
+ static const T Y = 1.051731109619140625F;
+ static const T P[14] = {
+ -0.00144552494420652573815404828020593565L,
+ -0.0126747451594545338365684731262912741L,
+ -0.01757394877502366717526779263438073L,
+ -0.0126838952395506921945756139424722588L,
+ -0.0060045057928894974954756789352443522L,
+ -0.00205349237147226126653803455793107903L,
+ -0.000532606040579654887676082220195624207L,
+ -0.000107344687098019891474772069139014662L,
+ -0.169536802705805811859089949943435152e-4L,
+ -0.20863311729206543881826553010120078e-5L,
+ -0.195670358542116256713560296776654385e-6L,
+ -0.133291168587253145439184028259772437e-7L,
+ -0.595500337089495614285777067722823397e-9L,
+ -0.133141358866324100955927979606981328e-10L
+ };
+ static const T Q[14] = {
+ 1L,
+ 1.72490783907582654629537013560044682L,
+ 1.44524329516800613088375685659759765L,
+ 0.778241785539308257585068744978050181L,
+ 0.300520486589206605184097270225725584L,
+ 0.0879346899691339661394537806057953957L,
+ 0.0200802415843802892793583043470125006L,
+ 0.00362842049172586254520256100538273214L,
+ 0.000519731362862955132062751246769469957L,
+ 0.584092147914050999895178697392282665e-4L,
+ 0.501851497707855358002773398333542337e-5L,
+ 0.313085677467921096644895738538865537e-6L,
+ 0.127552010539733113371132321521204458e-7L,
+ 0.25737310826983451144405899970774587e-9L
+ };
+ T t = z / 4 - 5.5;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result *= exp(z) / z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ }
+ else if(z <= 42)
+ {
+ // Maximum Deviation Found: 7.972e-36
+ // Expected Error Term: 7.962e-36
+ // Max Error found at long double precision = Poly: 1.711721e-34 Cheb: 3.100018e-34
+
+ static const T Y = 1.032726287841796875F;
+ static const T P[15] = {
+ -0.00141056919297307534690895009969373233L,
+ -0.0123384175302540291339020257071411437L,
+ -0.0298127270706864057791526083667396115L,
+ -0.0390686759471630584626293670260768098L,
+ -0.0338226792912607409822059922949035589L,
+ -0.0211659736179834946452561197559654582L,
+ -0.0100428887460879377373158821400070313L,
+ -0.00370717396015165148484022792801682932L,
+ -0.0010768667551001624764329000496561659L,
+ -0.000246127328761027039347584096573123531L,
+ -0.437318110527818613580613051861991198e-4L,
+ -0.587532682329299591501065482317771497e-5L,
+ -0.565697065670893984610852937110819467e-6L,
+ -0.350233957364028523971768887437839573e-7L,
+ -0.105428907085424234504608142258423505e-8L
+ };
+ static const T Q[16] = {
+ 1L,
+ 3.17261315255467581204685605414005525L,
+ 4.85267952971640525245338392887217426L,
+ 4.74341914912439861451492872946725151L,
+ 3.31108463283559911602405970817931801L,
+ 1.74657006336994649386607925179848899L,
+ 0.718255607416072737965933040353653244L,
+ 0.234037553177354542791975767960643864L,
+ 0.0607470145906491602476833515412605389L,
+ 0.0125048143774226921434854172947548724L,
+ 0.00201034366420433762935768458656609163L,
+ 0.000244823338417452367656368849303165721L,
+ 0.213511655166983177960471085462540807e-4L,
+ 0.119323998465870686327170541547982932e-5L,
+ 0.322153582559488797803027773591727565e-7L,
+ -0.161635525318683508633792845159942312e-16L
+ };
+ T t = z / 8 - 4.25;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result *= exp(z) / z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ }
+ else if(z <= 56)
+ {
+ // Maximum Deviation Found: 4.469e-36
+ // Expected Error Term: 4.468e-36
+ // Max Error found at long double precision = Poly: 1.288958e-35 Cheb: 2.304586e-35
+
+ static const T Y = 1.0216197967529296875F;
+ static const T P[12] = {
+ -0.000322999116096627043476023926572650045L,
+ -0.00385606067447365187909164609294113346L,
+ -0.00686514524727568176735949971985244415L,
+ -0.00606260649593050194602676772589601799L,
+ -0.00334382362017147544335054575436194357L,
+ -0.00126108534260253075708625583630318043L,
+ -0.000337881489347846058951220431209276776L,
+ -0.648480902304640018785370650254018022e-4L,
+ -0.87652644082970492211455290209092766e-5L,
+ -0.794712243338068631557849449519994144e-6L,
+ -0.434084023639508143975983454830954835e-7L,
+ -0.107839681938752337160494412638656696e-8L
+ };
+ static const T Q[12] = {
+ 1L,
+ 2.09913805456661084097134805151524958L,
+ 2.07041755535439919593503171320431849L,
+ 1.26406517226052371320416108604874734L,
+ 0.529689923703770353961553223973435569L,
+ 0.159578150879536711042269658656115746L,
+ 0.0351720877642000691155202082629857131L,
+ 0.00565313621289648752407123620997063122L,
+ 0.000646920278540515480093843570291218295L,
+ 0.499904084850091676776993523323213591e-4L,
+ 0.233740058688179614344680531486267142e-5L,
+ 0.498800627828842754845418576305379469e-7L
+ };
+ T t = z / 7 - 7;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result *= exp(z) / z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ }
+ else if(z <= 84)
+ {
+ // Maximum Deviation Found: 5.588e-35
+ // Expected Error Term: -5.566e-35
+ // Max Error found at long double precision = Poly: 9.976345e-35 Cheb: 8.358865e-35
+
+ static const T Y = 1.015148162841796875F;
+ static const T P[11] = {
+ -0.000435714784725086961464589957142615216L,
+ -0.00432114324353830636009453048419094314L,
+ -0.0100740363285526177522819204820582424L,
+ -0.0116744115827059174392383504427640362L,
+ -0.00816145387784261141360062395898644652L,
+ -0.00371380272673500791322744465394211508L,
+ -0.00112958263488611536502153195005736563L,
+ -0.000228316462389404645183269923754256664L,
+ -0.29462181955852860250359064291292577e-4L,
+ -0.21972450610957417963227028788460299e-5L,
+ -0.720558173805289167524715527536874694e-7L
+ };
+ static const T Q[11] = {
+ 1L,
+ 2.95918362458402597039366979529287095L,
+ 3.96472247520659077944638411856748924L,
+ 3.15563251550528513747923714884142131L,
+ 1.64674612007093983894215359287448334L,
+ 0.58695020129846594405856226787156424L,
+ 0.144358385319329396231755457772362793L,
+ 0.024146911506411684815134916238348063L,
+ 0.0026257132337460784266874572001650153L,
+ 0.000167479843750859222348869769094711093L,
+ 0.475673638665358075556452220192497036e-5L
+ };
+ T t = z / 14 - 5;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result *= exp(z) / z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ result += z;
+ BOOST_MATH_INSTRUMENT_VARIABLE(result)
+ }
+ else if(z <= 210)
+ {
+ // Maximum Deviation Found: 4.448e-36
+ // Expected Error Term: 4.445e-36
+ // Max Error found at long double precision = Poly: 2.058532e-35 Cheb: 2.165465e-27
+
+ static const T Y= 1.00849151611328125F;
+ static const T P[9] = {
+ -0.0084915161132812500000001440233607358L,
+ 1.84479378737716028341394223076147872L,
+ -130.431146923726715674081563022115568L,
+ 4336.26945491571504885214176203512015L,
+ -76279.0031974974730095170437591004177L,
+ 729577.956271997673695191455111727774L,
+ -3661928.69330208734947103004900349266L,
+ 8570600.041606912735872059184527855L,
+ -6758379.93672362080947905580906028645L
+ };
+ static const T Q[10] = {
+ 1L,
+ -99.4868026047611434569541483506091713L,
+ 3879.67753690517114249705089803055473L,
+ -76495.82413252517165830203774900806L,
+ 820773.726408311894342553758526282667L,
+ -4803087.64956923577571031564909646579L,
+ 14521246.227703545012713173740895477L,
+ -19762752.0196769712258527849159393044L,
+ 8354144.67882768405803322344185185517L,
+ 355076.853106511136734454134915432571L
+ };
+ T t = 1 / z;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ result *= exp(z) / z;
+ result += z;
+ }
+ else // z > 210
+ {
+ // Maximum Deviation Found: 3.963e-37
+ // Expected Error Term: 3.963e-37
+ // Max Error found at long double precision = Poly: 1.248049e-36 Cheb: 2.843486e-29
+
+ static const T exp40 = static_cast<T>(2.35385266837019985407899910749034804508871617254555467236651e17L);
+ static const T Y= 1.00252532958984375F;
+ static const T P[8] = {
+ -0.00252532958984375000000000000000000085L,
+ 1.16591386866059087390621952073890359L,
+ -67.8483431314018462417456828499277579L,
+ 1567.68688154683822956359536287575892L,
+ -17335.4683325819116482498725687644986L,
+ 93632.6567462673524739954389166550069L,
+ -225025.189335919133214440347510936787L,
+ 175864.614717440010942804684741336853L
+ };
+ static const T Q[9] = {
+ 1L,
+ -65.6998869881600212224652719706425129L,
+ 1642.73850032324014781607859416890077L,
+ -19937.2610222467322481947237312818575L,
+ 124136.267326632742667972126625064538L,
+ -384614.251466704550678760562965502293L,
+ 523355.035910385688578278384032026998L,
+ -217809.552260834025885677791936351294L,
+ -8555.81719551123640677261226549550872L
+ };
+ T t = 1 / z;
+ result = Y + tools::evaluate_polynomial(P, t)
+ / tools::evaluate_polynomial(Q, t);
+ if(z < 41)
+ result *= exp(z) / z;
+ else
+ {
+ // Avoid premature overflow if we can:
+ t = z - 40;
+ if(t > tools::log_max_value<T>())
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp(z - 40) / z;
+ if(result > tools::max_value<T>() / exp40)
+ {
+ result = policies::raise_overflow_error<T>(function, 0, pol);
+ }
+ else
+ {
+ result *= exp40;
+ }
+ }
+ }
+ result += z;
+ }
+ return result;
+}
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type
+ expint_forwarder(T z, const Policy& /*pol*/, mpl::true_ const&)
+{
+ typedef typename tools::promote_args<T>::type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::precision<result_type, Policy>::type precision_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ typedef typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<0> >,
+ mpl::int_<0>,
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<53> >,
+ mpl::int_<53>, // double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<64> >,
+ mpl::int_<64>, // 80-bit long double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<113> >,
+ mpl::int_<113>, // 128-bit long double
+ mpl::int_<0> // too many bits, use generic version.
+ >::type
+ >::type
+ >::type
+ >::type tag_type;
+
+ return policies::checked_narrowing_cast<result_type, forwarding_policy>(detail::expint_i_imp(
+ static_cast<value_type>(z),
+ forwarding_policy(),
+ tag_type()), "boost::math::expint<%1%>(%1%)");
+}
+
+template <class T>
+inline typename tools::promote_args<T>::type
+expint_forwarder(unsigned n, T z, const mpl::false_&)
+{
+ return boost::math::expint(n, z, policies::policy<>());
+}
+
+} // namespace detail
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type
+ expint(unsigned n, T z, const Policy& /*pol*/)
+{
+ typedef typename tools::promote_args<T>::type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::precision<result_type, Policy>::type precision_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ typedef typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<0> >,
+ mpl::int_<0>,
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<53> >,
+ mpl::int_<53>, // double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<64> >,
+ mpl::int_<64>, // 80-bit long double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<113> >,
+ mpl::int_<113>, // 128-bit long double
+ mpl::int_<0> // too many bits, use generic version.
+ >::type
+ >::type
+ >::type
+ >::type tag_type;
+
+ return policies::checked_narrowing_cast<result_type, forwarding_policy>(detail::expint_imp(
+ n,
+ static_cast<value_type>(z),
+ forwarding_policy(),
+ tag_type()), "boost::math::expint<%1%>(unsigned, %1%)");
+}
+
+template <class T, class U>
+inline typename detail::expint_result<T, U>::type
+ expint(T const& z, U const& u)
+{
+ typedef typename policies::is_policy<U>::type tag_type;
+ return detail::expint_forwarder(z, u, tag_type());
+}
+
+template <class T>
+inline typename tools::promote_args<T>::type
+ expint(T z)
+{
+ return expint(z, policies::policy<>());
+}
+
+}} // namespaces
+
+#endif // BOOST_MATH_EXPINT_HPP
+
Modified: sandbox/math_toolkit/boost/math/special_functions/math_fwd.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/special_functions/math_fwd.hpp (original)
+++ sandbox/math_toolkit/boost/math/special_functions/math_fwd.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -621,6 +621,37 @@
template <class T>
bool isnormal BOOST_NO_MACRO_EXPAND(T t);
+ // Exponential integrals:
+ namespace detail{
+
+ template <class T, class U>
+ struct expint_result
+ {
+ typedef typename mpl::if_<
+ policies::is_policy<U>,
+ typename tools::promote_args<T>::type,
+ typename tools::promote_args<U>::type
+ >::type type;
+ };
+
+ } // namespace detail
+
+ template <class T, class Policy>
+ typename tools::promote_args<T>::type expint(unsigned n, T z, const Policy&);
+
+ template <class T, class U>
+ typename detail::expint_result<T, U>::type expint(T const& z, U const& u);
+
+ template <class T>
+ typename tools::promote_args<T>::type expint(T z);
+
+ // Zeta:
+ template <class T, class Policy>
+ typename tools::promote_args<T>::type zeta(T s, const Policy&);
+
+ template <class T>
+ typename tools::promote_args<T>::type zeta(T s);
+
} // namespace math
} // namespace boost
@@ -907,6 +938,17 @@
using boost::math::isfinite;\
using boost::math::isinf;\
using boost::math::isnan;\
- using boost::math::isnormal;
+ using boost::math::isnormal;\
+ \
+ template <class T, class U>\
+ inline typename boost::math::tools::promote_args<T,U>::type expint(T const& z, U const& u)\
+ { return boost::math::expint(z, u, Policy()); }\
+ \
+ template <class T>\
+ inline typename boost::math::tools::promote_args<T>::type expint(T z){ return boost::math::expint(z, Policy()); }\
+ \
+ template <class T>\
+ inline typename boost::math::tools::promote_args<T>::type zeta(T s){ return boost::math::zeta(s, Policy()); }
+
#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP
Added: sandbox/math_toolkit/boost/math/special_functions/zeta.hpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/boost/math/special_functions/zeta.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,898 @@
+// 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_ZETA_HPP
+#define BOOST_MATH_ZETA_HPP
+
+#include <boost/math/tools/precision.hpp>
+#include <boost/math/tools/series.hpp>
+#include <boost/math/policies/error_handling.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <boost/math/special_functions/sin_pi.hpp>
+
+namespace boost{ namespace math{ namespace detail{
+
+template <class T, class Policy>
+struct zeta_series_cache_size
+{
+ //
+ // Work how large to make our cache size when evaluating the series
+ // evaluation: normally this is just large enough for the series
+ // to have converged, but for arbitrary precision types we need a
+ // really large cache to achieve reasonable precision in a reasonable
+ // time. This is important when constructing rational approximations
+ // to zeta for example.
+ //
+ typedef typename boost::math::policies::precision<T,Policy>::type precision_type;
+ typedef typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<0> >,
+ mpl::int_<5000>,
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<64> >,
+ mpl::int_<70>,
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<113> >,
+ mpl::int_<100>,
+ mpl::int_<5000>
+ >::type
+ >::type
+ >::type type;
+};
+
+template <class T, class Policy>
+T zeta_series_imp(T s, T sc, const Policy&)
+{
+ //
+ // Series evaluation from:
+ // Havil, J. Gamma: Exploring Euler's Constant.
+ // Princeton, NJ: Princeton University Press, 2003.
+ //
+ // See also http://mathworld.wolfram.com/RiemannZetaFunction.html
+ //
+ BOOST_MATH_STD_USING
+ T sum = 0;
+ T mult = 0.5;
+ T change;
+ typedef typename zeta_series_cache_size<T,Policy>::type cache_size;
+ T powers[cache_size::value] = { 0, };
+ unsigned n = 0;
+ do{
+ T binom = -static_cast<T>(n);
+ T nested_sum = 1;
+ if(n < sizeof(powers) / sizeof(powers[0]))
+ powers[n] = pow(static_cast<T>(n + 1), -s);
+ for(unsigned k = 1; k <= n; ++k)
+ {
+ T p;
+ if(k < sizeof(powers) / sizeof(powers[0]))
+ {
+ p = powers[k];
+ //p = pow(k + 1, -s);
+ }
+ else
+ p = pow(static_cast<T>(k + 1), -s);
+ nested_sum += binom * p;
+ binom *= (k - static_cast<T>(n)) / (k + 1);
+ }
+ change = mult * nested_sum;
+ sum += change;
+ mult /= 2;
+ ++n;
+ }while(fabs(change / sum) > tools::epsilon<T>());
+
+ return sum * 1 / -boost::math::powm1(T(2), sc);
+}
+//
+// Classical p-series:
+//
+template <class T>
+struct zeta_series2
+{
+ typedef T result_type;
+ zeta_series2(T _s) : s(-_s), k(1){}
+ T operator()()
+ {
+ BOOST_MATH_STD_USING
+ return pow(static_cast<T>(k++), s);
+ }
+private:
+ T s;
+ unsigned k;
+};
+
+template <class T, class Policy>
+inline T zeta_series2_imp(T s, const Policy& pol)
+{
+ boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();;
+ zeta_series2<T> f(s);
+ T result = tools::sum_series(
+ f,
+ tools::digits<T>(),
+ max_iter);
+ policies::check_series_iterations("boost::math::zeta_series2<%1%>(%1%)", max_iter, pol);
+ return result;
+}
+
+template <class T, class Policy>
+T zeta_imp_prec(T s, T sc, const Policy& pol, const mpl::int_<0>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ //
+ // Only use power series if it will converge in 100
+ // iterations or less: the more iterations it consumes
+ // the slower convergence becomes so we have to be very
+ // careful in it's usage.
+ //
+ if (s > -log(tools::epsilon<T>()) / 4.5)
+ result = detail::zeta_series2_imp(s, pol);
+ else
+ result = detail::zeta_series_imp(s, sc, pol);
+ return result;
+}
+
+template <class T, class Policy>
+inline T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<53>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(s < 1)
+ {
+ // Rational Approximation
+ // Maximum Deviation Found: 2.020e-18
+ // Expected Error Term: -2.020e-18
+ // Max error found at double precision: 3.994987e-17
+ static const T P[6] = {
+ 0.24339294433593750202L,
+ -0.49092470516353571651L,
+ 0.0557616214776046784287L,
+ -0.00320912498879085894856L,
+ 0.000451534528645796438704L,
+ -0.933241270357061460782e-5L,
+ };
+ static const T Q[6] = {
+ 1L,
+ -0.279960334310344432495L,
+ 0.0419676223309986037706L,
+ -0.00413421406552171059003L,
+ 0.00024978985622317935355L,
+ -0.101855788418564031874e-4L,
+ };
+ result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc);
+ result -= 1.2433929443359375F;
+ result += (sc);
+ result /= (sc);
+ }
+ else if(s <= 2)
+ {
+ // Maximum Deviation Found: 9.007e-20
+ // Expected Error Term: 9.007e-20
+ static const T P[6] = {
+ 0.577215664901532860516,
+ 0.243210646940107164097,
+ 0.0417364673988216497593,
+ 0.00390252087072843288378,
+ 0.000249606367151877175456,
+ 0.110108440976732897969e-4,
+ };
+ static const T Q[6] = {
+ 1,
+ 0.295201277126631761737,
+ 0.043460910607305495864,
+ 0.00434930582085826330659,
+ 0.000255784226140488490982,
+ 0.10991819782396112081e-4,
+ };
+ result = tools::evaluate_polynomial(P, -sc) / tools::evaluate_polynomial(Q, -sc);
+ result += 1 / (-sc);
+ }
+ else if(s <= 4)
+ {
+ // Maximum Deviation Found: 5.946e-22
+ // Expected Error Term: -5.946e-22
+ static const float Y = 0.6986598968505859375;
+ static const T P[6] = {
+ -0.0537258300023595030676,
+ 0.0445163473292365591906,
+ 0.0128677673534519952905,
+ 0.00097541770457391752726,
+ 0.769875101573654070925e-4,
+ 0.328032510000383084155e-5,
+ };
+ static const T Q[7] = {
+ 1,
+ 0.33383194553034051422,
+ 0.0487798431291407621462,
+ 0.00479039708573558490716,
+ 0.000270776703956336357707,
+ 0.106951867532057341359e-4,
+ 0.236276623974978646399e-7,
+ };
+ result = tools::evaluate_polynomial(P, s - 2) / tools::evaluate_polynomial(Q, s - 2);
+ result += Y + 1 / (-sc);
+ }
+ else if(s <= 7)
+ {
+ // Maximum Deviation Found: 2.955e-17
+ // Expected Error Term: 2.955e-17
+ // Max error found at double precision: 2.009135e-16
+
+ static const T P[6] = {
+ -2.49710190602259410021,
+ -2.60013301809475665334,
+ -0.939260435377109939261,
+ -0.138448617995741530935,
+ -0.00701721240549802377623,
+ -0.229257310594893932383e-4,
+ };
+ static const T Q[9] = {
+ 1,
+ 0.706039025937745133628,
+ 0.15739599649558626358,
+ 0.0106117950976845084417,
+ -0.36910273311764618902e-4,
+ 0.493409563927590008943e-5,
+ -0.234055487025287216506e-6,
+ 0.718833729365459760664e-8,
+ -0.1129200113474947419e-9,
+ };
+ result = tools::evaluate_polynomial(P, s - 4) / tools::evaluate_polynomial(Q, s - 4);
+ result = 1 + exp(result);
+ }
+ else if(s < 15)
+ {
+ // Maximum Deviation Found: 7.117e-16
+ // Expected Error Term: 7.117e-16
+ // Max error found at double precision: 9.387771e-16
+ static const T P[7] = {
+ -4.78558028495135619286,
+ -1.89197364881972536382,
+ -0.211407134874412820099,
+ -0.000189204758260076688518,
+ 0.00115140923889178742086,
+ 0.639949204213164496988e-4,
+ 0.139348932445324888343e-5,
+ };
+ static const T Q[9] = {
+ 1,
+ 0.244345337378188557777,
+ 0.00873370754492288653669,
+ -0.00117592765334434471562,
+ -0.743743682899933180415e-4,
+ -0.21750464515767984778e-5,
+ 0.471001264003076486547e-8,
+ -0.833378440625385520576e-10,
+ 0.699841545204845636531e-12,
+ };
+ result = tools::evaluate_polynomial(P, s - 7) / tools::evaluate_polynomial(Q, s - 7);
+ result = 1 + exp(result);
+ }
+ else if(s < 36)
+ {
+ // Max error in interpolated form: 1.668e-17
+ // Max error found at long double precision: 1.669714e-17
+ static const T P[8] = {
+ -10.3948950573308896825,
+ -2.85827219671106697179,
+ -0.347728266539245787271,
+ -0.0251156064655346341766,
+ -0.00119459173416968685689,
+ -0.382529323507967522614e-4,
+ -0.785523633796723466968e-6,
+ -0.821465709095465524192e-8,
+ };
+ static const T Q[10] = {
+ 1,
+ 0.208196333572671890965,
+ 0.0195687657317205033485,
+ 0.00111079638102485921877,
+ 0.408507746266039256231e-4,
+ 0.955561123065693483991e-6,
+ 0.118507153474022900583e-7,
+ 0.222609483627352615142e-14,
+ };
+ result = tools::evaluate_polynomial(P, s - 15) / tools::evaluate_polynomial(Q, s - 15);
+ result = 1 + exp(result);
+ }
+ else if(s < 56)
+ {
+ result = 1 + pow(T(2), -s);
+ }
+ else
+ {
+ result = 1;
+ }
+ return result;
+}
+
+template <class T, class Policy>
+T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<64>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(s < 1)
+ {
+ // Rational Approximation
+ // Maximum Deviation Found: 3.099e-20
+ // Expected Error Term: 3.099e-20
+ // Max error found at long double precision: 5.890498e-20
+ static const T P[6] = {
+ 0.243392944335937499969L,
+ -0.496837806864865688082L,
+ 0.0680008039723709987107L,
+ -0.00511620413006619942112L,
+ 0.000455369899250053003335L,
+ -0.279496685273033761927e-4L,
+ };
+ static const T Q[7] = {
+ 1L,
+ -0.30425480068225790522L,
+ 0.050052748580371598736L,
+ -0.00519355671064700627862L,
+ 0.000360623385771198350257L,
+ -0.159600883054550987633e-4L,
+ 0.339770279812410586032e-6L,
+ };
+ result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc);
+ result -= 1.2433929443359375F;
+ result += (sc);
+ result /= (sc);
+ }
+ else if(s <= 2)
+ {
+ // Maximum Deviation Found: 1.059e-21
+ // Expected Error Term: 1.059e-21
+ // Max error found at long double precision: 1.626303e-19
+
+ static const T P[6] = {
+ 0.577215664901532860605L,
+ 0.222537368917162139445L,
+ 0.0356286324033215682729L,
+ 0.00304465292366350081446L,
+ 0.000178102511649069421904L,
+ 0.700867470265983665042e-5L,
+ };
+ static const T Q[7] = {
+ 1L,
+ 0.259385759149531030085L,
+ 0.0373974962106091316854L,
+ 0.00332735159183332820617L,
+ 0.000188690420706998606469L,
+ 0.635994377921861930071e-5L,
+ 0.226583954978371199405e-7L,
+ };
+ result = tools::evaluate_polynomial(P, -sc) / tools::evaluate_polynomial(Q, -sc);
+ result += 1 / (-sc);
+ }
+ else if(s <= 4)
+ {
+ // Maximum Deviation Found: 5.946e-22
+ // Expected Error Term: -5.946e-22
+ static const float Y = 0.6986598968505859375;
+ static const T P[7] = {
+ -0.053725830002359501027L,
+ 0.0470551187571475844778L,
+ 0.0101339410415759517471L,
+ 0.00100240326666092854528L,
+ 0.685027119098122814867e-4L,
+ 0.390972820219765942117e-5L,
+ 0.540319769113543934483e-7L,
+ };
+ static const T Q[8] = {
+ 1,
+ 0.286577739726542730421L,
+ 0.0447355811517733225843L,
+ 0.00430125107610252363302L,
+ 0.000284956969089786662045L,
+ 0.116188101609848411329e-4L,
+ 0.278090318191657278204e-6L,
+ -0.19683620233222028478e-8L,
+ };
+ result = tools::evaluate_polynomial(P, s - 2) / tools::evaluate_polynomial(Q, s - 2);
+ result += Y + 1 / (-sc);
+ }
+ else if(s <= 7)
+ {
+ // Max error found at long double precision: 8.132216e-19
+ static const T P[8] = {
+ -2.49710190602259407065L,
+ -3.36664913245960625334L,
+ -1.77180020623777595452L,
+ -0.464717885249654313933L,
+ -0.0643694921293579472583L,
+ -0.00464265386202805715487L,
+ -0.000165556579779704340166L,
+ -0.252884970740994069582e-5L,
+ };
+ static const T Q[9] = {
+ 1,
+ 1.01300131390690459085L,
+ 0.387898115758643503827L,
+ 0.0695071490045701135188L,
+ 0.00586908595251442839291L,
+ 0.000217752974064612188616L,
+ 0.397626583349419011731e-5L,
+ -0.927884739284359700764e-8L,
+ 0.119810501805618894381e-9L,
+ };
+ result = tools::evaluate_polynomial(P, s - 4) / tools::evaluate_polynomial(Q, s - 4);
+ result = 1 + exp(result);
+ }
+ else if(s < 15)
+ {
+ // Max error in interpolated form: 1.133e-18
+ // Max error found at long double precision: 2.183198e-18
+ static const T P[9] = {
+ -4.78558028495135548083L,
+ -3.23873322238609358947L,
+ -0.892338582881021799922L,
+ -0.131326296217965913809L,
+ -0.0115651591773783712996L,
+ -0.000657728968362695775205L,
+ -0.252051328129449973047e-4L,
+ -0.626503445372641798925e-6L,
+ -0.815696314790853893484e-8L,
+ };
+ static const T Q[9] = {
+ 1,
+ 0.525765665400123515036L,
+ 0.10852641753657122787L,
+ 0.0115669945375362045249L,
+ 0.000732896513858274091966L,
+ 0.30683952282420248448e-4L,
+ 0.819649214609633126119e-6L,
+ 0.117957556472335968146e-7L,
+ -0.193432300973017671137e-12L,
+ };
+ result = tools::evaluate_polynomial(P, s - 7) / tools::evaluate_polynomial(Q, s - 7);
+ result = 1 + exp(result);
+ }
+ else if(s < 42)
+ {
+ // Max error in interpolated form: 1.668e-17
+ // Max error found at long double precision: 1.669714e-17
+ static const T P[9] = {
+ -10.3948950573308861781L,
+ -2.82646012777913950108L,
+ -0.342144362739570333665L,
+ -0.0249285145498722647472L,
+ -0.00122493108848097114118L,
+ -0.423055371192592850196e-4L,
+ -0.1025215577185967488e-5L,
+ -0.165096762663509467061e-7L,
+ -0.145392555873022044329e-9L,
+ };
+ static const T Q[10] = {
+ 1,
+ 0.205135978585281988052L,
+ 0.0192359357875879453602L,
+ 0.00111496452029715514119L,
+ 0.434928449016693986857e-4L,
+ 0.116911068726610725891e-5L,
+ 0.206704342290235237475e-7L,
+ 0.209772836100827647474e-9L,
+ -0.939798249922234703384e-16L,
+ 0.264584017421245080294e-18L,
+ };
+ result = tools::evaluate_polynomial(P, s - 15) / tools::evaluate_polynomial(Q, s - 15);
+ result = 1 + exp(result);
+ }
+ else if(s < 63)
+ {
+ result = 1 + pow(T(2), -s);
+ }
+ else
+ {
+ result = 1;
+ }
+ return result;
+}
+
+template <class T, class Policy>
+T zeta_imp_prec(T s, T sc, const Policy& pol, const mpl::int_<113>&)
+{
+ BOOST_MATH_STD_USING
+ T result;
+ if(s < 1)
+ {
+ // Rational Approximation
+ // Maximum Deviation Found: 9.493e-37
+ // Expected Error Term: 9.492e-37
+ // Max error found at long double precision: 7.281332e-31
+
+ static const T P[10] = {
+ -1L,
+ -0.0353008629988648122808504280990313668L,
+ 0.0107795651204927743049369868548706909L,
+ 0.000523961870530500751114866884685172975L,
+ -0.661805838304910731947595897966487515e-4L,
+ -0.658932670403818558510656304189164638e-5L,
+ -0.103437265642266106533814021041010453e-6L,
+ 0.116818787212666457105375746642927737e-7L,
+ 0.660690993901506912123512551294239036e-9L,
+ 0.113103113698388531428914333768142527e-10L,
+ };
+ static const T Q[11] = {
+ 1L,
+ -0.387483472099602327112637481818565459L,
+ 0.0802265315091063135271497708694776875L,
+ -0.0110727276164171919280036408995078164L,
+ 0.00112552716946286252000434849173787243L,
+ -0.874554160748626916455655180296834352e-4L,
+ 0.530097847491828379568636739662278322e-5L,
+ -0.248461553590496154705565904497247452e-6L,
+ 0.881834921354014787309644951507523899e-8L,
+ -0.217062446168217797598596496310953025e-9L,
+ 0.315823200002384492377987848307151168e-11L,
+ };
+ result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc);
+ result += (sc);
+ result /= (sc);
+ }
+ else if(s <= 2)
+ {
+ // Maximum Deviation Found: 1.616e-37
+ // Expected Error Term: -1.615e-37
+
+ static const T P[10] = {
+ 0.577215664901532860606512090082402431L,
+ 0.255597968739771510415479842335906308L,
+ 0.0494056503552807274142218876983542205L,
+ 0.00551372778611700965268920983472292325L,
+ 0.00043667616723970574871427830895192731L,
+ 0.268562259154821957743669387915239528e-4L,
+ 0.109249633923016310141743084480436612e-5L,
+ 0.273895554345300227466534378753023924e-7L,
+ 0.583103205551702720149237384027795038e-9L,
+ -0.835774625259919268768735944711219256e-11L,
+ };
+ static const T Q[11] = {
+ 1L,
+ 0.316661751179735502065583176348292881L,
+ 0.0540401806533507064453851182728635272L,
+ 0.00598621274107420237785899476374043797L,
+ 0.000474907812321704156213038740142079615L,
+ 0.272125421722314389581695715835862418e-4L,
+ 0.112649552156479800925522445229212933e-5L,
+ 0.301838975502992622733000078063330461e-7L,
+ 0.422960728687211282539769943184270106e-9L,
+ -0.377105263588822468076813329270698909e-11L,
+ -0.581926559304525152432462127383600681e-13L,
+ };
+ result = tools::evaluate_polynomial(P, -sc) / tools::evaluate_polynomial(Q, -sc);
+ result += 1 / (-sc);
+ }
+ else if(s <= 4)
+ {
+ // Maximum Deviation Found: 1.891e-36
+ // Expected Error Term: -1.891e-36
+ // Max error found: 2.171527e-35
+
+ static const float Y = 0.6986598968505859375;
+ static const T P[11] = {
+ -0.0537258300023595010275848333539748089L,
+ 0.0429086930802630159457448174466342553L,
+ 0.0136148228754303412510213395034056857L,
+ 0.00190231601036042925183751238033763915L,
+ 0.000186880390916311438818302549192456581L,
+ 0.145347370745893262394287982691323657e-4L,
+ 0.805843276446813106414036600485884885e-6L,
+ 0.340818159286739137503297172091882574e-7L,
+ 0.115762357488748996526167305116837246e-8L,
+ 0.231904754577648077579913403645767214e-10L,
+ 0.340169592866058506675897646629036044e-12L,
+ };
+ static const T Q[12] = {
+ 1L,
+ 0.363755247765087100018556983050520554L,
+ 0.0696581979014242539385695131258321598L,
+ 0.00882208914484611029571547753782014817L,
+ 0.000815405623261946661762236085660996718L,
+ 0.571366167062457197282642344940445452e-4L,
+ 0.309278269271853502353954062051797838e-5L,
+ 0.12822982083479010834070516053794262e-6L,
+ 0.397876357325018976733953479182110033e-8L,
+ 0.8484432107648683277598472295289279e-10L,
+ 0.105677416606909614301995218444080615e-11L,
+ 0.547223964564003701979951154093005354e-15L,
+ };
+ result = tools::evaluate_polynomial(P, s - 2) / tools::evaluate_polynomial(Q, s - 2);
+ result += Y + 1 / (-sc);
+ }
+ else if(s <= 6)
+ {
+ // Max error in interpolated form: 1.510e-37
+ // Max error found at long double precision: 2.769266e-34
+
+ static const T Y = 3.28348541259765625F;
+
+ static const T P[13] = {
+ 0.786383506575062179339611614117697622L,
+ 0.495766593395271370974685959652073976L,
+ -0.409116737851754766422360889037532228L,
+ -0.57340744006238263817895456842655987L,
+ -0.280479899797421910694892949057963111L,
+ -0.0753148409447590257157585696212649869L,
+ -0.0122934003684672788499099362823748632L,
+ -0.00126148398446193639247961370266962927L,
+ -0.828465038179772939844657040917364896e-4L,
+ -0.361008916706050977143208468690645684e-5L,
+ -0.109879825497910544424797771195928112e-6L,
+ -0.214539416789686920918063075528797059e-8L,
+ -0.15090220092460596872172844424267351e-10L,
+ };
+ static const T Q[14] = {
+ 1L,
+ 1.69490865837142338462982225731926485L,
+ 1.22697696630994080733321401255942464L,
+ 0.495409420862526540074366618006341533L,
+ 0.122368084916843823462872905024259633L,
+ 0.0191412993625268971656513890888208623L,
+ 0.00191401538628980617753082598351559642L,
+ 0.000123318142456272424148930280876444459L,
+ 0.531945488232526067889835342277595709e-5L,
+ 0.161843184071894368337068779669116236e-6L,
+ 0.305796079600152506743828859577462778e-8L,
+ 0.233582592298450202680170811044408894e-10L,
+ -0.275363878344548055574209713637734269e-13L,
+ 0.221564186807357535475441900517843892e-15L,
+ };
+ result = tools::evaluate_polynomial(P, s - 4) / tools::evaluate_polynomial(Q, s - 4);
+ result -= Y;
+ result = 1 + exp(result);
+ }
+ else if(s < 10)
+ {
+ // Max error in interpolated form: 1.999e-34
+ // Max error found at long double precision: 2.156186e-33
+
+ static const T P[13] = {
+ -4.0545627381873738086704293881227365L,
+ -4.70088348734699134347906176097717782L,
+ -2.36921550900925512951976617607678789L,
+ -0.684322583796369508367726293719322866L,
+ -0.126026534540165129870721937592996324L,
+ -0.015636903921778316147260572008619549L,
+ -0.00135442294754728549644376325814460807L,
+ -0.842793965853572134365031384646117061e-4L,
+ -0.385602133791111663372015460784978351e-5L,
+ -0.130458500394692067189883214401478539e-6L,
+ -0.315861074947230418778143153383660035e-8L,
+ -0.500334720512030826996373077844707164e-10L,
+ -0.420204769185233365849253969097184005e-12L,
+ };
+ static const T Q[14] = {
+ 1L,
+ 0.97663511666410096104783358493318814L,
+ 0.40878780231201806504987368939673249L,
+ 0.0963890666609396058945084107597727252L,
+ 0.0142207619090854604824116070866614505L,
+ 0.00139010220902667918476773423995750877L,
+ 0.940669540194694997889636696089994734e-4L,
+ 0.458220848507517004399292480807026602e-5L,
+ 0.16345521617741789012782420625435495e-6L,
+ 0.414007452533083304371566316901024114e-8L,
+ 0.68701473543366328016953742622661377e-10L,
+ 0.603461891080716585087883971886075863e-12L,
+ 0.294670713571839023181857795866134957e-16L,
+ -0.147003914536437243143096875069813451e-18L,
+ };
+ result = tools::evaluate_polynomial(P, s - 6) / tools::evaluate_polynomial(Q, s - 6);
+ result = 1 + exp(result);
+ }
+ else if(s < 17)
+ {
+ // Max error in interpolated form: 1.641e-32
+ // Max error found at long double precision: 1.696121e-32
+ static const T P[13] = {
+ -6.91319491921722925920883787894829678L,
+ -3.65491257639481960248690596951049048L,
+ -0.813557553449954526442644544105257881L,
+ -0.0994317301685870959473658713841138083L,
+ -0.00726896610245676520248617014211734906L,
+ -0.000317253318715075854811266230916762929L,
+ -0.66851422826636750855184211580127133e-5L,
+ 0.879464154730985406003332577806849971e-7L,
+ 0.113838903158254250631678791998294628e-7L,
+ 0.379184410304927316385211327537817583e-9L,
+ 0.612992858643904887150527613446403867e-11L,
+ 0.347873737198164757035457841688594788e-13L,
+ -0.289187187441625868404494665572279364e-15L,
+ };
+ static const T Q[14] = {
+ 1L,
+ 0.427310044448071818775721584949868806L,
+ 0.074602514873055756201435421385243062L,
+ 0.00688651562174480772901425121653945942L,
+ 0.000360174847635115036351323894321880445L,
+ 0.973556847713307543918865405758248777e-5L,
+ -0.853455848314516117964634714780874197e-8L,
+ -0.118203513654855112421673192194622826e-7L,
+ -0.462521662511754117095006543363328159e-9L,
+ -0.834212591919475633107355719369463143e-11L,
+ -0.5354594751002702935740220218582929e-13L,
+ 0.406451690742991192964889603000756203e-15L,
+ 0.887948682401000153828241615760146728e-19L,
+ -0.34980761098820347103967203948619072e-21L,
+ };
+ result = tools::evaluate_polynomial(P, s - 10) / tools::evaluate_polynomial(Q, s - 10);
+ result = 1 + exp(result);
+ }
+ else if(s < 30)
+ {
+ // Max error in interpolated form: 1.563e-31
+ // Max error found at long double precision: 1.562725e-31
+
+ static const T P[13] = {
+ -11.7824798233959252791987402769438322L,
+ -4.36131215284987731928174218354118102L,
+ -0.732260980060982349410898496846972204L,
+ -0.0744985185694913074484248803015717388L,
+ -0.00517228281320594683022294996292250527L,
+ -0.000260897206152101522569969046299309939L,
+ -0.989553462123121764865178453128769948e-5L,
+ -0.286916799741891410827712096608826167e-6L,
+ -0.637262477796046963617949532211619729e-8L,
+ -0.106796831465628373325491288787760494e-9L,
+ -0.129343095511091870860498356205376823e-11L,
+ -0.102397936697965977221267881716672084e-13L,
+ -0.402663128248642002351627980255756363e-16L,
+ };
+ static const T Q[14] = {
+ 1L,
+ 0.311288325355705609096155335186466508L,
+ 0.0438318468940415543546769437752132748L,
+ 0.00374396349183199548610264222242269536L,
+ 0.000218707451200585197339671707189281302L,
+ 0.927578767487930747532953583797351219e-5L,
+ 0.294145760625753561951137473484889639e-6L,
+ 0.704618586690874460082739479535985395e-8L,
+ 0.126333332872897336219649130062221257e-9L,
+ 0.16317315713773503718315435769352765e-11L,
+ 0.137846712823719515148344938160275695e-13L,
+ 0.580975420554224366450994232723910583e-16L,
+ -0.291354445847552426900293580511392459e-22L,
+ 0.73614324724785855925025452085443636e-25L,
+ };
+ result = tools::evaluate_polynomial(P, s - 17) / tools::evaluate_polynomial(Q, s - 17);
+ result = 1 + exp(result);
+ }
+ else if(s < 74)
+ {
+ // Max error in interpolated form: 2.311e-27
+ // Max error found at long double precision: 2.297544e-27
+ static const T P[14] = {
+ -20.7944102007844314586649688802236072L,
+ -4.95759941987499442499908748130192187L,
+ -0.563290752832461751889194629200298688L,
+ -0.0406197001137935911912457120706122877L,
+ -0.0020846534789473022216888863613422293L,
+ -0.808095978462109173749395599401375667e-4L,
+ -0.244706022206249301640890603610060959e-5L,
+ -0.589477682919645930544382616501666572e-7L,
+ -0.113699573675553496343617442433027672e-8L,
+ -0.174767860183598149649901223128011828e-10L,
+ -0.210051620306761367764549971980026474e-12L,
+ -0.189187969537370950337212675466400599e-14L,
+ -0.116313253429564048145641663778121898e-16L,
+ -0.376708747782400769427057630528578187e-19L,
+ };
+ static const T Q[16] = {
+ 1L,
+ 0.205076752981410805177554569784219717L,
+ 0.0202526722696670378999575738524540269L,
+ 0.001278305290005994980069466658219057L,
+ 0.576404779858501791742255670403304787e-4L,
+ 0.196477049872253010859712483984252067e-5L,
+ 0.521863830500876189501054079974475762e-7L,
+ 0.109524209196868135198775445228552059e-8L,
+ 0.181698713448644481083966260949267825e-10L,
+ 0.234793316975091282090312036524695562e-12L,
+ 0.227490441461460571047545264251399048e-14L,
+ 0.151500292036937400913870642638520668e-16L,
+ 0.543475775154780935815530649335936121e-19L,
+ 0.241647013434111434636554455083309352e-28L,
+ -0.557103423021951053707162364713587374e-31L,
+ 0.618708773442584843384712258199645166e-34L,
+ };
+ result = tools::evaluate_polynomial(P, s - 30) / tools::evaluate_polynomial(Q, s - 30);
+ result = 1 + exp(result);
+ }
+ else if(s < 117)
+ {
+ result = 1 + pow(T(2), -s);
+ }
+ else
+ {
+ result = 1;
+ }
+ return result;
+}
+
+template <class T, class Policy, class Tag>
+T zeta_imp(T s, T sc, const Policy& pol, const Tag& tag)
+{
+ BOOST_MATH_STD_USING
+ if(s == 1)
+ return policies::raise_pole_error<T>(
+ "boost::math::zeta<%1%>",
+ "Evaluation of zeta function at pole %1%",
+ s, pol);
+ T result;
+ if(s == 0)
+ {
+ result = -0.5;
+ }
+ else if(s < 0)
+ {
+ std::swap(s, sc);
+ if(floor(sc/2) == sc/2)
+ result = 0;
+ else
+ {
+ result = boost::math::sin_pi(0.5f * sc, pol)
+ * 2 * pow(2 * constants::pi<T>(), -s)
+ * boost::math::tgamma(s, pol)
+ * zeta_imp(s, sc, pol, tag);
+ }
+ }
+ else
+ {
+ result = zeta_imp_prec(s, sc, pol, tag);
+ }
+ return result;
+}
+
+} // detail
+
+template <class T, class Policy>
+inline typename tools::promote_args<T>::type zeta(T s, const Policy&)
+{
+ typedef typename tools::promote_args<T>::type result_type;
+ typedef typename policies::evaluation<result_type, Policy>::type value_type;
+ typedef typename policies::precision<result_type, Policy>::type precision_type;
+ typedef typename policies::normalise<
+ Policy,
+ policies::promote_float<false>,
+ policies::promote_double<false>,
+ policies::discrete_quantile<>,
+ policies::assert_undefined<> >::type forwarding_policy;
+ typedef typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<0> >,
+ mpl::int_<0>,
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<53> >,
+ mpl::int_<53>, // double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<64> >,
+ mpl::int_<64>, // 80-bit long double
+ typename mpl::if_<
+ mpl::less_equal<precision_type, mpl::int_<113> >,
+ mpl::int_<113>, // 128-bit long double
+ mpl::int_<0> // too many bits, use generic version.
+ >::type
+ >::type
+ >::type
+ >::type tag_type;
+ //typedef mpl::int_<0> tag_type;
+
+ return policies::checked_narrowing_cast<result_type, forwarding_policy>(detail::zeta_imp(
+ static_cast<value_type>(s),
+ 1 - static_cast<value_type>(s),
+ forwarding_policy(),
+ tag_type()), "boost::math::zeta<%1%>(%1%)");
+}
+
+template <class T>
+inline typename tools::promote_args<T>::type zeta(T s)
+{
+ return zeta(s, policies::policy<>());
+}
+
+}} // namespaces
+
+#endif // BOOST_MATH_ZETA_HPP
+
+
Modified: sandbox/math_toolkit/boost/math/tools/polynomial.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/tools/polynomial.hpp (original)
+++ sandbox/math_toolkit/boost/math/tools/polynomial.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -15,6 +15,83 @@
namespace boost{ namespace math{ namespace tools{
template <class T>
+T chebyshev_coefficient(unsigned n, unsigned m)
+{
+ BOOST_MATH_STD_USING
+ if(m > n)
+ return 0;
+ if((n & 1) != (m & 1))
+ return 0;
+ if(n == 0)
+ return 1;
+ T result = T(n) / 2;
+ unsigned r = n - m;
+ r /= 2;
+
+ BOOST_ASSERT(n - 2 * r == m);
+
+ if(r & 1)
+ result = -result;
+ result /= n - r;
+ result *= boost::math::binomial_coefficient<T>(n - r, r);
+ result *= ldexp(1.0f, m);
+ return result;
+}
+
+template <class Seq>
+Seq polynomial_to_chebyshev(const Seq& s)
+{
+ // Converts a Polynomial into Chebyshev form:
+ typedef Seq::value_type value_type;
+ typedef Seq::difference_type difference_type;
+ Seq result(s);
+ difference_type order = s.size() - 1;
+ difference_type even_order = order & 1 ? order - 1 : order;
+ difference_type odd_order = order & 1 ? order : order - 1;
+
+ for(difference_type i = even_order; i >= 0; i -= 2)
+ {
+ value_type val = s[i];
+ for(difference_type k = even_order; k > i; k -= 2)
+ {
+ val -= result[k] * chebyshev_coefficient<value_type>(static_cast<unsigned>(k), static_cast<unsigned>(i));
+ }
+ val /= chebyshev_coefficient<value_type>(static_cast<unsigned>(i), static_cast<unsigned>(i));
+ result[i] = val;
+ }
+ result[0] *= 2;
+
+ for(difference_type i = odd_order; i >= 0; i -= 2)
+ {
+ value_type val = s[i];
+ for(difference_type k = odd_order; k > i; k -= 2)
+ {
+ val -= result[k] * chebyshev_coefficient<value_type>(static_cast<unsigned>(k), static_cast<unsigned>(i));
+ }
+ val /= chebyshev_coefficient<value_type>(static_cast<unsigned>(i), static_cast<unsigned>(i));
+ result[i] = val;
+ }
+ return result;
+}
+
+template <class Seq, class T>
+T evaluate_chebyshev(const Seq& a, const T& x)
+{
+ // Clenshaw's formula:
+ typedef typename Seq::difference_type difference_type;
+ T yk2 = 0;
+ T yk1 = 0;
+ T yk = 0;
+ for(difference_type i = a.size() - 1; i >= 1; --i)
+ {
+ yk2 = yk1;
+ yk1 = yk;
+ yk = 2 * x * yk1 - yk2 + a[i];
+ }
+ return a[0] / 2 + yk * x - yk1;
+}
+
+template <class T>
class polynomial
{
public:
@@ -63,6 +140,10 @@
{
return boost::math::tools::evaluate_polynomial(&m_data[0], z, m_data.size());;
}
+ std::vector<T> chebyshev()const
+ {
+ return polynomial_to_chebyshev(m_data);
+ }
// operators:
template <class U>
Modified: sandbox/math_toolkit/libs/math/doc/sf_and_dist/Jamfile.v2
==============================================================================
--- sandbox/math_toolkit/libs/math/doc/sf_and_dist/Jamfile.v2 (original)
+++ sandbox/math_toolkit/libs/math/doc/sf_and_dist/Jamfile.v2 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -40,7 +40,7 @@
# PDF Options:
# TOC Generation: this is needed for FOP-0.9 and later:
- # <xsl:param>fop1.extensions=1
+ <xsl:param>fop1.extensions=0
<format>pdf:<xsl:param>xep.extensions=1
# TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
<format>pdf:<xsl:param>fop.extensions=0
@@ -66,3 +66,4 @@
;
+
Modified: sandbox/math_toolkit/libs/math/minimax/f.cpp
==============================================================================
--- sandbox/math_toolkit/libs/math/minimax/f.cpp (original)
+++ sandbox/math_toolkit/libs/math/minimax/f.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -10,6 +10,7 @@
#include <boost/math/tools/polynomial.hpp>
#include <boost/math/special_functions.hpp>
#include <boost/math/special_functions/zeta.hpp>
+#include <boost/math/special_functions/expint.hpp>
#include <cmath>
@@ -200,14 +201,29 @@
case 14:
// K(k)
{
+ static double P[] =
+ {
+ 1.38629436111989062502E0,
+ 9.65735902811690126535E-2,
+ 3.08851465246711995998E-2,
+ 1.49380448916805252718E-2,
+ 8.79078273952743772254E-3,
+ 6.18901033637687613229E-3,
+ 6.87489687449949877925E-3,
+ 9.85821379021226008714E-3,
+ 7.97404013220415179367E-3,
+ 2.28025724005875567385E-3,
+ 1.37982864606273237150E-4
+ };
+
// x = 1 - k^2
boost::math::ntl::RR mp = x;
if(mp < 1e-20)
mp = 1e-20;
+ if(mp == 1)
+ mp -= 1e-20;
boost::math::ntl::RR k = sqrt(1 - mp);
- static const boost::math::ntl::RR l4 = log(boost::math::ntl::RR(4));
- boost::math::ntl::RR p2 = boost::math::constants::pi<boost::math::ntl::RR>() / 2;
- return (boost::math::ellint_1(k) + 1) / (1 + l4 - log(mp));
+ return (boost::math::ellint_1(k) - mp/*boost::math::tools::evaluate_polynomial(P, mp)*/) / -log(mp);
}
case 15:
// E(k)
@@ -242,6 +258,42 @@
{
return log(boost::math::zeta(x) - 1);
}
+ case 21:
+ // expint[1] over [0,1]:
+ {
+ boost::math::ntl::RR tiny = boost::lexical_cast<boost::math::ntl::RR>("1e-5000");
+ boost::math::ntl::RR z = (x <= tiny) ? tiny : x;
+ return boost::math::expint(1, z) - z + log(z);
+ }
+ case 22:
+ // expint[1] over [1,N],
+ // Note that x varies from [0,1]:
+ {
+ boost::math::ntl::RR z = 1 / x;
+ return boost::math::expint(1, z) * exp(z) * z;
+ }
+ case 23:
+ // expin Ei over [0,R]
+ {
+ static const boost::math::ntl::RR root =
+ boost::lexical_cast<boost::math::ntl::RR>("0.372507410781366634461991866580119133535689497771654051555657435242200120636201854384926049951548942392");
+ boost::math::ntl::RR z = x < (std::numeric_limits<long double>::min)() ? (std::numeric_limits<long double>::min)() : x;
+ return (boost::math::expint(z) - log(z / root)) / (z - root);
+ }
+ case 24:
+ // Expint Ei for large x:
+ {
+ static const boost::math::ntl::RR root =
+ boost::lexical_cast<boost::math::ntl::RR>("0.372507410781366634461991866580119133535689497771654051555657435242200120636201854384926049951548942392");
+ boost::math::ntl::RR z = x < (std::numeric_limits<long double>::min)() ? (std::numeric_limits<long double>::max)() : 1 / x;
+ return (boost::math::expint(z) - z) * z * exp(-z);
+ //return (boost::math::expint(z) - log(z)) * z * exp(-z);
+ }
+ case 25:
+ // Expint Ei for large x:
+ {
+ return (boost::math::expint(x) - x) * x * exp(-x);
+ }
}
return 0;
}
Modified: sandbox/math_toolkit/libs/math/minimax/main.cpp
==============================================================================
--- sandbox/math_toolkit/libs/math/minimax/main.cpp (original)
+++ sandbox/math_toolkit/libs/math/minimax/main.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -13,6 +13,7 @@
} // workaround for spirit parser.
#include <boost/math/tools/remez.hpp>
#include <boost/math/tools/test.hpp>
+#include <boost/math/special_functions/binomial.hpp>
#include <boost/spirit/core.hpp>
#include <boost/spirit/actor.hpp>
#include <boost/lexical_cast.hpp>
@@ -42,14 +43,14 @@
int variant(0);
int skew(0);
int brake(50);
-boost::math::ntl::RR x_offset(0), y_offset(0);
+boost::math::ntl::RR x_offset(0), y_offset(0), x_scale(1);
bool auto_offset_y;
boost::shared_ptr<boost::math::tools::remez_minimax<boost::math::ntl::RR> > p_remez;
boost::math::ntl::RR the_function(const boost::math::ntl::RR& val)
{
- return f(val + x_offset, variant) + y_offset;
+ return f(x_scale * (val + x_offset), variant) + y_offset;
}
void step_some(unsigned count)
@@ -64,9 +65,9 @@
if(auto_offset_y)
{
boost::math::ntl::RR fa, fb, fm;
- fa = f(a + x_offset, variant);
- fb = f(b + x_offset, variant);
- fm = f((a+b)/2 + x_offset, variant);
+ fa = f(x_scale * (a + x_offset), variant);
+ fb = f(x_scale * (b + x_offset), variant);
+ fm = f(x_scale * ((a+b)/2 + x_offset), variant);
y_offset = -(fa + fb + fm) / 3;
NTL::RR::SetOutputPrecision(5);
std::cout << "Setting auto-y-offset to " << y_offset << std::endl;
@@ -124,6 +125,8 @@
{
boost::math::tools::polynomial<boost::math::ntl::RR> n = p_remez->numerator();
boost::math::tools::polynomial<boost::math::ntl::RR> d = p_remez->denominator();
+ std::vector<boost::math::ntl::RR> cn = n.chebyshev();
+ std::vector<boost::math::ntl::RR> cd = d.chebyshev();
int prec = 2 + (target_precision * 3010LL)/10000;
std::cout << std::scientific << std::setprecision(prec);
NTL::RR::SetOutputPrecision(prec);
@@ -146,6 +149,7 @@
std::cout << " }\n";
std::cout << "X offset: " << x_offset << std::endl;
+ std::cout << "X scale: " << x_scale << std::endl;
std::cout << "Y offset: " << y_offset << std::endl;
std::cout << "P = {";
@@ -162,6 +166,20 @@
}
std::cout << " }\n";
+ std::cout << "CP = {";
+ for(i = 0; i < cn.size(); ++i)
+ {
+ std::cout << " " << cn[i] << "L," << std::endl;
+ }
+ std::cout << " }\n";
+
+ std::cout << "CQ = {";
+ for(i = 0; i < cd.size(); ++i)
+ {
+ std::cout << " " << cd[i] << "L," << std::endl;
+ }
+ std::cout << " }\n";
+
show_extra(n, d, x_offset, y_offset, variant);
}
else
@@ -204,8 +222,24 @@
// polynomials:
//
boost::math::tools::polynomial<T> n, d;
- n = p_remez->numerator();
- d = p_remez->denominator();
+ boost::math::tools::polynomial<boost::math::ntl::RR> nr, dr;
+ nr = p_remez->numerator();
+ dr = p_remez->denominator();
+ n = nr;
+ d = dr;
+
+ std::vector<boost::math::ntl::RR> cn1, cd1;
+ cn1 = nr.chebyshev();
+ cd1 = dr.chebyshev();
+ std::vector<T> cn, cd;
+ for(unsigned i = 0; i < cn1.size(); ++i)
+ {
+ cn.push_back(boost::math::tools::real_cast<T>(cn1[i]));
+ }
+ for(unsigned i = 0; i < cd1.size(); ++i)
+ {
+ cd.push_back(boost::math::tools::real_cast<T>(cd1[i]));
+ }
//
// We'll test at the Chebeshev control points which is where
// (in theory) the largest deviation should occur. For good
@@ -215,60 +249,69 @@
zeros(p_remez->zero_points()),
cheb(p_remez->chebyshev_points());
- boost::math::ntl::RR max_error(0);
+ boost::math::ntl::RR max_error(0), cheb_max_error(0);
//
// Do the tests at the zeros:
//
std::cout << "Starting tests at " << name << " precision...\n";
- std::cout << "Absissa Error\n";
- unsigned i;
- for(i = 0; i < zeros.size(); ++i)
+ std::cout << "Absissa Error (Poly) Error (Cheb)\n";
+ for(unsigned i = 0; i < zeros.size(); ++i)
{
boost::math::ntl::RR true_result = the_function(zeros[i]);
T absissa = boost::math::tools::real_cast<T>(zeros[i]);
boost::math::ntl::RR test_result = n.evaluate(absissa) / d.evaluate(absissa);
- boost::math::ntl::RR err;
+ boost::math::ntl::RR cheb_result = boost::math::tools::evaluate_chebyshev(cn, absissa) / boost::math::tools::evaluate_chebyshev(cd, absissa);
+ boost::math::ntl::RR err, cheb_err;
if(rel_error)
{
err = boost::math::tools::relative_error(test_result, true_result);
+ cheb_err = boost::math::tools::relative_error(cheb_result, true_result);
}
else
{
err = fabs(test_result - true_result);
+ cheb_err = fabs(cheb_result - true_result);
}
if(err > max_error)
max_error = err;
+ if(cheb_err > cheb_max_error)
+ cheb_max_error = cheb_err;
std::cout << std::setprecision(6) << std::setw(15) << std::left << absissa
- << boost::math::tools::real_cast<T>(err) << std::endl;
+ << std::setw(15) << std::left << boost::math::tools::real_cast<T>(err) << boost::math::tools::real_cast<T>(cheb_err) << std::endl;
}
//
// Do the tests at the Chebeshev control points:
//
- for(i = 0; i < cheb.size(); ++i)
+ for(unsigned i = 0; i < cheb.size(); ++i)
{
boost::math::ntl::RR true_result = the_function(cheb[i]);
T absissa = boost::math::tools::real_cast<T>(cheb[i]);
boost::math::ntl::RR test_result = n.evaluate(absissa) / d.evaluate(absissa);
- boost::math::ntl::RR err;
+ boost::math::ntl::RR cheb_result = boost::math::tools::evaluate_chebyshev(cn, absissa) / boost::math::tools::evaluate_chebyshev(cd, absissa);
+ boost::math::ntl::RR err, cheb_err;
if(rel_error)
{
err = boost::math::tools::relative_error(test_result, true_result);
+ cheb_err = boost::math::tools::relative_error(cheb_result, true_result);
}
else
{
err = fabs(test_result - true_result);
+ cheb_err = fabs(cheb_result - true_result);
}
if(err > max_error)
max_error = err;
std::cout << std::setprecision(6) << std::setw(15) << std::left << absissa
- << boost::math::tools::real_cast<T>(err) << std::endl;
+ << std::setw(15) << std::left << boost::math::tools::real_cast<T>(err) <<
+ boost::math::tools::real_cast<T>(cheb_err) << std::endl;
}
std::string msg = "Max Error found at ";
msg += name;
msg += " precision = ";
msg.append(62 - 17 - msg.size(), ' ');
- std::cout << msg << std::setprecision(6) << boost::math::tools::real_cast<T>(max_error) << std::endl;
+ std::cout << msg << std::setprecision(6) << "Poly: " << std::setw(20) << std::left
+ << boost::math::tools::real_cast<T>(max_error) << "Cheb: " << boost::math::tools::real_cast<T>(cheb_max_error) << std::endl;
}
else
{
@@ -310,37 +353,67 @@
// polynomials:
//
boost::math::tools::polynomial<T> n, d;
- n = p_remez->numerator();
- d = p_remez->denominator();
+ boost::math::tools::polynomial<boost::math::ntl::RR> nr, dr;
+ nr = p_remez->numerator();
+ dr = p_remez->denominator();
+ n = nr;
+ d = dr;
+
+ std::vector<boost::math::ntl::RR> cn1, cd1;
+ cn1 = nr.chebyshev();
+ cd1 = dr.chebyshev();
+ std::vector<T> cn, cd;
+ for(unsigned i = 0; i < cn1.size(); ++i)
+ {
+ cn.push_back(boost::math::tools::real_cast<T>(cn1[i]));
+ }
+ for(unsigned i = 0; i < cd1.size(); ++i)
+ {
+ cd.push_back(boost::math::tools::real_cast<T>(cd1[i]));
+ }
- boost::math::ntl::RR max_error(0);
+ boost::math::ntl::RR max_error(0), max_cheb_error(0);
boost::math::ntl::RR step = (b - a) / count;
//
// Do the tests at the zeros:
//
std::cout << "Starting tests at " << name << " precision...\n";
- std::cout << "Absissa Error\n";
+ std::cout << "Absissa Error (poly) Error (Cheb)\n";
for(boost::math::ntl::RR x = a; x <= b; x += step)
{
boost::math::ntl::RR true_result = the_function(x);
T absissa = boost::math::tools::real_cast<T>(x);
boost::math::ntl::RR test_result = n.evaluate(absissa) / d.evaluate(absissa);
- boost::math::ntl::RR err;
+ boost::math::ntl::RR cheb_result = boost::math::tools::evaluate_chebyshev(cn, absissa) / boost::math::tools::evaluate_chebyshev(cd, absissa);
+ boost::math::ntl::RR err, cheb_err;
if(rel_error)
{
err = boost::math::tools::relative_error(test_result, true_result);
+ cheb_err = boost::math::tools::relative_error(cheb_result, true_result);
}
else
{
err = fabs(test_result - true_result);
+ cheb_err = fabs(cheb_result - true_result);
}
if(err > max_error)
max_error = err;
+ if(cheb_err > max_cheb_error)
+ max_cheb_error = cheb_err;
std::cout << std::setprecision(6) << std::setw(15) << std::left << boost::math::tools::real_cast<double>(absissa)
- << (test_result < true_result ? "-" : "") << boost::math::tools::real_cast<double>(err) << std::endl;
+ << (test_result < true_result ? "-" : "") << std::setw(20) << std::left
+ << boost::math::tools::real_cast<double>(err)
+ << boost::math::tools::real_cast<double>(cheb_err) << std::endl;
}
- std::cout << "Max error found: " << std::setprecision(6) << boost::math::tools::real_cast<T>(max_error) << std::endl;
+ std::string msg = "Max Error found at ";
+ msg += name;
+ msg += " precision = ";
+ msg.append(62 - 17 - msg.size(), ' ');
+ std::cout << msg << "Poly: " << std::setprecision(6)
+ << std::setw(15) << std::left
+ << boost::math::tools::real_cast<T>(max_error)
+ << "Cheb: " << boost::math::tools::real_cast<T>(max_cheb_error) << std::endl;
}
else
{
@@ -435,7 +508,7 @@
if(false == parse(line.c_str(),
(
- str_p("range")[assign_a(started, false)] && rr_p[assign_a(a)] && rr_p[assign_a(b)]
+ str_p("range")[assign_a(started, false)] && real_p[assign_a(a)] && real_p[assign_a(b)]
||
str_p("relative")[assign_a(started, false)][assign_a(rel_error, true)]
||
@@ -479,6 +552,8 @@
||
str_p("x-offset") && real_p[assign_a(x_offset)]
||
+ str_p("x-scale") && real_p[assign_a(x_scale)]
+ ||
str_p("y-offset") && str_p("auto")[assign_a(auto_offset_y, true)]
||
str_p("y-offset") && real_p[assign_a(y_offset)][assign_a(auto_offset_y, false)]
@@ -509,20 +584,24 @@
}
else
{
- std::cout << "a = " << a << std::endl;
- std::cout << "b = " << b << std::endl;
+ std::cout << "Variant = " << variant << std::endl;
+ std::cout << "range = [" << a << "," << b << "]" << std::endl;
std::cout << "Relative Error = " << rel_error << std::endl;
std::cout << "Pin to Origin = " << pin << std::endl;
- std::cout << "Order (Numerator) = " << orderN << std::endl;
- std::cout << "Order (Denominator) = " << orderD << std::endl;
+ std::cout << "Order (Num/Denom) = " << orderN << "/" << orderD << std::endl;
std::cout << "Target Precision = " << target_precision << std::endl;
std::cout << "Working Precision = " << working_precision << std::endl;
- std::cout << "Variant = " << variant << std::endl;
std::cout << "Skew = " << skew << std::endl;
std::cout << "Brake = " << brake << std::endl;
std::cout << "X Offset = " << x_offset << std::endl;
- std::cout << "Y Offset = " << y_offset << std::endl;
- std::cout << "Automatic Y Offset = " << auto_offset_y << std::endl;
+ std::cout << "X scale = " << x_scale << std::endl;
+ std::cout << "Y Offset = ";
+ if(auto_offset_y)
+ std::cout << "Auto (";
+ std::cout << y_offset;
+ if(auto_offset_y)
+ std::cout << ")";
+ std::cout << std::endl;
}
}
return 0;
Modified: sandbox/math_toolkit/libs/math/test/Jamfile.v2
==============================================================================
--- sandbox/math_toolkit/libs/math/test/Jamfile.v2 (original)
+++ sandbox/math_toolkit/libs/math/test/Jamfile.v2 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -44,6 +44,10 @@
run special_functions_test.cpp /boost/unit_test//boost_unit_test_framework/<link>static ;
run test_bernoulli.cpp ;
run test_constants.cpp ;
+run test_bessel_j.cpp ;
+run test_bessel_y.cpp ;
+run test_bessel_i.cpp ;
+run test_bessel_k.cpp ;
run test_beta.cpp ;
run test_beta_dist.cpp ;
run test_binomial.cpp
@@ -83,6 +87,7 @@
run test_ellint_3.cpp ;
run test_erf.cpp ;
run test_error_handling.cpp ;
+run test_expint.cpp ;
run test_exponential_dist.cpp ;
run test_extreme_value.cpp ;
run test_factorials.cpp ;
@@ -301,16 +306,12 @@
run test_triangular.cpp ;
run test_uniform.cpp ;
run test_weibull.cpp ;
+run test_zeta.cpp ;
+
run test_policy.cpp ;
run test_policy_2.cpp ;
run test_policy_sf.cpp ;
-run test_bessel_j.cpp ;
-run test_bessel_y.cpp ;
-run test_bessel_i.cpp ;
-run test_bessel_k.cpp ;
-run test_zeta.cpp ;
-
compile compile_test/dist_bernoulli_incl_test.cpp ;
compile compile_test/dist_beta_incl_test.cpp ;
compile compile_test/dist_binomial_incl_test.cpp ;
@@ -344,6 +345,7 @@
compile compile_test/sf_ellint_rf_incl_test.cpp ;
compile compile_test/sf_ellint_rj_incl_test.cpp ;
compile compile_test/sf_erf_incl_test.cpp ;
+compile compile_test/sf_expint_incl_test.cpp ;
compile compile_test/sf_expm1_incl_test.cpp ;
compile compile_test/sf_factorials_incl_test.cpp ;
compile compile_test/sf_fpclassify_incl_test.cpp ;
@@ -362,6 +364,7 @@
compile compile_test/sf_sinhc_incl_test.cpp ;
compile compile_test/sf_sph_harm_incl_test.cpp ;
compile compile_test/sf_sqrt1pm1_incl_test.cpp ;
+compile compile_test/sf_zeta_incl_test.cpp ;
compile compile_test/std_real_concept_check.cpp ;
compile compile_test/test_traits.cpp ;
compile compile_test/tools_config_inc_test.cpp ;
@@ -390,3 +393,6 @@
+
+
+
Modified: sandbox/math_toolkit/libs/math/test/compile_test/instantiate.hpp
==============================================================================
--- sandbox/math_toolkit/libs/math/test/compile_test/instantiate.hpp (original)
+++ sandbox/math_toolkit/libs/math/test/compile_test/instantiate.hpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -191,6 +191,12 @@
boost::math::sph_bessel(i, 1);
boost::math::sph_neumann(i, v2);
boost::math::sph_neumann(i, i);
+ boost::math::expint(v1);
+ boost::math::expint(i);
+ boost::math::expint(i, v2);
+ boost::math::expint(i, i);
+ boost::math::zeta(v1);
+ boost::math::zeta(i);
//
// All over again, with a policy this time:
//
@@ -286,6 +292,12 @@
boost::math::sph_bessel(i, 1, pol);
boost::math::sph_neumann(i, v2, pol);
boost::math::sph_neumann(i, i, pol);
+ boost::math::expint(v1, pol);
+ boost::math::expint(i, pol);
+ boost::math::expint(i, v2, pol);
+ boost::math::expint(i, i, pol);
+ boost::math::zeta(v1, pol);
+ boost::math::zeta(i, pol);
//
// All over again with the versions in test::
//
@@ -380,6 +392,12 @@
test::sph_bessel(i, 1);
test::sph_neumann(i, v2);
test::sph_neumann(i, i);
+ test::expint(v1);
+ test::expint(i);
+ test::expint(i, v2);
+ test::expint(i, i);
+ test::zeta(v1);
+ test::zeta(i);
}
Added: sandbox/math_toolkit/libs/math/test/compile_test/sf_expint_incl_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/compile_test/sf_expint_incl_test.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,28 @@
+// 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)
+//
+// Basic sanity check that header <boost/math/special_functions/expint.hpp>
+// #includes all the files that it needs to.
+//
+#include <boost/math/special_functions/expint.hpp>
+//
+// Note this header includes no other headers, this is
+// important if this test is to be meaningful:
+//
+#include "test_compile_result.hpp"
+
+void check()
+{
+ check_result<float>(boost::math::expint(f));
+ check_result<double>(boost::math::expint(d));
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ check_result<long double>(boost::math::expint(l));
+#endif
+ check_result<float>(boost::math::expint(u, f));
+ check_result<double>(boost::math::expint(u, d));
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ check_result<long double>(boost::math::expint(u, l));
+#endif
+}
Added: sandbox/math_toolkit/libs/math/test/compile_test/sf_zeta_incl_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/compile_test/sf_zeta_incl_test.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,23 @@
+// 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)
+//
+// Basic sanity check that header <boost/math/special_functions/zeta.hpp>
+// #includes all the files that it needs to.
+//
+#include <boost/math/special_functions/zeta.hpp>
+//
+// Note this header includes no other headers, this is
+// important if this test is to be meaningful:
+//
+#include "test_compile_result.hpp"
+
+void check()
+{
+ check_result<float>(boost::math::zeta(f));
+ check_result<double>(boost::math::zeta(d));
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ check_result<long double>(boost::math::zeta(l));
+#endif
+}
Added: sandbox/math_toolkit/libs/math/test/expint_1_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expint_1_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,84 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 3>, 79> expint_1_data = {{
+ { SC_(1), SC_(0.1690093176520690576580818742513656616211e-8), SC_(19.62126651228390287899433646349668926594) },
+ { SC_(1), SC_(0.2114990849122477811761200428009033203125e-8), SC_(19.39699968832702671432639506875262488287) },
+ { SC_(1), SC_(0.7099628440698779741069301962852478027344e-8), SC_(18.18600772876256587669156181753338435097) },
+ { SC_(1), SC_(0.136718796284185373224318027496337890625e-7), SC_(17.53070904418311673532926624670363745081) },
+ { SC_(1), SC_(0.1679341288252089725574478507041931152344e-7), SC_(17.32506346964272541627765227695487661752) },
+ { SC_(1), SC_(0.586768322818898013792932033538818359375e-7), SC_(16.07400526183027268777222922688894197166) },
+ { SC_(1), SC_(0.1140460881288163363933563232421875e-6), SC_(15.40944763756462608330646107757571975159) },
+ { SC_(1), SC_(0.1455586016163579188287258148193359375e-6), SC_(15.16547155182818279856457574476936266928) },
+ { SC_(1), SC_(0.38918477685001562349498271942138671875e-6), SC_(14.18199632563439348037946938445484633991) },
+ { SC_(1), SC_(0.623782625552848912775516510009765625e-6), SC_(13.71024884463401352596363384090540526092) },
+ { SC_(1), SC_(0.104669607026153244078159332275390625e-5), SC_(13.19265733629451552935983109160182922456) },
+ { SC_(1), SC_(0.2951089072666945867240428924560546875e-5), SC_(12.15612356475179839693915983580837953116) },
+ { SC_(1), SC_(0.4877083483734168112277984619140625e-5), SC_(11.65375237571303028293100602849280330023) },
+ { SC_(1), SC_(0.9066634447663091123104095458984375e-5), SC_(11.033702828615680805096853068034765697) },
+ { SC_(1), SC_(0.2360353755648247897624969482421875e-4), SC_(10.07692189920168231695897773396921896378) },
+ { SC_(1), SC_(0.60817910707555711269378662109375e-4), SC_(9.130471380452133719689002203686010732863) },
+ { SC_(1), SC_(0.000119476739200763404369354248046875), SC_(8.455292664848407732192394706135617033129) },
+ { SC_(1), SC_(0.0002437086659483611583709716796875), SC_(7.742565066979092841621580079924528124121) },
+ { SC_(1), SC_(0.00047970912419259548187255859375), SC_(7.065594615713263713209655779382416164774) },
+ { SC_(1), SC_(0.000960788573138415813446044921875), SC_(6.371501073281348028486161198392483333344) },
+ { SC_(1), SC_(0.00113048148341476917266845703125), SC_(6.209026142656637951294057898954292515858) },
+ { SC_(1), SC_(0.0033707791008055210113525390625), SC_(5.118763649942589236114477763556608384932) },
+ { SC_(1), SC_(0.007697627879679203033447265625), SC_(4.297310240071577860879490194258146908042) },
+ { SC_(1), SC_(0.0154774188995361328125), SC_(3.606575234235758813120382950507615467416) },
+ { SC_(1), SC_(0.0305807329714298248291015625), SC_(2.940517962291826559900925068133667615931) },
+ { SC_(1), SC_(0.0346831791102886199951171875), SC_(2.818669547758849173655366691300656029988) },
+ { SC_(1), SC_(0.09283597767353057861328125), SC_(1.890430395046114091623024011625489238192) },
+ { SC_(1), SC_(0.22476322948932647705078125), SC_(1.128230840748073484651782346841079611668) },
+ { SC_(1), SC_(0.23917420208454132080078125), SC_(1.078947851117239985434642728998206006734) },
+ { SC_(1), SC_(0.4500701129436492919921875), SC_(0.6252319809071619975475212606569679083844) },
+ { SC_(1), SC_(1.785583972930908203125), SC_(0.06605196207880094390425879479033907552898) },
+ { SC_(1), SC_(4.8770198822021484375), SC_(0.001326894275438860249857941044254174502639) },
+ { SC_(1), SC_(5.4930877685546875), SC_(0.0006460832160891306352056104536312996827518) },
+ { SC_(1), SC_(5.623225688934326171875), SC_(0.0005557114466261269081523366304841856778567) },
+ { SC_(1), SC_(6.349340915679931640625), SC_(0.0002414929458653428650902712691508606087705) },
+ { SC_(1), SC_(6.77385044097900390625), SC_(0.0001491057337258556360697724884053639712183) },
+ { SC_(1), SC_(7.094316959381103515625), SC_(0.000103833853056272701038880940251981448874) },
+ { SC_(1), SC_(7.88065433502197265625), SC_(0.4302184733486055021456160704267900644151e-4) },
+ { SC_(1), SC_(9.41909885406494140625), SC_(0.785158179791932713400818863165202252408e-5) },
+ { SC_(1), SC_(10.5962162017822265625), SC_(0.2170821091221718858998745985121834633123e-5) },
+ { SC_(1), SC_(11.0517024993896484375), SC_(0.1323971054451696237675804650020934283271e-5) },
+ { SC_(1), SC_(13.9249114990234375), SC_(0.6030052082140414872763484176234936031379e-7) },
+ { SC_(1), SC_(14.85147190093994140625), SC_(0.2246847323452812310807076843921206699284e-7) },
+ { SC_(1), SC_(15.408351898193359375), SC_(0.1243451611444526471238603318210383094864e-7) },
+ { SC_(1), SC_(18.0646991729736328125), SC_(0.7506937540952249657080032497242314338058e-9) },
+ { SC_(1), SC_(19.9369258880615234375), SC_(0.1050756169313570044042540524516527996741e-9) },
+ { SC_(1), SC_(21.0880641937255859375), SC_(0.3149450286739813566149195966918766794019e-10) },
+ { SC_(1), SC_(24.2687816619873046875), SC_(0.1143540865960474355116790661840197166523e-11) },
+ { SC_(1), SC_(25.183135986328125), SC_(0.4422553437971115949495472179014784876379e-12) },
+ { SC_(1), SC_(27.344074249267578125), SC_(0.4706136215074688573466876839711291930065e-13) },
+ { SC_(1), SC_(27.3610286712646484375), SC_(0.4624246647932169908912545804468933517039e-13) },
+ { SC_(1), SC_(31.6179637908935546875), SC_(0.5694058988300047405430136315685981910904e-15) },
+ { SC_(1), SC_(31.98816680908203125), SC_(0.3888079168940721087324944469578712933197e-15) },
+ { SC_(1), SC_(32.7870330810546875), SC_(0.1707586829662679381480684070037630121613e-15) },
+ { SC_(1), SC_(33.936756134033203125), SC_(0.5230089477890500292647833806674719422967e-16) },
+ { SC_(1), SC_(34.0679779052734375), SC_(0.4569720316267919392435436312475469039788e-16) },
+ { SC_(1), SC_(36.2919464111328125), SC_(0.4648256808579637348536682966321094152884e-17) },
+ { SC_(1), SC_(39.6103668212890625), SC_(0.1545435668053719402464984966443581618056e-18) },
+ { SC_(1), SC_(39.89643096923828125), SC_(0.1152823764266388444276211386495818338284e-18) },
+ { SC_(1), SC_(39.905292510986328125), SC_(0.1142405282651606532309094911197076666306e-18) },
+ { SC_(1), SC_(40.0140228271484375), SC_(0.1021986300809498211588191270716148887523e-18) },
+ { SC_(1), SC_(40.73618316650390625), SC_(0.487782450682026156951156991212514994025e-19) },
+ { SC_(1), SC_(41.75042724609375), SC_(0.1727057820230415908617717666461962953748e-19) },
+ { SC_(1), SC_(42.4564666748046875), SC_(0.8386035754034782201062683833804929446885e-20) },
+ { SC_(1), SC_(43.92153167724609375), SC_(0.1874446514992257654186347034583264392481e-20) },
+ { SC_(1), SC_(45.2895965576171875), SC_(0.4631155735799306610393016753551769399309e-21) },
+ { SC_(1), SC_(45.668792724609375), SC_(0.3143839170407425907322861671102497142403e-21) },
+ { SC_(1), SC_(45.786777496337890625), SC_(0.278690825003829419502247825145190508394e-21) },
+ { SC_(1), SC_(46.6996612548828125), SC_(0.1097142494759480902665224812198017036116e-21) },
+ { SC_(1), SC_(47.858348846435546875), SC_(0.3362168462409445527866973776887649345695e-22) },
+ { SC_(1), SC_(47.87534332275390625), SC_(0.3304362677594583967844855615677058007508e-22) },
+ { SC_(1), SC_(47.974620819091796875), SC_(0.2986001918596063601815305407205441355782e-22) },
+ { SC_(1), SC_(48.244426727294921875), SC_(0.226739399060424385006440097684052080086e-22) },
+ { SC_(1), SC_(48.384746551513671875), SC_(0.1964943928572394204174413988519401201072e-22) },
+ { SC_(1), SC_(48.443389892578125), SC_(0.1850827201970609263420459500557652587842e-22) },
+ { SC_(1), SC_(48.52964019775390625), SC_(0.1694924366999538118474174187456764816795e-22) },
+ { SC_(1), SC_(49.055484771728515625), SC_(0.9912630736365412803849736897421968989741e-23) },
+ { SC_(1), SC_(49.64406585693359375), SC_(0.5438645188377533724985296541041944657958e-23) },
+ { SC_(1), SC_(49.82306671142578125), SC_(0.453125198123893560872142720624255521908e-23) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/expint_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expint_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,605 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 3>, 600> expint_data = {{
+ { SC_(0), SC_(4.8770198822021484375), SC_(0.001562365538135970995717852896857631808327) },
+ { SC_(0), SC_(5.4930877685546875), SC_(0.0007491447757702025944722131745633334937684) },
+ { SC_(0), SC_(6.349340915679931640625), SC_(0.0002752882216582873387067996572122917865872) },
+ { SC_(0), SC_(6.77385044097900390625), SC_(0.0001687790463104021974718191672246829394287) },
+ { SC_(0), SC_(7.88065433502197265625), SC_(0.47963738863754152769104622456952262715e-4) },
+ { SC_(0), SC_(9.41909885406494140625), SC_(0.8616442383363190691210027445652026531832e-5) },
+ { SC_(0), SC_(11.0517024993896484375), SC_(0.1435084267000391515109242970335955294949e-5) },
+ { SC_(0), SC_(13.9249114990234375), SC_(0.6437175227896219693144155889099646006989e-7) },
+ { SC_(0), SC_(14.85147190093994140625), SC_(0.2389561472425127015102225830183211311355e-7) },
+ { SC_(0), SC_(15.408351898193359375), SC_(0.1319719418545972741015149904348811051425e-7) },
+ { SC_(0), SC_(24.2687816619873046875), SC_(0.11889239267601390541015398133557006754e-11) },
+ { SC_(0), SC_(27.344074249267578125), SC_(0.4872549010302229290835986011540914041326e-13) },
+ { SC_(0), SC_(27.3610286712646484375), SC_(0.4787665585558497600241038034910791656316e-13) },
+ { SC_(0), SC_(31.6179637908935546875), SC_(0.5868929583967368539612302367590281628486e-15) },
+ { SC_(0), SC_(36.2919464111328125), SC_(0.4773068588658948995725058196271779063743e-17) },
+ { SC_(0), SC_(39.905292510986328125), SC_(0.1170364567486045719639244754262245531629e-18) },
+ { SC_(0), SC_(40.0140228271484375), SC_(0.1046931993792806191360983778308485111274e-18) },
+ { SC_(0), SC_(40.73618316650390625), SC_(0.4994822992740385189281065329903525138214e-19) },
+ { SC_(0), SC_(41.75042724609375), SC_(0.1767497897232480324288472314518314166362e-19) },
+ { SC_(0), SC_(45.2895965576171875), SC_(0.4731291164415236007530801800668192107248e-21) },
+ { SC_(0), SC_(45.668792724609375), SC_(0.32112623945754987507866272619248827473e-21) },
+ { SC_(0), SC_(47.858348846435546875), SC_(0.3431037557038677071409196944306329415725e-22) },
+ { SC_(0), SC_(47.87534332275390625), SC_(0.3372024134373767813623270201540442231994e-22) },
+ { SC_(0), SC_(48.244426727294921875), SC_(0.2313473555301647492330120635703080053112e-22) },
+ { SC_(0), SC_(48.384746551513671875), SC_(0.2004763256428269587290401533485854661334e-22) },
+ { SC_(0), SC_(48.443389892578125), SC_(0.1888289416818380641901072855471819672105e-22) },
+ { SC_(0), SC_(48.52964019775390625), SC_(0.1729171153596841734848571786533234373322e-22) },
+ { SC_(0), SC_(49.055484771728515625), SC_(0.1011081315291844758145446920376094243904e-22) },
+ { SC_(0), SC_(49.64406585693359375), SC_(0.554611404844874116390457034845700516171e-23) },
+ { SC_(0), SC_(49.82306671142578125), SC_(0.4620474736636545203207618442180434004238e-23) },
+ { SC_(1), SC_(4.8770198822021484375), SC_(0.001326894275438860249857941044254174502639) },
+ { SC_(1), SC_(5.4930877685546875), SC_(0.0006460832160891306352056104536312996827518) },
+ { SC_(1), SC_(6.349340915679931640625), SC_(0.0002414929458653428650902712691508606087705) },
+ { SC_(1), SC_(6.77385044097900390625), SC_(0.0001491057337258556360697724884053639712183) },
+ { SC_(1), SC_(7.88065433502197265625), SC_(0.4302184733486055021456160704267900644151e-4) },
+ { SC_(1), SC_(9.41909885406494140625), SC_(0.785158179791932713400818863165202252408e-5) },
+ { SC_(1), SC_(11.0517024993896484375), SC_(0.1323971054451696237675804650020934283271e-5) },
+ { SC_(1), SC_(13.9249114990234375), SC_(0.6030052082140414872763484176234936031379e-7) },
+ { SC_(1), SC_(14.85147190093994140625), SC_(0.2246847323452812310807076843921206699284e-7) },
+ { SC_(1), SC_(15.408351898193359375), SC_(0.1243451611444526471238603318210383094864e-7) },
+ { SC_(1), SC_(24.2687816619873046875), SC_(0.1143540865960474355116790661840197166523e-11) },
+ { SC_(1), SC_(27.344074249267578125), SC_(0.4706136215074688573466876839711291930065e-13) },
+ { SC_(1), SC_(27.3610286712646484375), SC_(0.4624246647932169908912545804468933517039e-13) },
+ { SC_(1), SC_(31.6179637908935546875), SC_(0.5694058988300047405430136315685981910904e-15) },
+ { SC_(1), SC_(36.2919464111328125), SC_(0.4648256808579637348536682966321094152884e-17) },
+ { SC_(1), SC_(39.905292510986328125), SC_(0.1142405282651606532309094911197076666306e-18) },
+ { SC_(1), SC_(40.0140228271484375), SC_(0.1021986300809498211588191270716148887523e-18) },
+ { SC_(1), SC_(40.73618316650390625), SC_(0.487782450682026156951156991212514994025e-19) },
+ { SC_(1), SC_(41.75042724609375), SC_(0.1727057820230415908617717666461962953748e-19) },
+ { SC_(1), SC_(45.2895965576171875), SC_(0.4631155735799306610393016753551769399309e-21) },
+ { SC_(1), SC_(45.668792724609375), SC_(0.3143839170407425907322861671102497142403e-21) },
+ { SC_(1), SC_(47.858348846435546875), SC_(0.3362168462409445527866973776887649345695e-22) },
+ { SC_(1), SC_(47.87534332275390625), SC_(0.3304362677594583967844855615677058007508e-22) },
+ { SC_(1), SC_(48.244426727294921875), SC_(0.226739399060424385006440097684052080086e-22) },
+ { SC_(1), SC_(48.384746551513671875), SC_(0.1964943928572394204174413988519401201072e-22) },
+ { SC_(1), SC_(48.443389892578125), SC_(0.1850827201970609263420459500557652587842e-22) },
+ { SC_(1), SC_(48.52964019775390625), SC_(0.1694924366999538118474174187456764816795e-22) },
+ { SC_(1), SC_(49.055484771728515625), SC_(0.9912630736365412803849736897421968989741e-23) },
+ { SC_(1), SC_(49.64406585693359375), SC_(0.5438645188377533724985296541041944657958e-23) },
+ { SC_(1), SC_(49.82306671142578125), SC_(0.453125198123893560872142720624255521908e-23) },
+ { SC_(2), SC_(4.8770198822021484375), SC_(0.001148398029861054199345012264954555516672) },
+ { SC_(2), SC_(5.4930877685546875), SC_(0.0005661261928922653194607642596729661834247) },
+ { SC_(2), SC_(6.349340915679931640625), SC_(0.0002145777273488298919718327983230556847796) },
+ { SC_(2), SC_(6.77385044097900390625), SC_(0.0001332640771263485120228892792183916486212) },
+ { SC_(2), SC_(7.88065433502197265625), SC_(0.3894533890038373320901565444021945347981e-4) },
+ { SC_(2), SC_(9.41909885406494140625), SC_(0.7204297463873735434976126199477971633086e-5) },
+ { SC_(2), SC_(11.0517024993896484375), SC_(0.1227990168839628846455833098303448433773e-5) },
+ { SC_(2), SC_(13.9249114990234375), SC_(0.5669153773853601538047096767291498163949e-7) },
+ { SC_(2), SC_(14.85147190093994140625), SC_(0.2119515173328888646673023951256382787035e-7) },
+ { SC_(2), SC_(15.408351898193359375), SC_(0.117516121032261460497022783873154133277e-7) },
+ { SC_(2), SC_(24.2687816619873046875), SC_(0.1101391593699757550330771982720681241702e-11) },
+ { SC_(2), SC_(27.344074249267578125), SC_(0.455040382873003464913463942701086735304e-13) },
+ { SC_(2), SC_(27.3610286712646484375), SC_(0.4471310237821561213380831578693487315293e-13) },
+ { SC_(2), SC_(31.6179637908935546875), SC_(0.5529052161901346947337909482893699970406e-15) },
+ { SC_(2), SC_(36.2919464111328125), SC_(0.4529662434116472194070436245672265042857e-17) },
+ { SC_(2), SC_(39.905292510986328125), SC_(0.1115723439716279721203408768712029013923e-18) },
+ { SC_(2), SC_(40.0140228271484375), SC_(0.9981775284731221089019834505818363552819e-19) },
+ { SC_(2), SC_(40.73618316650390625), SC_(0.476607175264578408858879133079205715852e-19) },
+ { SC_(2), SC_(41.75042724609375), SC_(0.1688390492701119435486287762562159858699e-19) },
+ { SC_(2), SC_(45.2895965576171875), SC_(0.453509316313951763481540924928599736043e-21) },
+ { SC_(2), SC_(45.668792724609375), SC_(0.3079137249356592053907428360776657046168e-21) },
+ { SC_(2), SC_(47.858348846435546875), SC_(0.3295961155503943958700595959147493859494e-22) },
+ { SC_(2), SC_(47.87534332275390625), SC_(0.3239315473021101354747830206293350407438e-22) },
+ { SC_(2), SC_(48.244426727294921875), SC_(0.2223082182669535818051174435727011298994e-22) },
+ { SC_(2), SC_(48.384746551513671875), SC_(0.1926648086158158737108049237086099136816e-22) },
+ { SC_(2), SC_(48.443389892578125), SC_(0.1814796680110118157973519143593274853176e-22) },
+ { SC_(2), SC_(48.52964019775390625), SC_(0.16619842314964052994745565553339877572e-22) },
+ { SC_(2), SC_(49.055484771728515625), SC_(0.9721934517241754833681461987796666364729e-23) },
+ { SC_(2), SC_(49.64406585693359375), SC_(0.533519116694460320322763018293766555562e-23) },
+ { SC_(2), SC_(49.82306671142578125), SC_(0.4445351294352327532340802176588798976952e-23) },
+ { SC_(3), SC_(4.8770198822021484375), SC_(0.001009463884221225811389815998719010986271) },
+ { SC_(3), SC_(5.4930877685546875), SC_(0.0005026685695125048013133739632870314017271) },
+ { SC_(3), SC_(6.349340915679931640625), SC_(0.000192735812765095912002371183263293900111) },
+ { SC_(3), SC_(6.77385044097900390625), SC_(0.0001202865448343788958616961263323890641224) },
+ { SC_(3), SC_(7.88065433502197265625), SC_(0.3553544638314854815965203480357693837483e-4) },
+ { SC_(3), SC_(9.41909885406494140625), SC_(0.6650566296468378472988726920086748003585e-5) },
+ { SC_(3), SC_(11.0517024993896484375), SC_(0.1144371181126072990333305822631028836293e-5) },
+ { SC_(3), SC_(13.9249114990234375), SC_(0.5347315388447377043403163944679603447308e-7) },
+ { SC_(3), SC_(14.85147190093994140625), SC_(0.2005292511490303611276632620207772801349e-7) },
+ { SC_(3), SC_(15.408351898193359375), SC_(0.1113701871038905614127352756301374756777e-7) },
+ { SC_(3), SC_(24.2687816619873046875), SC_(0.1062151539703375863556969277607545810784e-11) },
+ { SC_(3), SC_(27.344074249267578125), SC_(0.4404380881976937920112222542516822272498e-13) },
+ { SC_(3), SC_(27.3610286712646484375), SC_(0.4327903869869107197529302946680209725313e-13) },
+ { SC_(3), SC_(31.6179637908935546875), SC_(0.5373116012112858378776203750411580775157e-15) },
+ { SC_(3), SC_(36.2919464111328125), SC_(0.4416841558397739844380194330920803323217e-17) },
+ { SC_(3), SC_(39.905292510986328125), SC_(0.1090235093391345091467638099345747236665e-18) },
+ { SC_(3), SC_(40.0140228271484375), SC_(0.9754311441136278594444400056223060998112e-19) },
+ { SC_(3), SC_(40.73618316650390625), SC_(0.4659226208029291392542301557379898533421e-19) },
+ { SC_(3), SC_(41.75042724609375), SC_(0.1651383968756944916240158652817866102883e-19) },
+ { SC_(3), SC_(45.2895965576171875), SC_(0.4442864161594073687272521334571387068464e-21) },
+ { SC_(3), SC_(45.668792724609375), SC_(0.3016997935355581653019701776058823487891e-21) },
+ { SC_(3), SC_(47.858348846435546875), SC_(0.3232266772785229599045180051775037356983e-22) },
+ { SC_(3), SC_(47.87534332275390625), SC_(0.3176736362080994764019296251888065753308e-22) },
+ { SC_(3), SC_(48.244426727294921875), SC_(0.2180439976864761595066198281854137123938e-22) },
+ { SC_(3), SC_(48.384746551513671875), SC_(0.1889791357673824631363420045583006914083e-22) },
+ { SC_(3), SC_(48.443389892578125), SC_(0.1780118649315474077594166097412397701335e-22) },
+ { SC_(3), SC_(48.52964019775390625), SC_(0.1630278577764350172929992224826699134125e-22) },
+ { SC_(3), SC_(49.055484771728515625), SC_(0.9538314995244281265172026381342736376613e-23) },
+ { SC_(3), SC_(49.64406585693359375), SC_(0.5235534710062812770129904858419686477e-23) },
+ { SC_(3), SC_(49.82306671142578125), SC_(0.436259347383054975810125252596284373056e-23) },
+ { SC_(4), SC_(4.8770198822021484375), SC_(0.0008988374530148878674538740864914082292102) },
+ { SC_(4), SC_(5.4930877685546875), SC_(0.0004513051446113073580333268323944721050233) },
+ { SC_(4), SC_(6.349340915679931640625), SC_(0.0001747177958244933951059816028289034643657) },
+ { SC_(4), SC_(6.77385044097900390625), SC_(0.0001094936508358451464769484573315784104764) },
+ { SC_(4), SC_(7.88065433502197265625), SC_(0.3264769233806851466307644120314888145086e-4) },
+ { SC_(4), SC_(9.41909885406494140625), SC_(0.6172260399101532313596548666674161939147e-5) },
+ { SC_(4), SC_(11.0517024993896484375), SC_(0.1070958179254161179953316508304572268314e-5) },
+ { SC_(4), SC_(13.9249114990234375), SC_(0.5058733936888342141869016782708108008025e-7) },
+ { SC_(4), SC_(14.85147190093994140625), SC_(0.1902319891908972606965818094522754811018e-7) },
+ { SC_(4), SC_(15.408351898193359375), SC_(0.1058130289730552785739998442297924058786e-7) },
+ { SC_(4), SC_(24.2687816619873046875), SC_(0.102553712741651041889820954922929195353e-11) },
+ { SC_(4), SC_(27.344074249267578125), SC_(0.4267208020689132938530538006921840472866e-13) },
+ { SC_(4), SC_(27.3610286712646484375), SC_(0.4193184494975745519595845434212941109064e-13) },
+ { SC_(4), SC_(31.6179637908935546875), SC_(0.5225538520643167318253185941685570126136e-15) },
+ { SC_(4), SC_(36.2919464111328125), SC_(0.4309390764145596418375718273940307004613e-17) },
+ { SC_(4), SC_(39.905292510986328125), SC_(0.1065863367500176654003257394708772351872e-18) },
+ { SC_(4), SC_(40.0140228271484375), SC_(0.9536788770743836024288727376177760127786e-19) },
+ { SC_(4), SC_(40.73618316650390625), SC_(0.45569773640269648711508263661468347059e-19) },
+ { SC_(4), SC_(41.75042724609375), SC_(0.1615935374358658141804207943438980975221e-19) },
+ { SC_(4), SC_(45.2895965576171875), SC_(0.4354247531364385282370412155870874729459e-21) },
+ { SC_(4), SC_(45.668792724609375), SC_(0.2957274440624241525072833419407257387539e-21) },
+ { SC_(4), SC_(47.858348846435546875), SC_(0.3170947177760355601485650998388087912794e-22) },
+ { SC_(4), SC_(47.87534332275390625), SC_(0.3116489715084099173766429135693287485266e-22) },
+ { SC_(4), SC_(48.244426727294921875), SC_(0.2139376242389394458999839246288275641137e-22) },
+ { SC_(4), SC_(48.384746551513671875), SC_(0.1854295393926703202670956819914488568622e-22) },
+ { SC_(4), SC_(48.443389892578125), SC_(0.174671955504090738764275756221740743455e-22) },
+ { SC_(4), SC_(48.52964019775390625), SC_(0.1599740374459969657648642493512931194803e-22) },
+ { SC_(4), SC_(49.055484771728515625), SC_(0.9361391551875898787221295676691672132525e-23) },
+ { SC_(4), SC_(49.64406585693359375), SC_(0.5139473709544630951148677282719575763748e-23) },
+ { SC_(4), SC_(49.82306671142578125), SC_(0.4282811786803278372908574260865777286634e-23) },
+ { SC_(5), SC_(4.8770198822021484375), SC_(0.0008090099158837604898906936888172388751649) },
+ { SC_(5), SC_(5.4930877685546875), SC_(0.0004090148087274417520210910367930574632313) },
+ { SC_(5), SC_(6.349340915679931640625), SC_(0.0001596389799134654726048507249519588776058) },
+ { SC_(5), SC_(6.77385044097900390625), SC_(0.0001003976005697357306099687053412443350271) },
+ { SC_(5), SC_(7.88065433502197265625), SC_(0.3017511711201068675323251838790425251912e-4) },
+ { SC_(5), SC_(9.41909885406494140625), SC_(0.5755497931771290268976871171255759126799e-5) },
+ { SC_(5), SC_(11.0517024993896484375), SC_(0.1006053298509497058503916645425268119171e-5) },
+ { SC_(5), SC_(13.9249114990234375), SC_(0.4798668245971076657773285946381030737721e-7) },
+ { SC_(5), SC_(14.85147190093994140625), SC_(0.1809063660501308306218204407082442296202e-7) },
+ { SC_(5), SC_(15.408351898193359375), SC_(0.1007664337382455817496374808860947701339e-7) },
+ { SC_(5), SC_(24.2687816619873046875), SC_(0.9912996399303635030211567487381874151188e-12) },
+ { SC_(5), SC_(27.344074249267578125), SC_(0.413812224152640511180438734072676845548e-13) },
+ { SC_(5), SC_(27.3610286712646484375), SC_(0.4066403540989839067091010057150891911274e-13) },
+ { SC_(5), SC_(31.6179637908935546875), SC_(0.5085678835892274087033816768547012468732e-15) },
+ { SC_(5), SC_(36.2919464111328125), SC_(0.4206942689817309025544789131663973839276e-17) },
+ { SC_(5), SC_(39.905292510986328125), SC_(0.1042537738296296350851694256912033892379e-18) },
+ { SC_(5), SC_(40.0140228271484375), SC_(0.9328580852684247661187048971353424866528e-19) },
+ { SC_(5), SC_(40.73618316650390625), SC_(0.4459039932480738037635819257031348159139e-19) },
+ { SC_(5), SC_(41.75042724609375), SC_(0.1581950021119483213567408998546386668924e-19) },
+ { SC_(5), SC_(45.2895965576171875), SC_(0.426903850637282175635462701543149151497e-21) },
+ { SC_(5), SC_(45.668792724609375), SC_(0.2899830805886899237442395328381068498603e-21) },
+ { SC_(5), SC_(47.858348846435546875), SC_(0.3111874025775910046211199125133714641959e-22) },
+ { SC_(5), SC_(47.87534332275390625), SC_(0.3058449513568358624138910176459503465317e-22) },
+ { SC_(5), SC_(48.244426727294921875), SC_(0.2099806264053531888235698164244622236054e-22) },
+ { SC_(5), SC_(48.384746551513671875), SC_(0.1820087347821574367342909711932944943553e-22) },
+ { SC_(5), SC_(48.443389892578125), SC_(0.1714531002781132518744429689826974525516e-22) },
+ { SC_(5), SC_(48.52964019775390625), SC_(0.1570307285506838698965558322141851465732e-22) },
+ { SC_(5), SC_(49.055484771728515625), SC_(0.9190809984386788861150467416642680647729e-23) },
+ { SC_(5), SC_(49.64406585693359375), SC_(0.5046819941160360787508621437875688569605e-23) },
+ { SC_(5), SC_(49.82306671142578125), SC_(0.4205850918879917541477872491941196557143e-23) },
+ { SC_(6), SC_(4.8770198822021484375), SC_(0.0007348260696185603834576913795732830946188) },
+ { SC_(6), SC_(5.4930877685546875), SC_(0.0003736727523362997115423331115314041736243) },
+ { SC_(6), SC_(6.349340915679931640625), SC_(0.0001468592924955514085008699771716334763077) },
+ { SC_(6), SC_(6.77385044097900390625), SC_(0.9264113727703907498810521319589432008524e-4) },
+ { SC_(6), SC_(7.88065433502197265625), SC_(0.28037195824388660507364001550852931132e-4) },
+ { SC_(6), SC_(9.41909885406494140625), SC_(0.5389503721106544299725590289899716358093e-5) },
+ { SC_(6), SC_(11.0517024993896484375), SC_(0.9483045253572759542643841519439208738077e-6) },
+ { SC_(6), SC_(13.9249114990234375), SC_(0.4563212942767922383568892226977484369735e-7) },
+ { SC_(6), SC_(14.85147190093994140625), SC_(0.1724249388468742485070009339855517672302e-7) },
+ { SC_(6), SC_(15.408351898193359375), SC_(0.961650900437351762462998197265812727899e-8) },
+ { SC_(6), SC_(24.2687816619873046875), SC_(0.9592201336355552215113302343198083359039e-12) },
+ { SC_(6), SC_(27.344074249267578125), SC_(0.4016444019211161545069669310213329133391e-13) },
+ { SC_(6), SC_(27.3610286712646484375), SC_(0.3946894296187605365329974057241992827116e-13) },
+ { SC_(6), SC_(31.6179637908935546875), SC_(0.4952958758365725195977362410738659041004e-15) },
+ { SC_(6), SC_(36.2919464111328125), SC_(0.410916215654303867381557364216942618476e-17) },
+ { SC_(6), SC_(39.905292510986328125), SC_(0.102019340191376681036289748145846671601e-18) },
+ { SC_(6), SC_(40.0140228271484375), SC_(0.9129111959353282162991858049143100584685e-19) },
+ { SC_(6), SC_(40.73618316650390625), SC_(0.4365151376049397264131977020034384480739e-19) },
+ { SC_(6), SC_(41.75042724609375), SC_(0.1549340620464580451910710810475113689206e-19) },
+ { SC_(6), SC_(45.2895965576171875), SC_(0.4187047278085423878484354259906816989868e-21) },
+ { SC_(6), SC_(45.668792724609375), SC_(0.2844540934343090556224423112487667406125e-21) },
+ { SC_(6), SC_(47.858348846435546875), SC_(0.3054927923646748372361382966477651827852e-22) },
+ { SC_(6), SC_(47.87534332275390625), SC_(0.3002498525672266993544813274392433518577e-22) },
+ { SC_(6), SC_(48.244426727294921875), SC_(0.2061651195327859359343954291567220346365e-22) },
+ { SC_(6), SC_(48.384746551513671875), SC_(0.1787099406421090115820784217033364291398e-22) },
+ { SC_(6), SC_(48.443389892578125), SC_(0.1683489319664486144787556546890061473259e-22) },
+ { SC_(6), SC_(48.52964019775390625), SC_(0.1541921271766257081418510492458292442443e-22) },
+ { SC_(6), SC_(49.055484771728515625), SC_(0.9026240284769353493713425968649129066268e-23) },
+ { SC_(6), SC_(49.64406585693359375), SC_(0.4957397908840644569470963403107248313978e-23) },
+ { SC_(6), SC_(49.82306671142578125), SC_(0.4131566026446901080030652650689496425855e-23) },
+ { SC_(7), SC_(4.8770198822021484375), SC_(0.000672654406877735071613495945523560886399) },
+ { SC_(7), SC_(5.4930877685546875), SC_(0.0003437501298932084867867588635538212982312) },
+ { SC_(7), SC_(6.349340915679931640625), SC_(0.000135906509114986471251070773622260655741) },
+ { SC_(7), SC_(6.77385044097900390625), SC_(0.8595780144681101204557488646971712080142e-4) },
+ { SC_(7), SC_(7.88065433502197265625), SC_(0.2617236629752959688705833116147043117834e-4) },
+ { SC_(7), SC_(9.41909885406494140625), SC_(0.5065809042633238835753956297942265273201e-5) },
+ { SC_(7), SC_(11.0517024993896484375), SC_(0.8966241478949112626121344025734282320534e-6) },
+ { SC_(7), SC_(13.9249114990234375), SC_(0.4349126495486544147908841040472484927904e-7) },
+ { SC_(7), SC_(14.85147190093994140625), SC_(0.164681062003900667485954190660709846632e-7) },
+ { SC_(7), SC_(15.408351898193359375), SC_(0.9195409551137088883175538637234982868042e-8) },
+ { SC_(7), SC_(24.2687816619873046875), SC_(0.9291052003784709393851340415426372089189e-12) },
+ { SC_(7), SC_(27.344074249267578125), SC_(0.3901566406927119154873751482668394384255e-13) },
+ { SC_(7), SC_(27.3610286712646484375), SC_(0.3834061225742188133379959269343567423503e-13) },
+ { SC_(7), SC_(31.6179637908935546875), SC_(0.4826855399564605704728941991994489876831e-15) },
+ { SC_(7), SC_(36.2919464111328125), SC_(0.4015742776059500302706027828290570718399e-17) },
+ { SC_(7), SC_(39.905292510986328125), SC_(0.9987707148129249110240601256898576971756e-19) },
+ { SC_(7), SC_(40.0140228271484375), SC_(0.8937852107969616831590817049966824780776e-19) },
+ { SC_(7), SC_(40.73618316650390625), SC_(0.427506971871212040057762539714930618251e-19) },
+ { SC_(7), SC_(41.75042724609375), SC_(0.1518026585317356982436234552655098583916e-19) },
+ { SC_(7), SC_(45.2895965576171875), SC_(0.410809767347114321495216852642389100271e-21) },
+ { SC_(7), SC_(45.668792724609375), SC_(0.2791287725836654932441581494797041970242e-21) },
+ { SC_(7), SC_(47.858348846435546875), SC_(0.2999997673229317882545079929955475412819e-22) },
+ { SC_(7), SC_(47.87534332275390625), SC_(0.2948527563855661673975965369306222271872e-22) },
+ { SC_(7), SC_(48.244426727294921875), SC_(0.2024837565674984524173938073554829880431e-22) },
+ { SC_(7), SC_(48.384746551513671875), SC_(0.1755268369337344342563412666014302719106e-22) },
+ { SC_(7), SC_(48.443389892578125), SC_(0.1653535159410665117678405729311741600246e-22) },
+ { SC_(7), SC_(48.52964019775390625), SC_(0.1514528232051701632889109286081357834452e-22) },
+ { SC_(7), SC_(49.055484771728515625), SC_(0.8867374636219634043254094014032434056758e-23) },
+ { SC_(7), SC_(49.64406585693359375), SC_(0.4871043800957343178888925440753637022755e-23) },
+ { SC_(7), SC_(49.82306671142578125), SC_(0.4059821880595962128692583716639890264267e-23) },
+ { SC_(8), SC_(4.8770198822021484375), SC_(0.0006198769823661402847305430993636049506996) },
+ { SC_(8), SC_(5.4930877685546875), SC_(0.0003181240529577821868814198623479992301558) },
+ { SC_(8), SC_(6.349340915679931640625), SC_(0.0001264260014783884204820485788410880220829) },
+ { SC_(8), SC_(6.77385044097900390625), SC_(0.8014553229166674480308998966783856640274e-4) },
+ { SC_(8), SC_(7.88065433502197265625), SC_(0.2453289638287091931913016952787382575977e-4) },
+ { SC_(8), SC_(9.41909885406494140625), SC_(0.477768091869632345248951312424622728446e-5) },
+ { SC_(8), SC_(11.0517024993896484375), SC_(0.85012872059138341359756571809829071518e-6) },
+ { SC_(8), SC_(13.9249114990234375), SC_(0.4153699114921829088696026023875036052235e-7) },
+ { SC_(8), SC_(14.85147190093994140625), SC_(0.1575849059087379494831122227451689174666e-7) },
+ { SC_(8), SC_(15.408351898193359375), SC_(0.8808700838060892266753598951427174682875e-8) },
+ { SC_(8), SC_(24.2687816619873046875), SC_(0.9007834203217606107821219220771743610314e-12) },
+ { SC_(8), SC_(27.344074249267578125), SC_(0.379294577163373475153179380847014022067e-13) },
+ { SC_(8), SC_(27.3610286712646484375), SC_(0.3727370889996716217144753509442193190963e-13) },
+ { SC_(8), SC_(31.6179637908935546875), SC_(0.4706894832838784051642237906881336922796e-15) },
+ { SC_(8), SC_(36.2919464111328125), SC_(0.3926403972375257558525214885356744784999e-17) },
+ { SC_(8), SC_(39.905292510986328125), SC_(0.9782146977154255893321823022709627348926e-19) },
+ { SC_(8), SC_(40.0140228271484375), SC_(0.8754312672428671889906348507861882703206e-19) },
+ { SC_(8), SC_(40.73618316650390625), SC_(0.4188571600786610466716060294091025573922e-19) },
+ { SC_(8), SC_(41.75042724609375), SC_(0.1487933408299988278087183196037528981243e-19) },
+ { SC_(8), SC_(45.2895965576171875), SC_(0.4032025968884431835849977422771423043559e-21) },
+ { SC_(8), SC_(45.668792724609375), SC_(0.2739962299460106127310190971865563645926e-21) },
+ { SC_(8), SC_(47.858348846435546875), SC_(0.2946979589439336784966862865004208582052e-22) },
+ { SC_(8), SC_(47.87534332275390625), SC_(0.2896434815651884509173994398863766973769e-22) },
+ { SC_(8), SC_(48.244426727294921875), SC_(0.198929683605768553142692284345115226018e-22) },
+ { SC_(8), SC_(48.384746551513671875), SC_(0.1724535268256134023522559201136187880287e-22) },
+ { SC_(8), SC_(48.443389892578125), SC_(0.1624613145792087093429095622020720610363e-22) },
+ { SC_(8), SC_(48.52964019775390625), SC_(0.1488077679082909868874250086633770624366e-22) },
+ { SC_(8), SC_(49.055484771728515625), SC_(0.8713925602928477300728434421107655182561e-23) },
+ { SC_(8), SC_(49.64406585693359375), SC_(0.4787604546359917389355899903701464191616e-23) },
+ { SC_(8), SC_(49.82306671142578125), SC_(0.3990492092637337902680155516469134417287e-23) },
+ { SC_(9), SC_(4.8770198822021484375), SC_(0.000574566928154681597771226077492170189848) },
+ { SC_(9), SC_(5.4930877685546875), SC_(0.0002959543325593133633244469421977219738564) },
+ { SC_(9), SC_(6.349340915679931640625), SC_(0.0001181471231733983744553312302134841666211) },
+ { SC_(9), SC_(6.77385044097900390625), SC_(0.7504877100266623384408455718528952916062e-4) },
+ { SC_(9), SC_(7.88065433502197265625), SC_(0.2308129629627368077047981532497252774647e-4) },
+ { SC_(9), SC_(9.41909885406494140625), SC_(0.4519709214109043158472039614663564501329e-5) },
+ { SC_(9), SC_(11.0517024993896484375), SC_(0.8080943342850340407816347386144146759376e-6) },
+ { SC_(9), SC_(13.9249114990234375), SC_(0.3974650347912804223974395173637905552558e-7) },
+ { SC_(9), SC_(14.85147190093994140625), SC_(0.1510603380266448062084592399795879469856e-7) },
+ { SC_(9), SC_(15.408351898193359375), SC_(0.84524312249502213969511040864721185859e-8) },
+ { SC_(9), SC_(24.2687816619873046875), SC_(0.8741023798409317080591564815054757006345e-12) },
+ { SC_(9), SC_(27.344074249267578125), SC_(0.3690093889737632598766465457891734963529e-13) },
+ { SC_(9), SC_(27.3610286712646484375), SC_(0.3626344195656965276150179910334121616554e-13) },
+ { SC_(9), SC_(31.6179637908935546875), SC_(0.4592646585617948446687753913390841236523e-15) },
+ { SC_(9), SC_(36.2919464111328125), SC_(0.3840888360296256907058307888291042451014e-17) },
+ { SC_(9), SC_(39.905292510986328125), SC_(0.9584745948930657155959366498453740695524e-19) },
+ { SC_(9), SC_(40.0140228271484375), SC_(0.8578042483802251669252507080620628767884e-19) },
+ { SC_(9), SC_(40.73618316650390625), SC_(0.4105450547609712602373198159295361744019e-19) },
+ { SC_(9), SC_(41.75042724609375), SC_(0.1458992106970923818904751642734358346888e-19) },
+ { SC_(9), SC_(45.2895965576171875), SC_(0.3958679824046677267382971105978054735502e-21) },
+ { SC_(9), SC_(45.668792724609375), SC_(0.2690463294364193634860610951105192383688e-21) },
+ { SC_(9), SC_(47.858348846435546875), SC_(0.2895776884408227815390691567942086320194e-22) },
+ { SC_(9), SC_(47.87534332275390625), SC_(0.2846125239305599399343324877800989548083e-22) },
+ { SC_(9), SC_(48.244426727294921875), SC_(0.1954964997282522558230042809028068314624e-22) },
+ { SC_(9), SC_(48.384746551513671875), SC_(0.1694845023043668781179051069082768143231e-22) },
+ { SC_(9), SC_(48.443389892578125), SC_(0.1596671550343479899557408739241182300245e-22) },
+ { SC_(9), SC_(48.52964019775390625), SC_(0.1462522446523433099597115985385323784891e-22) },
+ { SC_(9), SC_(49.055484771728515625), SC_(0.8565624492043767839429282005807397583318e-23) },
+ { SC_(9), SC_(49.64406585693359375), SC_(0.4706936959350934594467303757181866692282e-23) },
+ { SC_(9), SC_(49.82306671142578125), SC_(0.3923458412376612995367287289840128158877e-23) },
+ { SC_(10), SC_(4.8770198822021484375), SC_(0.0005352792733878215541504331698788894730402) },
+ { SC_(10), SC_(5.4930877685546875), SC_(0.0002766016533808459282210288235481403250982) },
+ { SC_(10), SC_(6.349340915679931640625), SC_(0.0001108602673494439127618073430676308644777) },
+ { SC_(10), SC_(6.77385044097900390625), SC_(0.7054609630293229980930172373930373039383e-4) },
+ { SC_(10), SC_(7.88065433502197265625), SC_(0.2178776987615002722677825735588761654131e-4) },
+ { SC_(10), SC_(9.41909885406494140625), SC_(0.4287503855547952963711299140616704582364e-5) },
+ { SC_(10), SC_(11.0517024993896484375), SC_(0.7699229118313848558128361568150689379851e-6) },
+ { SC_(10), SC_(13.9249114990234375), SC_(0.3810049001990263602534565807763369223915e-7) },
+ { SC_(10), SC_(14.85147190093994140625), SC_(0.1450424600866488879671249876571081889732e-7) },
+ { SC_(10), SC_(15.408351898193359375), SC_(0.8123219707671576714011776272728684196027e-8) },
+ { SC_(10), SC_(24.2687816619873046875), SC_(0.8489261538523705641432453476967663003902e-12) },
+ { SC_(10), SC_(27.344074249267578125), SC_(0.3592571179238330874749564801451100586731e-13) },
+ { SC_(10), SC_(27.3610286712646484375), SC_(0.3530549760627637519728444662662438656259e-13) },
+ { SC_(10), SC_(31.6179637908935546875), SC_(0.4483718847638335880148720812657532845158e-15) },
+ { SC_(10), SC_(36.2919464111328125), SC_(0.3758959432584040971129642517531187949413e-17) },
+ { SC_(10), SC_(39.905292510986328125), SC_(0.9395034818297492525892364411510452416285e-19) },
+ { SC_(10), SC_(40.0140228271484375), SC_(0.8408624357984594771631275403482014370443e-19) },
+ { SC_(10), SC_(40.73618316650390625), SC_(0.4025515425342724848748117623504317564694e-19) },
+ { SC_(10), SC_(41.75042724609375), SC_(0.1431138727923752511842006460275779587111e-19) },
+ { SC_(10), SC_(45.2895965576171875), SC_(0.3887917322347986565609463394299150327799e-21) },
+ { SC_(10), SC_(45.668792724609375), SC_(0.2642696239857017765826366030320557104787e-21) },
+ { SC_(10), SC_(47.858348846435546875), SC_(0.2846299110502864005501042837430156020617e-22) },
+ { SC_(10), SC_(47.87534332275390625), SC_(0.2797510017160610432358744015221441571985e-22) },
+ { SC_(10), SC_(48.244426727294921875), SC_(0.1921782206495759240442717222827117361073e-22) },
+ { SC_(10), SC_(48.384746551513671875), SC_(0.1666146130445197021116371066297913059153e-22) },
+ { SC_(10), SC_(48.443389892578125), SC_(0.1569662000587267096934461847790866935321e-22) },
+ { SC_(10), SC_(48.52964019775390625), SC_(0.1437818423718755340213669181008502587215e-22) },
+ { SC_(10), SC_(49.055484771728515625), SC_(0.8422219869220603300826534405174511116932e-23) },
+ { SC_(10), SC_(49.64406585693359375), SC_(0.4628906964089037715979778318869686922056e-23) },
+ { SC_(10), SC_(49.82306671142578125), SC_(0.3858610091395042953042237277750230878446e-23) },
+ { SC_(11), SC_(4.8770198822021484375), SC_(0.0005009120133913464432828052992543689609266) },
+ { SC_(11), SC_(5.4930877685546875), SC_(0.0002595720845711615799973985449885779796683) },
+ { SC_(11), SC_(6.349340915679931640625), SC_(0.0001044009137974689879419136688108253136711) },
+ { SC_(11), SC_(6.77385044097900390625), SC_(0.6654153117267684113477727525520034100687e-4) },
+ { SC_(11), SC_(7.88065433502197265625), SC_(0.2062837634755631687875937810801211990297e-4) },
+ { SC_(11), SC_(9.41909885406494140625), SC_(0.4077469992666208015838696234261738511497e-5) },
+ { SC_(11), SC_(11.0517024993896484375), SC_(0.7351165411418716546620726755931346504211e-6) },
+ { SC_(11), SC_(13.9249114990234375), SC_(0.3658250019250389292963823768914952813002e-7) },
+ { SC_(11), SC_(14.85147190093994140625), SC_(0.1394756485908975710233558572299811309204e-7) },
+ { SC_(11), SC_(15.408351898193359375), SC_(0.7818158427621171115456558682903621711946e-8) },
+ { SC_(11), SC_(24.2687816619873046875), SC_(0.8251331716260575968464919718321961646481e-12) },
+ { SC_(11), SC_(27.344074249267578125), SC_(0.3499980885002771102093824226275116148635e-13) },
+ { SC_(11), SC_(27.3610286712646484375), SC_(0.3439598212903377299441891130049054420211e-13) },
+ { SC_(11), SC_(31.6179637908935546875), SC_(0.4379754290400835369926905610277982145038e-15) },
+ { SC_(11), SC_(36.2919464111328125), SC_(0.3680399514730968350266189449113930333654e-17) },
+ { SC_(11), SC_(39.905292510986328125), SC_(0.9212579152518380622660997821423674710364e-19) },
+ { SC_(11), SC_(40.0140228271484375), SC_(0.8245671997566178208880250340595879145341e-19) },
+ { SC_(11), SC_(40.73618316650390625), SC_(0.3948589061018942173318806910674939071237e-19) },
+ { SC_(11), SC_(41.75042724609375), SC_(0.1404313902678057031848559914979303656348e-19) },
+ { SC_(11), SC_(45.2895965576171875), SC_(0.381960610544732818804516998688590474936e-21) },
+ { SC_(11), SC_(45.668792724609375), SC_(0.2596572987006649267481710591324106493773e-21) },
+ { SC_(11), SC_(47.858348846435546875), SC_(0.2798461655823374294355825699924793922695e-22) },
+ { SC_(11), SC_(47.87534332275390625), SC_(0.2750506060534878926733787360165045520505e-22) },
+ { SC_(11), SC_(48.244426727294921875), SC_(0.1889692457718099306134306498107121573907e-22) },
+ { SC_(11), SC_(48.384746551513671875), SC_(0.163839038186929409245824760163683519113e-22) },
+ { SC_(11), SC_(48.443389892578125), SC_(0.1543539215494860911514842368517122215886e-22) },
+ { SC_(11), SC_(48.52964019775390625), SC_(0.1413924315161691705052242569520827750713e-22) },
+ { SC_(11), SC_(49.055484771728515625), SC_(0.8283476211408264926531704316649196936094e-23) },
+ { SC_(11), SC_(49.64406585693359375), SC_(0.4553388890039916436282258394277276350068e-23) },
+ { SC_(11), SC_(49.82306671142578125), SC_(0.3795843304494410299682812991810209933854e-23) },
+ { SC_(12), SC_(4.8770198822021484375), SC_(0.0004706118131102803714870065533569391042672) },
+ { SC_(12), SC_(5.4930877685546875), SC_(0.0002444787056221684820083075680455490269033) },
+ { SC_(12), SC_(6.349340915679931640625), SC_(0.98638343251916978862737075623483834202e-4) },
+ { SC_(12), SC_(6.77385044097900390625), SC_(0.6295833063638895384617769443723176088183e-4) },
+ { SC_(12), SC_(7.88065433502197265625), SC_(0.195836857375156012409913986027383507141e-4) },
+ { SC_(12), SC_(9.41909885406494140625), SC_(0.3886639058531487002620886028202835920806e-5) },
+ { SC_(12), SC_(11.0517024993896484375), SC_(0.7032577332147901993478476194157959487351e-6) },
+ { SC_(12), SC_(13.9249114990234375), SC_(0.3517844326618039001586592278545737344983e-7) },
+ { SC_(12), SC_(14.85147190093994140625), SC_(0.1343119845832687127125077137885581471122e-7) },
+ { SC_(12), SC_(15.408351898193359375), SC_(0.7534734166340152204834631475641212900925e-8) },
+ { SC_(12), SC_(24.2687816619873046875), SC_(0.8026144006362281803385912517998181989045e-12) },
+ { SC_(12), SC_(27.344074249267578125), SC_(0.3411964066396944479803556532612535957902e-13) },
+ { SC_(12), SC_(27.3610286712646484375), SC_(0.3353137275819377442630682771840356912512e-13) },
+ { SC_(12), SC_(31.6179637908935546875), SC_(0.4280426410025447752638396788307301996554e-15) },
+ { SC_(12), SC_(36.2919464111328125), SC_(0.3605007952372399179074501364182760061447e-17) },
+ { SC_(12), SC_(39.905292510986328125), SC_(0.9036976203489638629800364936942750271976e-19) },
+ { SC_(12), SC_(40.0140228271484375), SC_(0.8088827222289274722083318808951552012293e-19) },
+ { SC_(12), SC_(40.73618316650390625), SC_(0.3874507007056022200475139009407593657196e-19) },
+ { SC_(12), SC_(41.75042724609375), SC_(0.1378462449235468941635438331566634911329e-19) },
+ { SC_(12), SC_(45.2895965576171875), SC_(0.3753622591660361870654691246525703186953e-21) },
+ { SC_(12), SC_(45.668792724609375), SC_(0.2552011194934065469994909597604360806544e-21) },
+ { SC_(12), SC_(47.858348846435546875), SC_(0.2752185286564573828609767163698278245478e-22) },
+ { SC_(12), SC_(47.87534332275390625), SC_(0.2705035560575774394109046866068791674533e-22) },
+ { SC_(12), SC_(48.244426727294921875), SC_(0.1858643282798373595044236912325875763998e-22) },
+ { SC_(12), SC_(48.384746551513671875), SC_(0.161153260717141278737249336531294719856e-22) },
+ { SC_(12), SC_(48.443389892578125), SC_(0.1518260765296369948999549370168451646617e-22) },
+ { SC_(12), SC_(48.52964019775390625), SC_(0.1390801422067026184138062356374723954914e-22) },
+ { SC_(12), SC_(49.055484771728515625), SC_(0.8149172682460884225820174569239907553019e-23) },
+ { SC_(12), SC_(49.64406585693359375), SC_(0.4480264831080229904818323241711650398758e-23) },
+ { SC_(12), SC_(49.82306671142578125), SC_(0.3735060623268742684931336306725772234312e-23) },
+ { SC_(13), SC_(4.8770198822021484375), SC_(0.0004437087186182125370669647151655454188429) },
+ { SC_(13), SC_(5.4930877685546875), SC_(0.0002310145847612273411006211583688987975427) },
+ { SC_(13), SC_(6.349340915679931640625), SC_(0.9346752505962101367018581069354076070181e-4) },
+ { SC_(13), SC_(6.77385044097900390625), SC_(0.5973447512776070007553402107060500889993e-4) },
+ { SC_(13), SC_(7.88065433502197265625), SC_(0.1863778239145381070798716079048011814217e-4) },
+ { SC_(13), SC_(9.41909885406494140625), SC_(0.3712540423072904169604837598671658150806e-5) },
+ { SC_(13), SC_(11.0517024993896484375), SC_(0.6739940943798327547523751333479732347785e-6) },
+ { SC_(13), SC_(13.9249114990234375), SC_(0.3387618703055249493972366425082038407008e-7) },
+ { SC_(13), SC_(14.85147190093994140625), SC_(0.1295099867775958963565800582475319134876e-7) },
+ { SC_(13), SC_(15.408351898193359375), SC_(0.7270764715337092719504778766034496233635e-8) },
+ { SC_(13), SC_(24.2687816619873046875), SC_(0.7812717952872478193953977519560091792401e-12) },
+ { SC_(13), SC_(27.344074249267578125), SC_(0.3328195262792369039754674358833415671705e-13) },
+ { SC_(13), SC_(27.3610286712646484375), SC_(0.3270847517709406736534411948475187230986e-13) },
+ { SC_(13), SC_(31.6179637908935546875), SC_(0.4185436319617928121897806787716870536358e-15) },
+ { SC_(13), SC_(36.2919464111328125), SC_(0.3532599501422096753268390955084042074346e-17) },
+ { SC_(13), SC_(39.905292510986328125), SC_(0.8867852107097483056473990907186131136673e-19) },
+ { SC_(13), SC_(40.0140228271484375), SC_(0.7937757488619250412984581973380055867192e-19) },
+ { SC_(13), SC_(40.73618316650390625), SC_(0.3803116433100048233432556937945889256541e-19) },
+ { SC_(13), SC_(41.75042724609375), SC_(0.1353533013979226019178256798626117583889e-19) },
+ { SC_(13), SC_(45.2895965576171875), SC_(0.3689851268927471378056649347483021064555e-21) },
+ { SC_(13), SC_(45.668792724609375), SC_(0.2508933865822890901877811919438814980299e-21) },
+ { SC_(13), SC_(47.858348846435546875), SC_(0.2707395731295370898992216540504168066219e-22) },
+ { SC_(13), SC_(47.87534332275390625), SC_(0.2661025580244409607367092510359991347748e-22) },
+ { SC_(13), SC_(48.244426727294921875), SC_(0.1828585479594981650166163995444964962252e-22) },
+ { SC_(13), SC_(48.384746551513671875), SC_(0.1585530441715015357320011776013262005497e-22) },
+ { SC_(13), SC_(48.443389892578125), SC_(0.14937868530921405025152284492649568687e-22) },
+ { SC_(13), SC_(48.52964019775390625), SC_(0.1368413443746044509097298363099654690242e-22) },
+ { SC_(13), SC_(49.055484771728515625), SC_(0.801910201884478002728720694109005442977e-23) },
+ { SC_(13), SC_(49.64406585693359375), SC_(0.4409424061716958511211063609120283723658e-23) },
+ { SC_(13), SC_(49.82306671142578125), SC_(0.3676170536463494539625865519149997910994e-23) },
+ { SC_(14), SC_(4.8770198822021484375), SC_(0.0004196701192422406448521762257684476251918) },
+ { SC_(14), SC_(5.4930877685546875), SC_(0.0002189334319038696832950372172075893912304) },
+ { SC_(14), SC_(6.349340915679931640625), SC_(0.8880319909471839050196713233277850532389e-4) },
+ { SC_(14), SC_(6.77385044097900390625), SC_(0.5681935512245403758794209229119826614079e-4) },
+ { SC_(14), SC_(7.88065433502197265625), SC_(0.1777751738477687440359203671453433698159e-4) },
+ { SC_(14), SC_(9.41909885406494140625), SC_(0.3553102871893619813261267137928745016476e-5) },
+ { SC_(14), SC_(11.0517024993896484375), SC_(0.6470263202316560174746572620925228048027e-6) },
+ { SC_(14), SC_(13.9249114990234375), SC_(0.3266523439975383004139579355611455355617e-7) },
+ { SC_(14), SC_(14.85147190093994140625), SC_(0.1250335828315750650425503226849078468279e-7) },
+ { SC_(14), SC_(15.408351898193359375), SC_(0.7024346982728704863593194542439557875876e-8) },
+ { SC_(14), SC_(24.2687816619873046875), SC_(0.7610169671353338904428168445354312088703e-12) },
+ { SC_(14), SC_(27.344074249267578125), SC_(0.324837873377263483425204463022608491481e-13) },
+ { SC_(14), SC_(27.3610286712646484375), SC_(0.3192438664885478611906860043578198532987e-13) },
+ { SC_(14), SC_(31.6179637908935546875), SC_(0.4094509928801061410137962686600254635138e-15) },
+ { SC_(14), SC_(36.2919464111328125), SC_(0.3463002895282051957554706995791987609809e-17) },
+ { SC_(14), SC_(39.905292510986328125), SC_(0.8704859370950385565660799562514323604064e-19) },
+ { SC_(14), SC_(40.0140228271484375), SC_(0.779215366423035327379449134225893126892e-19) },
+ { SC_(14), SC_(40.73618316650390625), SC_(0.3734275130325613669151727411294801078467e-19) },
+ { SC_(14), SC_(41.75042724609375), SC_(0.1329477749284822066618871653749353300023e-19) },
+ { SC_(14), SC_(45.2895965576171875), SC_(0.3628184054280605268011946953578600354293e-21) },
+ { SC_(14), SC_(45.668792724609375), SC_(0.2467268923398669505652370604639700696795e-21) },
+ { SC_(14), SC_(47.858348846435546875), SC_(0.2664023302791897691133743284205708434252e-22) },
+ { SC_(14), SC_(47.87534332275390625), SC_(0.2618407683148050090594744746837438384657e-22) },
+ { SC_(14), SC_(48.244426727294921875), SC_(0.17994728645668671590927157762697830783e-22) },
+ { SC_(14), SC_(48.384746551513671875), SC_(0.1560344114306038289503173964435255790983e-22) },
+ { SC_(14), SC_(48.443389892578125), SC_(0.147008011601629993985716296739297852991e-22) },
+ { SC_(14), SC_(48.52964019775390625), SC_(0.1346726296740376108577483449982815102077e-22) },
+ { SC_(14), SC_(49.055484771728515625), SC_(0.7893069514185060164594468325190856380414e-23) },
+ { SC_(14), SC_(49.64406585693359375), SC_(0.43407625046330454527611691970865464144e-23) },
+ { SC_(14), SC_(49.82306671142578125), SC_(0.3619087012392420613749725062639833384143e-23) },
+ { SC_(15), SC_(4.8770198822021484375), SC_(0.0003980677340890025328418940432328106548395) },
+ { SC_(15), SC_(5.4930877685546875), SC_(0.0002080355319815069104431451620573655245025) },
+ { SC_(15), SC_(6.349340915679931640625), SC_(0.8457549885174025561457832351774761065756e-4) },
+ { SC_(15), SC_(6.77385044097900390625), SC_(0.5417130025181112432443828745663666625995e-4) },
+ { SC_(15), SC_(7.88065433502197265625), SC_(0.1699194122544540511326588626193792783673e-4) },
+ { SC_(15), SC_(9.41909885406494140625), SC_(0.3406578242158912521468211715863934848589e-5) },
+ { SC_(15), SC_(11.0517024993896484375), SC_(0.6220987128548506158497182443662663584907e-6) },
+ { SC_(15), SC_(13.9249114990234375), SC_(0.315364611007272001883573637462098638175e-7) },
+ { SC_(15), SC_(14.85147190093994140625), SC_(0.1208512688737186354320051969752605121445e-7) },
+ { SC_(15), SC_(15.408351898193359375), SC_(0.6793814422389865708273786667079059371078e-8) },
+ { SC_(15), SC_(24.2687816619873046875), SC_(0.7417700410556581102535973591242351622689e-12) },
+ { SC_(15), SC_(27.344074249267578125), SC_(0.317224518820562037885461574453138813001e-13) },
+ { SC_(15), SC_(27.3610286712646484375), SC_(0.3117646393836263533425207819552767205531e-13) },
+ { SC_(15), SC_(31.6179637908935546875), SC_(0.4007395457635580446300321506807806461409e-15) },
+ { SC_(15), SC_(36.2919464111328125), SC_(0.3396059567078421288188901885338864907388e-17) },
+ { SC_(15), SC_(39.905292510986328125), SC_(0.854767461681935374512931564862292115259e-19) },
+ { SC_(15), SC_(40.0140228271484375), SC_(0.765172802770085964856559979816743941794e-19) },
+ { SC_(15), SC_(40.73618316650390625), SC_(0.3667850615248078403880279208862096954926e-19) },
+ { SC_(15), SC_(41.75042724609375), SC_(0.1306252022800851906555419775354610866219e-19) },
+ { SC_(15), SC_(45.2895965576171875), SC_(0.3568519712702601147608264980634166382222e-21) },
+ { SC_(15), SC_(45.668792724609375), SC_(0.2426948830259803869219723796759126519406e-21) },
+ { SC_(15), SC_(47.858348846435546875), SC_(0.2622002553566498229624285219564031490959e-22) },
+ { SC_(15), SC_(47.87534332275390625), SC_(0.2577117595436189989895189321103531643182e-22) },
+ { SC_(15), SC_(48.244426727294921875), SC_(0.1771262047280934830341101284296780779046e-22) },
+ { SC_(15), SC_(48.384746551513671875), SC_(0.1535936253873235372861045077385080469513e-22) },
+ { SC_(15), SC_(48.443389892578125), SC_(0.1447105443961262930427743637013322835067e-22) },
+ { SC_(15), SC_(48.52964019775390625), SC_(0.1325707949908983777421330896067930648159e-22) },
+ { SC_(15), SC_(49.055484771728515625), SC_(0.7770892092677390932148602120007312570171e-23) },
+ { SC_(15), SC_(49.64406585693359375), SC_(0.4274182244424498291308496034734754526645e-23) },
+ { SC_(15), SC_(49.82306671142578125), SC_(0.3563729099215561684808530560516550420963e-23) },
+ { SC_(16), SC_(4.8770198822021484375), SC_(0.0003785535692760910824763870720216221581886) },
+ { SC_(16), SC_(5.4930877685546875), SC_(0.0001981573712338373848185672395447651561441) },
+ { SC_(16), SC_(6.349340915679931640625), SC_(0.8072667293708897593715080299738931320665e-4) },
+ { SC_(16), SC_(6.77385044097900390625), SC_(0.5175571541190645584648845728313551391293e-4) },
+ { SC_(16), SC_(7.88065433502197265625), SC_(0.1627186875478407512969051629331805742676e-4) },
+ { SC_(16), SC_(9.41909885406494140625), SC_(0.3271481690816749772814240560612359849961e-5) },
+ { SC_(16), SC_(11.0517024993896484375), SC_(0.5989916320478635144624052215026880089187e-6) },
+ { SC_(16), SC_(13.9249114990234375), SC_(0.3048190158010582278726603602886432532531e-7) },
+ { SC_(16), SC_(14.85147190093994140625), SC_(0.1169354188305383049804225474330788030181e-7) },
+ { SC_(16), SC_(15.408351898193359375), SC_(0.6577701915143363157973319746596800293191e-8) },
+ { SC_(16), SC_(24.2687816619873046875), SC_(0.7234586680980849548647193254300946644343e-12) },
+ { SC_(16), SC_(27.344074249267578125), SC_(0.3099548930514875003265375897826379786687e-13) },
+ { SC_(16), SC_(27.3610286712646484375), SC_(0.3046229532418284009333677491924739439641e-13) },
+ { SC_(16), SC_(31.6179637908935546875), SC_(0.392386124012474293365442256402859591982e-15) },
+ { SC_(16), SC_(36.2919464111328125), SC_(0.3331622507923129206245435301163594649235e-17) },
+ { SC_(16), SC_(39.905292510986328125), SC_(0.8395996548489149589470516996585141224581e-19) },
+ { SC_(16), SC_(40.0140228271484375), SC_(0.7516212467561336165933372881968219822756e-19) },
+ { SC_(16), SC_(40.73618316650390625), SC_(0.3603719321761184976036454057547675335333e-19) },
+ { SC_(16), SC_(41.75042724609375), SC_(0.1283814154867906377106524763334148932806e-19) },
+ { SC_(16), SC_(45.2895965576171875), SC_(0.3510763329118672500713319511928478719508e-21) },
+ { SC_(16), SC_(45.668792724609375), SC_(0.2387910239988870234970767950508473818234e-21) },
+ { SC_(16), SC_(47.858348846435546875), SC_(0.2581271961676581928891364551067530750601e-22) },
+ { SC_(16), SC_(47.87534332275390625), SC_(0.2537094897409238963063091893618075085112e-22) },
+ { SC_(16), SC_(48.244426727294921875), SC_(0.1743912224626756990282827219641087503362e-22) },
+ { SC_(16), SC_(48.384746551513671875), SC_(0.1512271713008745542650058229205773104799e-22) },
+ { SC_(16), SC_(48.443389892578125), SC_(0.1424829814098263865903284684400408263421e-22) },
+ { SC_(16), SC_(48.52964019775390625), SC_(0.1305328273866989573499509558929580568136e-22) },
+ { SC_(16), SC_(49.055484771728515625), SC_(0.7652397462513466473508295098903722741515e-23) },
+ { SC_(16), SC_(49.64406585693359375), SC_(0.4209591082967191104690759260789010418235e-23) },
+ { SC_(16), SC_(49.82306671142578125), SC_(0.3510020559348921487124160305892313805731e-23) },
+ { SC_(17), SC_(4.8770198822021484375), SC_(0.0003608421568074065593006179547155091456232) },
+ { SC_(17), SC_(5.4930877685546875), SC_(0.0001891638857804000793926851924676985823661) },
+ { SC_(17), SC_(6.349340915679931640625), SC_(0.7720860011959745284930559148522385883572e-4) },
+ { SC_(17), SC_(6.77385044097900390625), SC_(0.4954365885072545455118039987395330572448e-4) },
+ { SC_(17), SC_(7.88065433502197265625), SC_(0.1560954209745051995638496200975629855407e-4) },
+ { SC_(17), SC_(9.41909885406494140625), SC_(0.3146544570886646078747837720873657380134e-5) },
+ { SC_(17), SC_(11.0517024993896484375), SC_(0.5775154414641331649956650492096996073444e-6) },
+ { SC_(17), SC_(13.9249114990234375), SC_(0.2949457323104328774033940427789032928621e-7) },
+ { SC_(17), SC_(14.85147190093994140625), SC_(0.1132617137089163567898114552954026160128e-7) },
+ { SC_(17), SC_(15.408351898193359375), SC_(0.6374716643025338817107168927969565030119e-8) },
+ { SC_(17), SC_(24.2687816619873046875), SC_(0.706017170856864746993366821492070133222e-12) },
+ { SC_(17), SC_(27.344074249267578125), SC_(0.303006536410392223797335071491371328179e-13) },
+ { SC_(17), SC_(27.3610286712646484375), SC_(0.2977967611196458248396867576051587489282e-13) },
+ { SC_(17), SC_(31.6179637908935546875), SC_(0.3843693779151839425240718235418555199626e-15) },
+ { SC_(17), SC_(36.2919464111328125), SC_(0.326955524478761208159659385947157282716e-17) },
+ { SC_(17), SC_(39.905292510986328125), SC_(0.8249544119472213267898714941203536561321e-19) },
+ { SC_(17), SC_(40.0140228271484375), SC_(0.7385356858142296376181704351069744217844e-19) },
+ { SC_(17), SC_(40.73618316650390625), SC_(0.3541765871537792768570194160038218893796e-19) },
+ { SC_(17), SC_(41.75042724609375), SC_(0.1262125180981906121278351672990666207108e-19) },
+ { SC_(17), SC_(45.2895965576171875), SC_(0.3454825827995200012227499355054907385291e-21) },
+ { SC_(17), SC_(45.668792724609375), SC_(0.2350093680448579613123966337302914718866e-21) },
+ { SC_(17), SC_(47.858348846435546875), SC_(0.2541773643783633860350186530259862489259e-22) },
+ { SC_(17), SC_(47.87534332275390625), SC_(0.2498282741867610639162366115128937131713e-22) },
+ { SC_(17), SC_(48.244426727294921875), SC_(0.1717384992777834273771189026384737723061e-22) },
+ { SC_(17), SC_(48.384746551513671875), SC_(0.148931740669484136371896072217747552977e-22) },
+ { SC_(17), SC_(48.443389892578125), SC_(0.1403222139626873644640840450747606220751e-22) },
+ { SC_(17), SC_(48.52964019775390625), SC_(0.1285558903354350484144944617811606695828e-22) },
+ { SC_(17), SC_(49.055484771728515625), SC_(0.7537423341452499737912590137719156093466e-23) },
+ { SC_(17), SC_(49.64406585693359375), SC_(0.4146902132354390961242261131032941528355e-23) },
+ { SC_(17), SC_(49.82306671142578125), SC_(0.3457889534686419250547819025201400154787e-23) },
+ { SC_(18), SC_(4.8770198822021484375), SC_(0.0003446972599805977885341332726607096492538) },
+ { SC_(18), SC_(5.4930877685546875), SC_(0.0001809425986721971906020711346027312244463) },
+ { SC_(18), SC_(6.349340915679931640625), SC_(0.7398088503517644410699102540557362010105e-4) },
+ { SC_(18), SC_(6.77385044097900390625), SC_(0.4751074599553139396335244676361058532764e-4) },
+ { SC_(18), SC_(7.88065433502197265625), SC_(0.1499836711779556549974107567940253078153e-4) },
+ { SC_(18), SC_(9.41909885406494140625), SC_(0.3030676953961773595124030056309686362143e-5) },
+ { SC_(18), SC_(11.0517024993896484375), SC_(0.5575056195633948103516917182623734389247e-6) },
+ { SC_(18), SC_(13.9249114990234375), SC_(0.2856833126928619555874416356999317137682e-7) },
+ { SC_(18), SC_(14.85147190093994140625), SC_(0.1098086675134570130688979367470940183414e-7) },
+ { SC_(18), SC_(15.408351898193359375), SC_(0.6183713811255910412450635464143936504888e-8) },
+ { SC_(18), SC_(24.2687816619873046875), SC_(0.6893858013008919469369430393036348752533e-12) },
+ { SC_(18), SC_(27.344074249267578125), SC_(0.2963588801453397820645245525185975098647e-13) },
+ { SC_(18), SC_(27.3610286712646484375), SC_(0.2912658715461724434182378436637469624817e-13) },
+ { SC_(18), SC_(31.6179637908935546875), SC_(0.3766696020275209771445721576993157229859e-15) },
+ { SC_(18), SC_(36.2919464111328125), SC_(0.3209730923776568231321132259693260389502e-17) },
+ { SC_(18), SC_(39.905292510986328125), SC_(0.8108054878260042240732917261316414783287e-19) },
+ { SC_(18), SC_(40.0140228271484375), SC_(0.7258927592507683544351467858389195791618e-19) },
+ { SC_(18), SC_(40.73618316650390625), SC_(0.3481882414158921859358963161180038361573e-19) },
+ { SC_(18), SC_(41.75042724609375), SC_(0.1241148636587081109449821610430300660616e-19) },
+ { SC_(18), SC_(45.2895965576171875), SC_(0.3400623535661560433442720916319315086773e-21) },
+ { SC_(18), SC_(45.668792724609375), SC_(0.2313443265081215024223292644139295879321e-21) },
+ { SC_(18), SC_(47.858348846435546875), SC_(0.2503453092770956322478507684444084120416e-22) },
+ { SC_(18), SC_(47.87534332275390625), SC_(0.2460627596560785401347254615339528095184e-22) },
+ { SC_(18), SC_(48.244426727294921875), SC_(0.1691644175156392033642705310807655403969e-22) },
+ { SC_(18), SC_(48.384746551513671875), SC_(0.1467042164728325032114580354284329422434e-22) },
+ { SC_(18), SC_(48.443389892578125), SC_(0.1382253131359967161114703185375228636232e-22) },
+ { SC_(18), SC_(48.52964019775390625), SC_(0.1266373111269651085035407514727657944772e-22) },
+ { SC_(18), SC_(49.055484771728515625), SC_(0.7425816747534654135930452140258345150953e-23) },
+ { SC_(18), SC_(49.64406585693359375), SC_(0.4086033441787891957075637357550164878787e-23) },
+ { SC_(18), SC_(49.82306671142578125), SC_(0.3407268239675149389102320076812131752355e-23) },
+ { SC_(19), SC_(4.8770198822021484375), SC_(0.0003299218001383672864659738838879727972487) },
+ { SC_(19), SC_(5.4930877685546875), SC_(0.0001733991349490665481281126095882983855732) },
+ { SC_(19), SC_(6.349340915679931640625), SC_(0.7100938383598173140693435749761807567666e-4) },
+ { SC_(19), SC_(6.77385044097900390625), SC_(0.4563629608692565947786319220663650516549e-4) },
+ { SC_(19), SC_(7.88065433502197265625), SC_(0.1443270554196663312646183655379321816718e-4) },
+ { SC_(19), SC_(9.41909885406494140625), SC_(0.29229375975083585076493105009646691193e-5) },
+ { SC_(19), SC_(11.0517024993896484375), SC_(0.5388187850716913097656101948535340106559e-6) },
+ { SC_(19), SC_(13.9249114990234375), SC_(0.2769774827344526024771822366860889367455e-7) },
+ { SC_(19), SC_(14.85147190093994140625), SC_(0.1065572314596267352295366530918149890449e-7) },
+ { SC_(19), SC_(15.408351898193359375), SC_(0.6003676313155847558727754397017594033951e-8) },
+ { SC_(19), SC_(24.2687816619873046875), SC_(0.673510094367160540559685869872164243268e-12) },
+ { SC_(19), SC_(27.344074249267578125), SC_(0.289993053831443280728704537691191408601e-13) },
+ { SC_(19), SC_(27.3610286712646484375), SC_(0.2850117596196444487754850323798614360794e-13) },
+ { SC_(19), SC_(31.6179637908935546875), SC_(0.36926858164899886274377174666388292089e-15) },
+ { SC_(19), SC_(36.2919464111328125), SC_(0.3152031486467603894636760424644054490708e-17) },
+ { SC_(19), SC_(39.905292510986328125), SC_(0.7971283471563883595647243305675430830003e-19) },
+ { SC_(19), SC_(40.0140228271484375), SC_(0.713670625520853508845859925787605624071e-19) },
+ { SC_(19), SC_(40.73618316650390625), SC_(0.3423968029396160381858047664609964057523e-19) },
+ { SC_(19), SC_(41.75042724609375), SC_(0.1220850361811720898162895334790244786434e-19) },
+ { SC_(19), SC_(45.2895965576171875), SC_(0.3348077781029727272690886420995939073007e-21) },
+ { SC_(19), SC_(45.668792724609375), SC_(0.2277906429392425943516822259098792365619e-21) },
+ { SC_(19), SC_(47.858348846435546875), SC_(0.2466258937525478225241536833849016808137e-22) },
+ { SC_(19), SC_(47.87534332275390625), SC_(0.2424079008386988642363753465963711935866e-22) },
+ { SC_(19), SC_(48.244426727294921875), SC_(0.1666655664849833148892461708398016166091e-22) },
+ { SC_(19), SC_(48.384746551513671875), SC_(0.1445416596516947735796394469778719792034e-22) },
+ { SC_(19), SC_(48.443389892578125), SC_(0.1361895170902993690500755665628455156467e-22) },
+ { SC_(19), SC_(48.52964019775390625), SC_(0.1247745693242413617880762275589768971805e-22) },
+ { SC_(19), SC_(49.055484771728515625), SC_(0.7317433348691693533972442490012924107111e-23) },
+ { SC_(19), SC_(49.64406585693359375), SC_(0.4026907655194597356087538417554343184765e-23) },
+ { SC_(19), SC_(49.82306671142578125), SC_(0.3358092679602377945368265530432149819446e-23) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/expint_small_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expint_small_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,385 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 3>, 380> expint_small_data = {{
+ { SC_(0), SC_(0.1730655412757187150418758392333984375e-5), SC_(577814.7758212256423775256378551874856003) },
+ { SC_(0), SC_(0.216575062950141727924346923828125e-5), SC_(461732.6762508792015318981937822200350918) },
+ { SC_(0), SC_(0.72700195232755504548549652099609375e-5), SC_(137550.2124589000541443257494936989244997) },
+ { SC_(0), SC_(0.14000004739500582218170166015625e-4), SC_(71427.54725445416496694480545527677490243) },
+ { SC_(0), SC_(0.17196454791701398789882659912109375e-4), SC_(58150.52089548332152905218845489376933772) },
+ { SC_(0), SC_(0.60085076256655156612396240234375e-4), SC_(16642.0678648645272946820823309167585461) },
+ { SC_(0), SC_(0.000116783194243907928466796875), SC_(8561.875962532232545332572615047016255041) },
+ { SC_(0), SC_(0.000149052008055150508880615234375), SC_(6708.067688223899497757367667879930968793) },
+ { SC_(0), SC_(0.0003985252114944159984588623046875), SC_(2508.25173755195584857212143870952023231) },
+ { SC_(0), SC_(0.00063875340856611728668212890625), SC_(1564.549694997861843953582226130571046846) },
+ { SC_(0), SC_(0.0010718167759478092193603515625), SC_(931.9958222627537459717559330883276580758) },
+ { SC_(0), SC_(0.00302191521041095256805419921875), SC_(329.9174784073144324156862883962096967334) },
+ { SC_(0), SC_(0.00499413348734378814697265625), SC_(199.2374290724703076159801092696400339127) },
+ { SC_(0), SC_(0.00928423367440700531005859375), SC_(106.7141098014748145666899963724983770114) },
+ { SC_(0), SC_(0.0241700224578380584716796875), SC_(40.38555342987263632091024457927399908981) },
+ { SC_(0), SC_(0.06227754056453704833984375), SC_(15.08765533838058040972104376703012409721) },
+ { SC_(0), SC_(0.12234418094158172607421875), SC_(7.232414021781513135268430322868745728174) },
+ { SC_(0), SC_(0.249557673931121826171875), SC_(3.122105326937778672022451656660829990212) },
+ { SC_(0), SC_(0.4912221431732177734375), SC_(1.245624088523070804276757644439503799036) },
+ { SC_(1), SC_(0.1730655412757187150418758392333984375e-5), SC_(12.68979643564902057445113029537557060384) },
+ { SC_(1), SC_(0.216575062950141727924346923828125e-5), SC_(12.46553004636203965518423078801621406614) },
+ { SC_(1), SC_(0.72700195232755504548549652099609375e-5), SC_(11.2545431860697943553517367149605754442) },
+ { SC_(1), SC_(0.14000004739500582218170166015625e-4), SC_(10.5992512248675236793183882919991723644) },
+ { SC_(1), SC_(0.17196454791701398789882659912109375e-4), SC_(10.39360884363072197965302323976810805946) },
+ { SC_(1), SC_(0.60085076256655156612396240234375e-4), SC_(9.142593481727702781399755039472990143275) },
+ { SC_(1), SC_(0.000116783194243907928466796875), SC_(8.478092497703841888257351897157795499674) },
+ { SC_(1), SC_(0.000149052008055150508880615234375), SC_(8.23414864712424722136034054262711272215) },
+ { SC_(1), SC_(0.0003985252114944159984588623046875), SC_(7.250922616359625879162196113845954202435) },
+ { SC_(1), SC_(0.00063875340856611728668212890625), SC_(6.779415066673595920390207059288727481393) },
+ { SC_(1), SC_(0.0010718167759478092193603515625), SC_(6.262256013645805034976972133526713777336) },
+ { SC_(1), SC_(0.00302191521041095256805419921875), SC_(5.227668441815221372703241290567350771159) },
+ { SC_(1), SC_(0.00499413348734378814697265625), SC_(4.727263598094615939046673594869014017738) },
+ { SC_(1), SC_(0.00928423367440700531005859375), SC_(4.111484685210341022101979530301768631054) },
+ { SC_(1), SC_(0.0241700224578380584716796875), SC_(3.169451246062171542238811993535958670845) },
+ { SC_(1), SC_(0.06227754056453704833984375), SC_(2.260259939322263892205804391830568328218) },
+ { SC_(1), SC_(0.12234418094158172607421875), SC_(1.642402990148853649294192107450058496557) },
+ { SC_(1), SC_(0.249557673931121826171875), SC_(1.045662095585737033852768372992425480117) },
+ { SC_(1), SC_(0.4912221431732177734375), SC_(0.570563675993986183667187214912446161025) },
+ { SC_(2), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.9999763076811966831897766561746894854348) },
+ { SC_(2), SC_(0.216575062950141727924346923828125e-5), SC_(0.9999708370221707573655426375521705456129) },
+ { SC_(2), SC_(0.72700195232755504548549652099609375e-5), SC_(0.999910909258214977122354162319349018702) },
+ { SC_(2), SC_(0.14000004739500582218170166015625e-4), SC_(0.9998376105258768057557573329394689665198) },
+ { SC_(2), SC_(0.17196454791701398789882659912109375e-4), SC_(0.9998040704684643561925140532604520761726) },
+ { SC_(2), SC_(0.60085076256655156612396240234375e-4), SC_(0.9993905833022821790211571622936164235556) },
+ { SC_(2), SC_(0.000116783194243907928466796875), SC_(0.9988931249016707081053405184509945116324) },
+ { SC_(2), SC_(0.000149052008055150508880615234375), SC_(0.9986236427091650503801677112391142850053) },
+ { SC_(2), SC_(0.0003985252114944159984588623046875), SC_(0.9967118787199152511223256805042743254983) },
+ { SC_(2), SC_(0.00063875340856611728668212890625), SC_(0.9950310760690411830694553942700458450716) },
+ { SC_(2), SC_(0.0010718167759478092193603515625), SC_(0.9922167663637865286439901988209755749909) },
+ { SC_(2), SC_(0.00302191521041095256805419921875), SC_(0.9811850754001837523201422600369909453641) },
+ { SC_(2), SC_(0.00499413348734378814697265625), SC_(0.9714097310243611715783408142596006996882) },
+ { SC_(2), SC_(0.00928423367440700531005859375), SC_(0.9525867471869806036208170870856088617673) },
+ { SC_(2), SC_(0.0241700224578380584716796875), SC_(0.899514025575894945250135338740921424329) },
+ { SC_(2), SC_(0.06227754056453704833984375), SC_(0.7988586373022102057246901625949836282736) },
+ { SC_(2), SC_(0.12234418094158172607421875), SC_(0.6839053211195040219693434236179451026624) },
+ { SC_(2), SC_(0.249557673931121826171875), SC_(0.5181923428662377685394762787685048866534) },
+ { SC_(2), SC_(0.4912221431732177734375), SC_(0.331604622613933458758263418893725943234) },
+ { SC_(3), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.4999982693658376543091737671690095008434) },
+ { SC_(3), SC_(0.216575062950141727924346923828125e-5), SC_(0.4999978342821229854793933090060882477432) },
+ { SC_(3), SC_(0.72700195232755504548549652099609375e-5), SC_(0.499992730317535704456607299984943350278) },
+ { SC_(3), SC_(0.14000004739500582218170166015625e-4), SC_(0.4999860011809870076130562371694389700641) },
+ { SC_(3), SC_(0.17196454791701398789882659912109375e-4), SC_(0.4999828053037840548845718384848723742553) },
+ { SC_(3), SC_(0.60085076256655156612396240234375e-4), SC_(0.4999399341347037428568024707226853352885) },
+ { SC_(3), SC_(0.000116783194243907928466796875), SC_(0.4998832848474067892057518818832512203809) },
+ { SC_(3), SC_(0.000149052008055150508880615234375), SC_(0.4998510561202031850646246064500000857424) },
+ { SC_(3), SC_(0.0003985252114944159984588623046875), SC_(0.4996021696884318821443832438164013431266) },
+ { SC_(3), SC_(0.00063875340856611728668212890625), SC_(0.4993629355297475610790650823685848821969) },
+ { SC_(3), SC_(0.0010718167759478092193603515625), SC_(0.4989326414194633805099515586523952746467) },
+ { SC_(3), SC_(0.00302191521041095256805419921875), SC_(0.4970087940379552304612639268845472514031) },
+ { SC_(3), SC_(0.00499413348734378814697265625), SC_(0.4950834832977331977677179906437250733682) },
+ { SC_(3), SC_(0.00928423367440700531005859375), SC_(0.4909573468985959698257136388230010783411) },
+ { SC_(3), SC_(0.0241700224578380584716796875), SC_(0.4771892295864653755887373794289668954978) },
+ { SC_(3), SC_(0.06227754056453704833984375), SC_(0.4449355580849156787345354284758576392931) },
+ { SC_(3), SC_(0.12234418094158172607421875), SC_(0.400585966685657543850238947546362051285) },
+ { SC_(3), SC_(0.249557673931121826171875), SC_(0.3249132337119700131594392776225790919829) },
+ { SC_(3), SC_(0.4912221431732177734375), SC_(0.2244933004729631534551199436414075158278) },
+ { SC_(4), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.3333324680071245262715865645284048381042) },
+ { SC_(4), SC_(0.216575062950141727924346923828125e-5), SC_(0.3333322504603637963103582665303151431887) },
+ { SC_(4), SC_(0.72700195232755504548549652099609375e-5), SC_(0.3333296983499974493372224529199642401407) },
+ { SC_(4), SC_(0.14000004739500582218170166015625e-4), SC_(0.3333263334289579635589330888999452889502) },
+ { SC_(4), SC_(0.17196454791701398789882659912109375e-4), SC_(0.3333247352537861483970485437943510891261) },
+ { SC_(4), SC_(0.60085076256655156612396240234375e-4), SC_(0.3333032925999163851950867018863045026453) },
+ { SC_(4), SC_(0.000116783194243907928466796875), SC_(0.3332749485526314189805479992822408219843) },
+ { SC_(4), SC_(0.000149052008055150508880615234375), SC_(0.3332588184320001054426253340418943955967) },
+ { SC_(4), SC_(0.0003985252114944159984588623046875), SC_(0.3331341500429304879323886027889306418722) },
+ { SC_(4), SC_(0.00063875340856611728668212890625), SC_(0.333014160257927408406635357113451451623) },
+ { SC_(4), SC_(0.0010718167759478092193603515625), SC_(0.3327979976797836072508267743048393663433) },
+ { SC_(4), SC_(0.00302191521041095256805419921875), SC_(0.3318269092483597307661485853343450609366) },
+ { SC_(4), SC_(0.00499413348734378814697265625), SC_(0.3308486011533795870796983158583450430641) },
+ { SC_(4), SC_(0.00928423367440700531005859375), SC_(0.3287335230068152237322561573905418455842) },
+ { SC_(4), SC_(0.0241700224578380584716796875), SC_(0.321528686325499046761296643527534796266) },
+ { SC_(4), SC_(0.06227754056453704833984375), SC_(0.3039708583641707588487204824261130758999) },
+ { SC_(4), SC_(0.12234418094158172607421875), SC_(0.2786114692448072420299674008584420739148) },
+ { SC_(4), SC_(0.249557673931121826171875), SC_(0.2326869174413194941490162582911016352083) },
+ { SC_(4), SC_(0.4912221431732177734375), SC_(0.1672006847220435577039399872043804888457) },
+ { SC_(5), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.2499994231156112054464478225868175766528) },
+ { SC_(5), SC_(0.216575062950141727924346923828125e-5), SC_(0.2499992780842961167818165530973580904202) },
+ { SC_(5), SC_(0.72700195232755504548549652099609375e-5), SC_(0.2499975766733721400779896480513000531392) },
+ { SC_(5), SC_(0.14000004739500582218170166015625e-4), SC_(0.2499953333807530756689397632193171572859) },
+ { SC_(5), SC_(0.17196454791701398789882659912109375e-4), SC_(0.2499942679223314330462557114927736244578) },
+ { SC_(5), SC_(0.60085076256655156612396240234375e-4), SC_(0.2499799725437657315484048809036607807089) },
+ { SC_(5), SC_(0.000116783194243907928466796875), SC_(0.2499610756778986060072655969409855563922) },
+ { SC_(5), SC_(0.000149052008055150508880615234375), SC_(0.2499503215508885359803723774515238310774) },
+ { SC_(5), SC_(0.0003985252114944159984588623046875), SC_(0.2498671979578819359594098594467548202963) },
+ { SC_(5), SC_(0.00063875340856611728668212890625), SC_(0.2497871841552494748465221110450611975769) },
+ { SC_(5), SC_(0.0010718167759478092193603515625), SC_(0.2496430147343942808033948163209649673697) },
+ { SC_(5), SC_(0.00302191521041095256805419921875), SC_(0.2489949733488023051271180731389395708097) },
+ { SC_(5), SC_(0.00499413348734378814697265625), SC_(0.2483415035962114594950005069148420510374) },
+ { SC_(5), SC_(0.00928423367440700531005859375), SC_(0.2469266732272532034223040397507562406243) },
+ { SC_(5), SC_(0.0241700224578380584716796875), SC_(0.2420870944507284922750390337420489762581) },
+ { SC_(5), SC_(0.06227754056453704833984375), SC_(0.2301728774743846881561522041544016024552) },
+ { SC_(5), SC_(0.12234418094158172607421875), SC_(0.2126893194298959031515617592899204600847) },
+ { SC_(5), SC_(0.249557673931121826171875), SC_(0.1802691343219245000486413064752883220342) },
+ { SC_(5), SC_(0.4912221431732177734375), SC_(0.1324363639158242626230482022654728761494) },
+ { SC_(6), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.1999995673366460049641967287178764376758) },
+ { SC_(6), SC_(0.216575062950141727924346923828125e-5), SC_(0.1999994585631243697640119955956215158009) },
+ { SC_(6), SC_(0.72700195232755504548549652099609375e-5), SC_(0.1999981825039280130703307389527539339626) },
+ { SC_(6), SC_(0.14000004739500582218170166015625e-4), SC_(0.1999965000314815849734869604432305581943) },
+ { SC_(6), SC_(0.17196454791701398789882659912109375e-4), SC_(0.1999957009355879937792673172585206209907) },
+ { SC_(6), SC_(0.60085076256655156612396240234375e-4), SC_(0.1999849793326204915379339620663404213245) },
+ { SC_(6), SC_(0.000116783194243907928466796875), SC_(0.1999708064743587132406006868918039255621) },
+ { SC_(6), SC_(0.000149052008055150508880615234375), SC_(0.1999627407004604659688373925079291930869) },
+ { SC_(6), SC_(0.0003985252114944159984588623046875), SC_(0.1999003951622435866430026938266496921632) },
+ { SC_(6), SC_(0.00063875340856611728668212890625), SC_(0.1998403796271336271407932741008590942797) },
+ { SC_(6), SC_(0.0010718167759478092193603515625), SC_(0.1997322371686603290924085933634566379327) },
+ { SC_(6), SC_(0.00302191521041095256805419921875), SC_(0.1992460408964423756244108293541117608605) },
+ { SC_(6), SC_(0.00499413348734378814697265625), SC_(0.1987556131687399264370086252838978909125) },
+ { SC_(6), SC_(0.00928423367440700531005859375), SC_(0.1976932413637066757394817471625577237966) },
+ { SC_(6), SC_(0.0241700224578380584716796875), SC_(0.1940536965725227157665771390371888397218) },
+ { SC_(6), SC_(0.06227754056453704833984375), SC_(0.1850574933291966669077136179077438196585) },
+ { SC_(6), SC_(0.12234418094158172607421875), SC_(0.1717644938289194367486550307278864140087) },
+ { SC_(6), SC_(0.249557673931121826171875), SC_(0.1468315594631200476064231753398882300411) },
+ { SC_(6), SC_(0.4912221431732177734375), SC_(0.1093644919671378757189796182413879395249) },
+ { SC_(7), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.1666663205359585109609719894142995101411) },
+ { SC_(7), SC_(0.216575062950141727924346923828125e-5), SC_(0.1666662335171270752925038942979400736368) },
+ { SC_(7), SC_(0.72700195232755504548549652099609375e-5), SC_(0.1666652126693686381933638173331056666197) },
+ { SC_(7), SC_(0.14000004739500582218170166015625e-4), SC_(0.1666638666902186306946789400080985267427) },
+ { SC_(7), SC_(0.17196454791701398789882659912109375e-4), SC_(0.1666632274126728010473201062136102289408) },
+ { SC_(7), SC_(0.60085076256655156612396240234375e-4), SC_(0.1666546501026803333847125533143404716918) },
+ { SC_(7), SC_(0.000116783194243907928466796875), SC_(0.1666433117325187114084653460018162624208) },
+ { SC_(7), SC_(0.000149052008055150508880615234375), SC_(0.1666368590419343175560338930696031821132) },
+ { SC_(7), SC_(0.0003985252114944159984588623046875), SC_(0.1665869814736449607941247474352503569426) },
+ { SC_(7), SC_(0.00063875340856611728668212890625), SC_(0.1665389669712179092138275188989262765907) },
+ { SC_(7), SC_(0.0010718167759478092193603515625), SC_(0.1664524468419995331119660147079095521575) },
+ { SC_(7), SC_(0.00302191521041095256805419921875), SC_(0.1660634235896485619408270262884485590605) },
+ { SC_(7), SC_(0.00499413348734378814697265625), SC_(0.165670950733263871259068886800095095511) },
+ { SC_(7), SC_(0.00928423367440700531005859375), SC_(0.164820550250757923368498039856098512936) },
+ { SC_(7), SC_(0.0241700224578380584716796875), SC_(0.1619049085280093472329962889514823049632) },
+ { SC_(7), SC_(0.06227754056453704833984375), SC_(0.1546828569686949921899052006303974689854) },
+ { SC_(7), SC_(0.12234418094158172607421875), SC_(0.1439715639021542874422150208138231842592) },
+ { SC_(7), SC_(0.249557673931121826171875), SC_(0.123750400119876872751820629596297627684) },
+ { SC_(7), SC_(0.4912221431732177734375), SC_(0.09302597903689019164880472777711928047359) },
+ { SC_(8), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.1428568544148735808781192733002851507633) },
+ { SC_(8), SC_(0.216575062950141727924346923828125e-5), SC_(0.142856781899173654062296115818394507506) },
+ { SC_(8), SC_(0.72700195232755504548549652099609375e-5), SC_(0.1428559311925076135945476231147924843289) },
+ { SC_(8), SC_(0.14000004739500582218170166015625e-4), SC_(0.1428548095426195059835087605604923576577) },
+ { SC_(8), SC_(0.17196454791701398789882659912109375e-4), SC_(0.1428542768109158340969845102903107982851) },
+ { SC_(8), SC_(0.60085076256655156612396240234375e-4), SC_(0.1428471290387793486692888373190714557271) },
+ { SC_(8), SC_(0.000116783194243907928466796875), SC_(0.1428376803552006239388352098411426354666) },
+ { SC_(8), SC_(0.000149052008055150508880615234375), SC_(0.1428323030773124738526110222386890754382) },
+ { SC_(8), SC_(0.0003985252114944159984588623046875), SC_(0.1427907378681579449293000200528290972611) },
+ { SC_(8), SC_(0.00063875340856611728668212890625), SC_(0.1427507247454502126120753111970087575651) },
+ { SC_(8), SC_(0.0010718167759478092193603515625), SC_(0.142678621555652762762107538246220658783) },
+ { SC_(8), SC_(0.00302191521041095256805419921875), SC_(0.1423544023705502882269519246265712881969) },
+ { SC_(8), SC_(0.00499413348734378814697265625), SC_(0.1420272762314528148018794339362192255462) },
+ { SC_(8), SC_(0.00928423367440700531005859375), SC_(0.1413183570357638227021465856426698329799) },
+ { SC_(8), SC_(0.0241700224578380584716796875), SC_(0.1388866411567263210278922912995766892226) },
+ { SC_(8), SC_(0.06227754056453704833984375), SC_(0.1328555427800348797374414593959426400424) },
+ { SC_(8), SC_(0.12234418094158172607421875), SC_(0.1238899552372546545472667765733820900346) },
+ { SC_(8), SC_(0.249557673931121826171875), SC_(0.1068946401652277975340878746040295741526) },
+ { SC_(8), SC_(0.4912221431732177734375), SC_(0.08088310193702867823051770661734151864227) },
+ { SC_(9), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.1249997527637620604326672847311155586928) },
+ { SC_(9), SC_(0.216575062950141727924346923828125e-5), SC_(0.1249996906074438010127791229133040833274) },
+ { SC_(9), SC_(0.72700195232755504548549652099609375e-5), SC_(0.1249989614301868083880516617124344007489) },
+ { SC_(9), SC_(0.14000004739500582218170166015625e-4), SC_(0.1249980000156561814140650490054225773677) },
+ { SC_(9), SC_(0.17196454791701398789882659912109375e-4), SC_(0.1249975433882441874555485054009696622375) },
+ { SC_(9), SC_(0.60085076256655156612396240234375e-4), SC_(0.124991416718521755887449021341929686573) },
+ { SC_(9), SC_(0.000116783194243907928466796875), SC_(0.1249833178230097004724362786885679901135) },
+ { SC_(9), SC_(0.000149052008055150508880615234375), SC_(0.1249787087072568381330521173731915148857) },
+ { SC_(9), SC_(0.0003985252114944159984588623046875), SC_(0.1249430810600151579827996508965212932306) },
+ { SC_(9), SC_(0.00063875340856611728668212890625), SC_(0.1249087835048696242301614558094775193733) },
+ { SC_(9), SC_(0.0010718167759478092193603515625), SC_(0.1248469790092924622540583350470436501338) },
+ { SC_(9), SC_(0.00302191521041095256805419921875), SC_(0.1245690579057122458359550268350507283437) },
+ { SC_(9), SC_(0.00499413348734378814697265625), SC_(0.1242886266608453818334250421558130175011) },
+ { SC_(9), SC_(0.00928423367440700531005859375), SC_(0.1236808373880019783729475638951049481542) },
+ { SC_(9), SC_(0.0241700224578380584716796875), SC_(0.121595355017048584868687526759894684985) },
+ { SC_(9), SC_(0.06227754056453704833984375), SC_(0.1164185188631304166733756994725551588974) },
+ { SC_(9), SC_(0.12234418094158172607421875), SC_(0.1087108193281098872435930111186001103594) },
+ { SC_(9), SC_(0.249557673931121826171875), SC_(0.09405862067540226968400526059351356846386) },
+ { SC_(9), SC_(0.4912221431732177734375), SC_(0.07151832045906046342156767136731221443337) },
+ { SC_(10), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.1111108947793984569014216518069218833733) },
+ { SC_(10), SC_(0.216575062950141727924346923828125e-5), SC_(0.1111108403926174571367154282307620812091) },
+ { SC_(10), SC_(0.72700195232755504548549652099609375e-5), SC_(0.1111102023624459184130925638160020991326) },
+ { SC_(10), SC_(0.14000004739500582218170166015625e-4), SC_(0.1111093611245186067953571073222145478079) },
+ { SC_(10), SC_(0.17196454791701398789882659912109375e-4), SC_(0.111108961575384725564527240456460394385) },
+ { SC_(10), SC_(0.60085076256655156612396240234375e-4), SC_(0.1111036007344456029637817806930808383435) },
+ { SC_(10), SC_(0.000116783194243907928466796875), SC_(0.1110965141859517001982144185566089271586) },
+ { SC_(10), SC_(0.000149052008055150508880615234375), SC_(0.1110924811969051737763119458245183802011) },
+ { SC_(10), SC_(0.0003985252114944159984588623046875), SC_(0.1110613068023694898577937931449967614007) },
+ { SC_(10), SC_(0.00063875340856611728668212890625), SC_(0.1110312960710822056745981665129038028815) },
+ { SC_(10), SC_(0.0010718167759478092193603515625), SC_(0.1109772160364403990792163363469815693873) },
+ { SC_(10), SC_(0.00302191521041095256805419921875), SC_(0.1107340232276287398901233051893227450036) },
+ { SC_(10), SC_(0.00499413348734378814697265625), SC_(0.1104886224967337646396427643969969266167) },
+ { SC_(10), SC_(0.00928423367440700531005859375), SC_(0.1099567166619847325201763231676300471) },
+ { SC_(10), SC_(0.0241700224578380584716796875), SC_(0.108131196767856621531116300961376597551) },
+ { SC_(10), SC_(0.06227754056453704833984375), SC_(0.1035968675920876240807996818255192946751) },
+ { SC_(10), SC_(0.12234418094158172607421875), SC_(0.09683818150834270733282783916064409551927) },
+ { SC_(10), SC_(0.249557673931121826171875), SC_(0.08396358806329261792071661328014740666971) },
+ { SC_(10), SC_(0.4912221431732177734375), SC_(0.06408297241116001197035783749606063229405) },
+ { SC_(11), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.09999980770514133597675414931859600344223) },
+ { SC_(11), SC_(0.216575062950141727924346923828125e-5), SC_(0.09999975936133432100414877159704021199218) },
+ { SC_(11), SC_(0.72700195232755504548549652099609375e-5), SC_(0.09999919222335628422644365761786665251362) },
+ { SC_(11), SC_(0.14000004739500582218170166015625e-4), SC_(0.09999844445616777622963693922673145404521) },
+ { SC_(11), SC_(0.17196454791701398789882659912109375e-4), SC_(0.09999808930128317957647384863686405871679) },
+ { SC_(11), SC_(0.60085076256655156612396240234375e-4), SC_(0.09999332410604928682840606296109188602285) },
+ { SC_(11), SC_(0.000116783194243907928466796875), SC_(0.09998702494188518753354731835115754020628) },
+ { SC_(11), SC_(0.000149052008055150508880615234375), SC_(0.09998344005422412925756796544646105486278) },
+ { SC_(11), SC_(0.0003985252114944159984588623046875), SC_(0.09995572934583473546996768666538729313667) },
+ { SC_(11), SC_(0.00063875340856611728668212890625), SC_(0.09992905289321405162448653681779504313782) },
+ { SC_(11), SC_(0.0010718167759478092193603515625), SC_(0.09988098101725963143130671945579744367585) },
+ { SC_(11), SC_(0.00302191521041095256805419921875), SC_(0.09966480173503889225544076583378042307555) },
+ { SC_(11), SC_(0.00499413348734378814697265625), SC_(0.09944665215335253553056778674874271396217) },
+ { SC_(11), SC_(0.00928423367440700531005859375), SC_(0.09897378679016587091134493183299636500794) },
+ { SC_(11), SC_(0.0241700224578380584716796875), SC_(0.09735061999179684490879044971256167485506) },
+ { SC_(11), SC_(0.06227754056453704833984375), SC_(0.0933170309235925332247990297132760214755) },
+ { SC_(11), SC_(0.12234418094158172607421875), SC_(0.08729961817247598282239360210982686247619) },
+ { SC_(11), SC_(0.249557673931121826171875), SC_(0.075819158542657046280238835356443181261) },
+ { SC_(11), SC_(0.4912221431732177734375), SC_(0.05803991593037685685793414702984855120059) },
+ { SC_(12), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.09090891784371603149518600552833329425637) },
+ { SC_(12), SC_(0.216575062950141727924346923828125e-5), SC_(0.09090887433428854072583604475717968565254) },
+ { SC_(12), SC_(0.72700195232755504548549652099609375e-5), SC_(0.09090836391007486152351513252442904504059) },
+ { SC_(12), SC_(0.14000004739500582218170166015625e-4), SC_(0.09090769091950579812763781260751349192882) },
+ { SC_(12), SC_(0.17196454791701398789882659912109375e-4), SC_(0.09090737128004041397458968915744009736645) },
+ { SC_(12), SC_(0.60085076256655156612396240234375e-4), SC_(0.0909030826020283016372965283444900077506) },
+ { SC_(12), SC_(0.000116783194243907928466796875), SC_(0.09089741334731747416007985901915857398215) },
+ { SC_(12), SC_(0.000149052008055150508880615234375), SC_(0.09089418694246647058810371865449823032756) },
+ { SC_(12), SC_(0.0003985252114944159984588623046875), SC_(0.09086924721008654434828770391744254174568) },
+ { SC_(12), SC_(0.00063875340856611728668212890625), SC_(0.09084523822980119176820213507998464872103) },
+ { SC_(12), SC_(0.0010718167759478092193603515625), SC_(0.09080197302758543016549463364527940417656) },
+ { SC_(12), SC_(0.00302191521041095256805419921875), SC_(0.09060740614538043524020592986918340348091) },
+ { SC_(12), SC_(0.00499413348734378814697265625), SC_(0.09041106060067122658993654509695340700083) },
+ { SC_(12), SC_(0.00928423367440700531005859375), SC_(0.08998543963536530003661856436147827766534) },
+ { SC_(12), SC_(0.0241700224578380584716796875), SC_(0.0885242515182503873911397533406318575276) },
+ { SC_(12), SC_(0.06227754056453704833984375), SC_(0.08489186474373130460534785667471398267764) },
+ { SC_(12), SC_(0.12234418094158172607421875), SC_(0.07946937904031325855940951342656922816909) },
+ { SC_(12), SC_(0.249557673931121826171875), SC_(0.06911128093756693069367210021832517578288) },
+ { SC_(12), SC_(0.4912221431732177734375), SC_(0.05303342204177960664912054128073610056634) },
+ { SC_(13), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.08333317600117284099184869037740301631409) },
+ { SC_(13), SC_(0.216575062950141727924346923828125e-5), SC_(0.08333313644714699316946699817142059689431) },
+ { SC_(13), SC_(0.72700195232755504548549652099609375e-5), SC_(0.08333267242511023308839596483396819928955) },
+ { SC_(13), SC_(0.14000004739500582218170166015625e-4), SC_(0.0833320606154296981919490981670984230882) },
+ { SC_(13), SC_(0.17196454791701398789882659912109375e-4), SC_(0.08333177003404716917724179238390486798274) },
+ { SC_(13), SC_(0.60085076256655156612396240234375e-4), SC_(0.08332787123418043987690162279088360260336) },
+ { SC_(13), SC_(0.000116783194243907928466796875), SC_(0.08332271736119738881998583983706767483859) },
+ { SC_(13), SC_(0.000149052008055150508880615234375), SC_(0.0833197842615466004561257854670130749122) },
+ { SC_(13), SC_(0.0003985252114944159984588623046875), SC_(0.08329711170859723975931766695759929096705) },
+ { SC_(13), SC_(0.00063875340856611728668212890625), SC_(0.0832752852371160122743231407129948894204) },
+ { SC_(13), SC_(0.0010718167759478092193603515625), SC_(0.08323595286137600240196813776876034382459) },
+ { SC_(13), SC_(0.00302191521041095256805419921875), SC_(0.08305906985672365713435017923620490888333) },
+ { SC_(13), SC_(0.00499413348734378814697265625), SC_(0.08288056596314455823901650776153873189154) },
+ { SC_(13), SC_(0.00928423367440700531005859375), SC_(0.08249360715869584668822453500316491394612) },
+ { SC_(13), SC_(0.0241700224578380584716796875), SC_(0.0811650083520817527503370935560498531099) },
+ { SC_(13), SC_(0.06227754056453704833984375), SC_(0.07786126756746446866379791447935208944906) },
+ { SC_(13), SC_(0.12234418094158172607421875), SC_(0.07292676280305391786313843424668789859853) },
+ { SC_(13), SC_(0.249557673931121826171875), SC_(0.06349150772044809925640555488872857831394) },
+ { SC_(13), SC_(0.4912221431732177734375), SC_(0.04881891192644300261465981982025741827539) },
+ { SC_(14), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.07692293270192867056543562699538441285583) },
+ { SC_(14), SC_(0.216575062950141727924346923828125e-5), SC_(0.0769228964440710012344728838406850583334) },
+ { SC_(14), SC_(0.72700195232755504548549652099609375e-5), SC_(0.07692247109051906115891896156059973330125) },
+ { SC_(14), SC_(0.14000004739500582218170166015625e-4), SC_(0.07692191026492434923638654737971706484434) },
+ { SC_(14), SC_(0.17196454791701398789882659912109375e-4), SC_(0.07692164389861925975434793108993496260236) },
+ { SC_(14), SC_(0.60085076256655156612396240234375e-4), SC_(0.07691806999748599814943152086996911260154) },
+ { SC_(14), SC_(0.000116783194243907928466796875), SC_(0.07691334561012010395780541439321710471635) },
+ { SC_(14), SC_(0.000149052008055150508880615234375), SC_(0.07691065693219143191504630888978825884147) },
+ { SC_(14), SC_(0.0003985252114944159984588623046875), SC_(0.07688987370692839019328246159046199168894) },
+ { SC_(14), SC_(0.00063875340856611728668212890625), SC_(0.07686986601374376232543069428262715095707) },
+ { SC_(14), SC_(0.0010718167759478092193603515625), SC_(0.07683381105568102550154808856089764095341) },
+ { SC_(14), SC_(0.00302191521041095256805419921875), SC_(0.07667166528560983649912401473257889126991) },
+ { SC_(14), SC_(0.00499413348734378814697265625), SC_(0.07650803075793694104802016836786104375801) },
+ { SC_(14), SC_(0.00928423367440700531005859375), SC_(0.07615329552520869775634144814095036449211) },
+ { SC_(14), SC_(0.0241700224578380584716796875), SC_(0.07493522871519846308938791611988935762331) },
+ { SC_(14), SC_(0.06227754056453704833984375), SC_(0.07190561993157011549765803135931994222671) },
+ { SC_(14), SC_(0.12234418094158172607421875), SC_(0.06737858497395458474863130657857757639511) },
+ { SC_(14), SC_(0.249557673931121826171875), SC_(0.05871542693672782953195581711588401645767) },
+ { SC_(14), SC_(0.4912221431732177734375), SC_(0.04522286183143052947956742362768640870137) },
+ { SC_(15), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.07142843830135678430557686186483907103332) },
+ { SC_(15), SC_(0.216575062950141727924346923828125e-5), SC_(0.07142840483256459556893886139866769560301) },
+ { SC_(15), SC_(0.72700195232755504548549652099609375e-5), SC_(0.07142801219850261754791111032097799780857) },
+ { SC_(15), SC_(0.14000004739500582218170166015625e-4), SC_(0.07142749451329655914708777285149771592756) },
+ { SC_(15), SC_(0.17196454791701398789882659912109375e-4), SC_(0.07142724863667819098544040349933483459537) },
+ { SC_(15), SC_(0.60085076256655156612396240234375e-4), SC_(0.07142394965005100519504785729035742912749) },
+ { SC_(15), SC_(0.000116783194243907928466796875), SC_(0.07141958867417625278045171566133804924267) },
+ { SC_(15), SC_(0.000149052008055150508880615234375), SC_(0.07141710681512763831624656689212439533833) },
+ { SC_(15), SC_(0.0003985252114944159984588623046875), SC_(0.07139792225971062733216224219889843492458) },
+ { SC_(15), SC_(0.00063875340856611728668212890625), SC_(0.07137945354728793815621837897126096496695) },
+ { SC_(15), SC_(0.0010718167759478092193603515625), SC_(0.07134617183191733372828052493089770600179) },
+ { SC_(15), SC_(0.00302191521041095256805419921875), SC_(0.07119649649342545512786733526338407058593) },
+ { SC_(15), SC_(0.00499413348734378814697265625), SC_(0.07104544465318913130029520977272205803238) },
+ { SC_(15), SC_(0.00928423367440700531005859375), SC_(0.07071797905446335190765005167612134211414) },
+ { SC_(15), SC_(0.0241700224578380584716796875), SC_(0.06959346765795077653558839105295821251784) },
+ { SC_(15), SC_(0.06227754056453704833984375), SC_(0.0667959972998317143729966269635932436109) },
+ { SC_(15), SC_(0.12234418094158172607421875), SC_(0.06261431370954492875982416200591991469247) },
+ { SC_(15), SC_(0.249557673931121826171875), SC_(0.05460660412773958169800526198387768453117) },
+ { SC_(15), SC_(0.4912221431732177734375), SC_(0.0421188330888019402635824495314924339382) },
+ { SC_(16), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.06666654304853809699945783166277385282533) },
+ { SC_(16), SC_(0.216575062950141727924346923828125e-5), SC_(0.06666651197037353362502658679389514469466) },
+ { SC_(16), SC_(0.72700195232755504548549652099609375e-5), SC_(0.0666661473815906706976833386950951600242) },
+ { SC_(16), SC_(0.14000004739500582218170166015625e-4), SC_(0.0666656666738665594423295905799989143287) },
+ { SC_(16), SC_(0.17196454791701398789882659912109375e-4), SC_(0.06666543835984096023360798850623321457013) },
+ { SC_(16), SC_(0.60085076256655156612396240234375e-4), SC_(0.06666237501435694077352966293019493851952) },
+ { SC_(16), SC_(0.000116783194243907928466796875), SC_(0.06665832553446339453823619449641153525662) },
+ { SC_(16), SC_(0.000149052008055150508880615234375), SC_(0.06665602094909754909286909682461902922413) },
+ { SC_(16), SC_(0.0003985252114944159984588623046875), SC_(0.06663820668780405347821578869651693922563) },
+ { SC_(16), SC_(0.00063875340856611728668212890625), SC_(0.06662105711211390111652234096260015918844) },
+ { SC_(16), SC_(0.0010718167759478092193603515625), SC_(0.06659015249270820342229697822760925298911) },
+ { SC_(16), SC_(0.00302191521041095256805419921875), SC_(0.0664511664269206027424005742189069408551) },
+ { SC_(16), SC_(0.00499413348734378814697265625), SC_(0.06631090040192273720685590565904807744936) },
+ { SC_(16), SC_(0.00928423367440700531005859375), SC_(0.06600681130071304531237155750190562009028) },
+ { SC_(16), SC_(0.0241700224578380584716796875), SC_(0.06496251051306859685686412141792258653208) },
+ { SC_(16), SC_(0.06227754056453704833984375), SC_(0.06236414512855743773641213229896183548994) },
+ { SC_(16), SC_(0.12234418094158172607421875), SC_(0.05847888485328378106294664079191164865064) },
+ { SC_(16), SC_(0.249557673931121826171875), SC_(0.05103452307007735926554556327773818214919) },
+ { SC_(16), SC_(0.4912221431732177734375), SC_(0.0394125620596434965123587499491500472372) },
+ { SC_(17), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.06249988462307945307908017581791268977313) },
+ { SC_(17), SC_(0.216575062950141727924346923828125e-5), SC_(0.06249985561679221676774980550769608140614) },
+ { SC_(17), SC_(0.72700195232755504548549652099609375e-5), SC_(0.06249951533391939041337864186116416893234) },
+ { SC_(17), SC_(0.14000004739500582218170166015625e-4), SC_(0.06249906667335066952129732040559092146342) },
+ { SC_(17), SC_(0.17196454791701398789882659912109375e-4), SC_(0.06249885358024184723716755518368815597862) },
+ { SC_(17), SC_(0.60085076256655156612396240234375e-4), SC_(0.06249599445718307493973764409020902900864) },
+ { SC_(17), SC_(0.000116783194243907928466796875), SC_(0.06249221494077931309495003783005590817055) },
+ { SC_(17), SC_(0.000149052008055150508880615234375), SC_(0.06249006399286700569832074698786566925701) },
+ { SC_(17), SC_(0.0003985252114944159984588623046875), SC_(0.06247343732398223434411132037030316052086) },
+ { SC_(17), SC_(0.00063875340856611728668212890625), SC_(0.06245743100772817456409663607219418267563) },
+ { SC_(17), SC_(0.0010718167759478092193603515625), SC_(0.06242858656074609674340793412520265769202) },
+ { SC_(17), SC_(0.00302191521041095256805419921875), SC_(0.0622988647743072145354092596903005273557) },
+ { SC_(17), SC_(0.00499413348734378814697265625), SC_(0.0621679469359271011639958295023269764062) },
+ { SC_(17), SC_(0.00928423367440700531005859375), SC_(0.06188411931831255179325908903786178409114) },
+ { SC_(17), SC_(0.0241700224578380584716796875), SC_(0.0609093492521388775469551843749806027059) },
+ { SC_(17), SC_(0.06227754056453704833984375), SC_(0.0584836363613583832127398530378980108328) },
+ { SC_(17), SC_(0.12234418094158172607421875), SC_(0.05485557615346988551034803028047672930453) },
+ { SC_(17), SC_(0.249557673931121826171875), SC_(0.04790058039318774966694255640723585925481) },
+ { SC_(17), SC_(0.4912221431732177734375), SC_(0.03703236319685020300958697194277916844504) },
+ { SC_(18), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.05882342124590124743503668917708420145518) },
+ { SC_(18), SC_(0.216575062950141727924346923828125e-5), SC_(0.05882339405250671111581257451611106191635) },
+ { SC_(18), SC_(0.72700195232755504548549652099609375e-5), SC_(0.05882307503730626938175588111928585498593) },
+ { SC_(18), SC_(0.14000004739500582218170166015625e-4), SC_(0.05882265441800179218625554918997835286824) },
+ { SC_(18), SC_(0.17196454791701398789882659912109375e-4), SC_(0.05882245464319743258599789131069371575228) },
+ { SC_(18), SC_(0.60085076256655156612396240234375e-4), SC_(0.05881977421483662888664297358478870305647) },
+ { SC_(18), SC_(0.000116783194243907928466796875), SC_(0.0588162309167159831370507751429249096136) },
+ { SC_(18), SC_(0.000149052008055150508880615234375), SC_(0.05881421440177187580343423242512009971648) },
+ { SC_(18), SC_(0.0003985252114944159984588623046875), SC_(0.05879862687937101718003654785828567378979) },
+ { SC_(18), SC_(0.00063875340856611728668212890625), SC_(0.05878362092082452731016712169968859340322) },
+ { SC_(18), SC_(0.0010718167759478092193603515625), SC_(0.05875657914165397869174629461513706700597) },
+ { SC_(18), SC_(0.00302191521041095256805419921875), SC_(0.05863496378190809879409693964081298572753) },
+ { SC_(18), SC_(0.00499413348734378814697265625), SC_(0.05851222596691027379082269719377427641588) },
+ { SC_(18), SC_(0.00928423367440700531005859375), SC_(0.05824612853698429641923284472585223102581) },
+ { SC_(18), SC_(0.0241700224578380584716796875), SC_(0.05733220900193670301704905656625237704967) },
+ { SC_(18), SC_(0.06227754056453704833984375), SC_(0.05505763825434673012796407470855753202628) },
+ { SC_(18), SC_(0.12234418094158172607421875), SC_(0.0516548534818056121546604299679736700432) },
+ { SC_(18), SC_(0.249557673931121826171875), SC_(0.04512890504327541405581236239109694591622) },
+ { SC_(18), SC_(0.4912221431732177734375), SC_(0.03492276573742135444124721201053141343969) },
+ { SC_(19), SC_(0.1730655412757187150418758392333984375e-5), SC_(0.05555545375238958055070296836154042278148) },
+ { SC_(19), SC_(0.216575062950141727924346923828125e-5), SC_(0.05555542815860627978655071793595712560455) },
+ { SC_(19), SC_(0.72700195232755504548549652099609375e-5), SC_(0.05555512790899996177912196960367217844985) },
+ { SC_(19), SC_(0.14000004739500582218170166015625e-4), SC_(0.05555473203198997035603620704636908809792) },
+ { SC_(19), SC_(0.17196454791701398789882659912109375e-4), SC_(0.0555545440086324706169620903193223815888) },
+ { SC_(19), SC_(0.60085076256655156612396240234375e-4), SC_(0.05555202125212201603991344567350516412012) },
+ { SC_(19), SC_(0.000116783194243907928466796875), SC_(0.05554868638207377961222457350655311699087) },
+ { SC_(19), SC_(0.000149052008055150508880615234375), SC_(0.0555467884846047083384104067993782562285) },
+ { SC_(19), SC_(0.0003985252114944159984588623046875), SC_(0.05553211785855094070193498404565764766408) },
+ { SC_(19), SC_(0.00063875340856611728668212890625), SC_(0.05551799457292957769783835164124369758407) },
+ { SC_(19), SC_(0.0010718167759478092193603515625), SC_(0.05549254339595949030608724637993842293557) },
+ { SC_(19), SC_(0.00302191521041095256805419921875), SC_(0.05537808090503200278730106215360027103479) },
+ { SC_(19), SC_(0.00499413348734378814697265625), SC_(0.05526256103311035590358747232544709551335) },
+ { SC_(19), SC_(0.00928423367440700531005859375), SC_(0.05501210894918067939819530617078899142577) },
+ { SC_(19), SC_(0.0241700224578380584716796875), SC_(0.05415188958850589857220572747127058337905) },
+ { SC_(19), SC_(0.06227754056453704833984375), SC_(0.05201073405888765875221070931942632402262) },
+ { SC_(19), SC_(0.12234418094158172607421875), SC_(0.04880689438802118463144973826036250259302) },
+ { SC_(19), SC_(0.249557673931121826171875), SC_(0.04266017103271657719951582163012671039402) },
+ { SC_(19), SC_(0.4912221431732177734375), SC_(0.03304018325118980221254092304969558212594) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/expinti_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expinti_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,342 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 337> expinti_data = {{
+ { SC_(-49.689971923828125), SC_(-0.5189914452467706181911213069148082266893e-23) },
+ { SC_(-49.490234375), SC_(-0.6362401135264284153452455085506782750647e-23) },
+ { SC_(-49.47381591796875), SC_(-0.6469829627301154800340680350229540167762e-23) },
+ { SC_(-49.109668731689453125), SC_(-0.937965617499186961883342318134168114907e-23) },
+ { SC_(-48.69077301025390625), SC_(-0.1438002258908106326351299430868912629378e-22) },
+ { SC_(-48.5106964111328125), SC_(-0.1728000132640339028589502655738823027867e-22) },
+ { SC_(-48.044872283935546875), SC_(-0.2779439615740334951105570945539716295032e-22) },
+ { SC_(-46.498386383056640625), SC_(-0.1347452831431197364179115494975704338441e-21) },
+ { SC_(-46.225093841552734375), SC_(-0.1781193691784135039948913637371768811083e-21) },
+ { SC_(-46.21092987060546875), SC_(-0.1807144449606719884758204680891841205212e-21) },
+ { SC_(-46.07171630859375), SC_(-0.2083224907084183832424058026703771220474e-21) },
+ { SC_(-45.99146270751953125), SC_(-0.2261161370639941533874318532661368660359e-21) },
+ { SC_(-45.54817962646484375), SC_(-0.3556041033058530933762241390777221084271e-21) },
+ { SC_(-45.04344940185546875), SC_(-0.5955350514558786142053309726857087311429e-21) },
+ { SC_(-44.921146392822265625), SC_(-0.6748061149415831787816898069300771337011e-21) },
+ { SC_(-44.366191864013671875), SC_(-0.1189810693892140146725035626514689534384e-20) },
+ { SC_(-44.065486907958984375), SC_(-0.1617943260346693355541238773884456402131e-20) },
+ { SC_(-42.564510345458984375), SC_(-0.7508521784292956555049663090063210339236e-20) },
+ { SC_(-41.65602874755859375), SC_(-0.1902237115363634179207156972256911270036e-19) },
+ { SC_(-41.643665313720703125), SC_(-0.1926460223216498626564145997341831122167e-19) },
+ { SC_(-41.46872711181640625), SC_(-0.2304209021566303248261300380232548536606e-19) },
+ { SC_(-41.400691986083984375), SC_(-0.2470393735589908561748312777657558449938e-19) },
+ { SC_(-40.7796478271484375), SC_(-0.4665489090348590088892832574733877627252e-19) },
+ { SC_(-40.712055206298828125), SC_(-0.4999841334502210157248794528480866083337e-19) },
+ { SC_(-39.510929107666015625), SC_(-0.1711205236582734104034468188313993053133e-18) },
+ { SC_(-39.3155059814453125), SC_(-0.2090623264737543134488804288570287187466e-18) },
+ { SC_(-39.270557403564453125), SC_(-0.2189181301371969956898734656820283591514e-18) },
+ { SC_(-38.26819610595703125), SC_(-0.6117321854640996737992349893398315143733e-18) },
+ { SC_(-37.9152069091796875), SC_(-0.8785955246457078845733834215638759432102e-18) },
+ { SC_(-37.628902435302734375), SC_(-0.1178529325141498446240403317681089430123e-17) },
+ { SC_(-36.91025543212890625), SC_(-0.2463830668835851637664366500894910731401e-17) },
+ { SC_(-36.849811553955078125), SC_(-0.26215321484857982843437445475200392826e-17) },
+ { SC_(-36.434917449951171875), SC_(-0.4013604158054956102381643294616861600937e-17) },
+ { SC_(-36.22989654541015625), SC_(-0.4954070919347881798661389820765284703293e-17) },
+ { SC_(-36.151371002197265625), SC_(-0.5370115748619942846995056236200542722029e-17) },
+ { SC_(-36.0314483642578125), SC_(-0.607395305918129149416531788551080247298e-17) },
+ { SC_(-35.710315704345703125), SC_(-0.8447444058571321223562848170132272760574e-17) },
+ { SC_(-35.3704376220703125), SC_(-0.1197781809600591211033914907221945799548e-16) },
+ { SC_(-35.097530364990234375), SC_(-0.1585533750794002114788183801172421930711e-16) },
+ { SC_(-35.032459259033203125), SC_(-0.1695197166162417180772352306691754347417e-16) },
+ { SC_(-34.819854736328125), SC_(-0.2109244705480778173400075610148135850665e-16) },
+ { SC_(-34.751312255859375), SC_(-0.2263224452346398759852695717206224969765e-16) },
+ { SC_(-34.3925018310546875), SC_(-0.3272986079708841109973691119640729899672e-16) },
+ { SC_(-34.054973602294921875), SC_(-0.4631254422748072673716271830348503655722e-16) },
+ { SC_(-33.990711212158203125), SC_(-0.4947724616135280674694624593161655499417e-16) },
+ { SC_(-33.597461700439453125), SC_(-0.7414940191228214696888223680604909022873e-16) },
+ { SC_(-33.57765960693359375), SC_(-0.756757300887760805540854651208858682068e-16) },
+ { SC_(-33.2384185791015625), SC_(-0.107294068831277583736449351876748813907e-15) },
+ { SC_(-33.01177215576171875), SC_(-0.1354864993921957916546792647862260697468e-15) },
+ { SC_(-32.66255950927734375), SC_(-0.1941093737430240934530108031230878545462e-15) },
+ { SC_(-32.613666534423828125), SC_(-0.204132772872516639905834010047613657569e-15) },
+ { SC_(-32.159946441650390625), SC_(-0.3257412136825485821320656994134128511202e-15) },
+ { SC_(-32.11270904541015625), SC_(-0.3419855833378806479533913787891698469742e-15) },
+ { SC_(-31.7786407470703125), SC_(-0.4825063941260257502369727213840286372208e-15) },
+ { SC_(-31.169464111328125), SC_(-0.9041208285654553216232000743485732341508e-15) },
+ { SC_(-30.8748321533203125), SC_(-0.1225142484842369432707212786481995255584e-14) },
+ { SC_(-29.9968280792236328125), SC_(-0.3031462122352020681576569789998943438361e-14) },
+ { SC_(-29.7701435089111328125), SC_(-0.3830838750986454571203218948391228454923e-14) },
+ { SC_(-29.4440135955810546875), SC_(-0.5364965948171210691720366951042121092755e-14) },
+ { SC_(-29.2779827117919921875), SC_(-0.6368731799234152625106787139014919307596e-14) },
+ { SC_(-28.374523162841796875), SC_(-0.1620330664359454781224975910217836859007e-13) },
+ { SC_(-28.049365997314453125), SC_(-0.2268099668304392203466560599584613615573e-13) },
+ { SC_(-27.112514495849609375), SC_(-0.5981365620673597072402185048412869627752e-13) },
+ { SC_(-26.877002716064453125), SC_(-0.7633855292124147317951832423188187154848e-13) },
+ { SC_(-26.688323974609375), SC_(-0.9282018389970155561367076378137998442654e-13) },
+ { SC_(-26.1038379669189453125), SC_(-0.1701256502901405065500817349298173344176e-12) },
+ { SC_(-25.6862545013427734375), SC_(-0.2623518232936666267503379731452152909371e-12) },
+ { SC_(-25.3806858062744140625), SC_(-0.3602510949927852845512603205232949953593e-12) },
+ { SC_(-24.812534332275390625), SC_(-0.6498766587291270315525780335102007560594e-12) },
+ { SC_(-24.6828327178955078125), SC_(-0.7436238775678827344102896240858028195429e-12) },
+ { SC_(-23.609222412109375), SC_(-0.2270985496456140144232209569165697838238e-11) },
+ { SC_(-23.6052227020263671875), SC_(-0.2280458712546087199917148252497757574451e-11) },
+ { SC_(-23.212253570556640625), SC_(-0.3433205132674812376797712986415901957608e-11) },
+ { SC_(-22.38077545166015625), SC_(-0.8166398479320291904581660909155149328026e-11) },
+ { SC_(-22.17484283447265625), SC_(-0.1012326926235613489340088549168765113258e-10) },
+ { SC_(-22.028961181640625), SC_(-0.1178767187524946251357575066537303513673e-10) },
+ { SC_(-21.93953704833984375), SC_(-0.1294076260343429420577210021644224166493e-10) },
+ { SC_(-21.6740932464599609375), SC_(-0.1707311450429202319800292418877066733455e-10) },
+ { SC_(-21.4142551422119140625), SC_(-0.2239660671546579826122524352899183509804e-10) },
+ { SC_(-21.07315826416015625), SC_(-0.31989140498942794678382607273845334638e-10) },
+ { SC_(-20.9816799163818359375), SC_(-0.3519989253439093126729073010825611989496e-10) },
+ { SC_(-19.637241363525390625), SC_(-0.1438600620159160308817479271652146400346e-9) },
+ { SC_(-19.5384731292724609375), SC_(-0.1595610686595867225475531858139583145912e-9) },
+ { SC_(-19.3651943206787109375), SC_(-0.191371001872496098463574662692381338326e-9) },
+ { SC_(-18.90593719482421875), SC_(-0.30994031572235860524960759707349725788e-9) },
+ { SC_(-18.5577068328857421875), SC_(-0.4469016992114872271994190582757178616282e-9) },
+ { SC_(-17.3267612457275390625), SC_(-0.1633711779868352920783956469994975258958e-8) },
+ { SC_(-17.0185108184814453125), SC_(-0.2261792263181589044734075605962911166714e-8) },
+ { SC_(-16.78955841064453125), SC_(-0.2880510330832347302622379645025972070067e-8) },
+ { SC_(-16.1016254425048828125), SC_(-0.596294305040922450573339753675973857866e-8) },
+ { SC_(-15.76634502410888671875), SC_(-0.8505935450884228183463975203958420779551e-8) },
+ { SC_(-15.17945194244384765625), SC_(-0.1585549103627994633875481186154489551696e-7) },
+ { SC_(-15.11905670166015625), SC_(-0.1690611957957755240799660289020897272965e-7) },
+ { SC_(-13.43068981170654296875), SC_(-0.1022584513231563674448689979341186149526e-6) },
+ { SC_(-12.91650867462158203125), SC_(-0.1773761262859971060164899581342656864029e-6) },
+ { SC_(-12.575832366943359375), SC_(-0.255687274145036875029313903922532225666e-6) },
+ { SC_(-12.5575695037841796875), SC_(-0.2607537477649603990782583543108160730844e-6) },
+ { SC_(-11.91432666778564453125), SC_(-0.5210749882067263449474065372193218810935e-6) },
+ { SC_(-11.5017871856689453125), SC_(-0.8134101131665215640713025641914718088437e-6) },
+ { SC_(-11.395236968994140625), SC_(-0.91272723045117483696197441691774343853e-6) },
+ { SC_(-11.31745433807373046875), SC_(-0.9928537403218690168906979956279759632219e-6) },
+ { SC_(-11.19613552093505859375), SC_(-0.1132191013156966403507410220532861997662e-5) },
+ { SC_(-10.80203342437744140625), SC_(-0.1735824908097239014329439735951592857174e-5) },
+ { SC_(-10.257659912109375), SC_(-0.3138251672181765729003432862510751688375e-5) },
+ { SC_(-10.04949092864990234375), SC_(-0.3938286114079258742139622090231880229156e-5) },
+ { SC_(-8.15095806121826171875), SC_(-0.318435308755980338774238163595618232826e-4) },
+ { SC_(-8.02857112884521484375), SC_(-0.3648660193419818119566325214639226953631e-4) },
+ { SC_(-7.94337558746337890625), SC_(-0.4011732556063931089384872957189354164538e-4) },
+ { SC_(-7.397450923919677734375), SC_(-0.7385058450049667092943216183158760353767e-4) },
+ { SC_(-7.257321834564208984375), SC_(-0.8643407707350383467623358242945344658293e-4) },
+ { SC_(-6.85502719879150390625), SC_(-0.0001360233225396037741570065066289193367288) },
+ { SC_(-6.844749927520751953125), SC_(-0.0001376130697072288547351049358728336878462) },
+ { SC_(-6.56009578704833984375), SC_(-0.0001900005993505645179619309041336139866346) },
+ { SC_(-6.1387615203857421875), SC_(-0.0003071516884020679259927871076238348137779) },
+ { SC_(-6.02390766143798828125), SC_(-0.0003503420375785161458178656827678832632704) },
+ { SC_(-5.801117420196533203125), SC_(-0.0004525783807737199298571674150953465181097) },
+ { SC_(-5.5370635986328125), SC_(-0.0006139802161619321096305734620234110760157) },
+ { SC_(-5.039572238922119140625), SC_(-0.001096214284474157003983248247338271233381) },
+ { SC_(-4.60668182373046875), SC_(-0.00182646403775848961256251726233316613562) },
+ { SC_(-3.606259822845458984375), SC_(-0.006113092244150501182759223098480467043372) },
+ { SC_(-3.5703563690185546875), SC_(-0.006389725283693163413106729641577233598271) },
+ { SC_(-3.4518375396728515625), SC_(-0.007398826328864287868299387508442295495418) },
+ { SC_(-2.544478893280029296875), SC_(-0.02349896621151128636921912021857515353106) },
+ { SC_(-2.0270683765411376953125), SC_(-0.04710549033253332417891459635198730441661) },
+ { SC_(-1.74664974212646484375), SC_(-0.06982224065679792018629296005666623745408) },
+ { SC_(-1.73811972141265869140625), SC_(-0.07067947912193223977231133182821733641521) },
+ { SC_(-1.30539000034332275390625), SC_(-0.1343263664730872765772106823412265341571) },
+ { SC_(-0.9855175018310546875), SC_(-0.224789849918404400892777170618030689004) },
+ { SC_(-0.765717029571533203125), SC_(-0.3306204965891935899584519691640732251379) },
+ { SC_(-0.440425574779510498046875), SC_(-0.6391103091578925546980910928718730805524) },
+ { SC_(0.1690093176520690576580818742513656616211e-8), SC_(-19.62126650890371652595295530979865095775) },
+ { SC_(0.2114990849122477811761200428009033203125e-8), SC_(-19.39699968409704501608143944417902979644) },
+ { SC_(0.7099628440698779741069301962852478027344e-8), SC_(-18.18600771456330899529400229563313464444) },
+ { SC_(0.136718796284185373224318027496337890625e-7), SC_(-17.5307090168393574784921913178898385982) },
+ { SC_(0.1679341288252089725574478507041931152344e-7), SC_(-17.32506343605589965123585723923677953622) },
+ { SC_(0.586768322818898013792932033538818359375e-7), SC_(-16.07400514447660812399260402134573702052) },
+ { SC_(0.1140460881288163363933563232421875e-6), SC_(-15.40944740947244982567362347512857196391) },
+ { SC_(0.1455586016163579188287258148193359375e-6), SC_(-15.16547126071097956584839542123919818808) },
+ { SC_(0.38918477685001562349498271942138671875e-6), SC_(-14.18199554726483978034167263996676840479) },
+ { SC_(0.623782625552848912775516510009765625e-6), SC_(-13.71024759706876242023883975750942755915) },
+ { SC_(0.104669607026153244078159332275390625e-5), SC_(-13.1926552429023750061675349060182474459) },
+ { SC_(0.2951089072666945867240428924560546875e-5), SC_(-12.15611766257365306019177885908916324814) },
+ { SC_(0.4877083483734168112277984619140625e-5), SC_(-11.65374262154606280170522244483307812283) },
+ { SC_(0.9066634447663091123104095458984375e-5), SC_(-11.03368469534678539610212344978815972353) },
+ { SC_(0.2360353755648247897624969482421875e-4), SC_(-10.07687469212656789087127871765075953034) },
+ { SC_(0.60817910707555711269378662109375e-4), SC_(-9.130349744630693613333257072114132620679) },
+ { SC_(0.000119476739200763404369354248046875), SC_(-8.45505371136981670609925548596536076898) },
+ { SC_(0.0002437086659483611583709716796875), SC_(-7.742077649645587806911765144483417757553) },
+ { SC_(0.00047970912419259548187255859375), SC_(-7.064635197452612847888578571036009517596) },
+ { SC_(0.000960788573138415813446044921875), SC_(-6.369579496036524745416341422949188673429) },
+ { SC_(0.00113048148341476917266845703125), SC_(-6.206765179529281495180879269354516246991) },
+ { SC_(0.0033707791008055210113525390625), SC_(-5.112022087485498560545602301598797005544) },
+ { SC_(0.007697627879679203033447265625), SC_(-4.281914933633107042159905427812436577356) },
+ { SC_(0.0154774188995361328125), SC_(-3.575619984475573663157136373699830467351) },
+ { SC_(0.0305807329714298248291015625), SC_(-2.879353318645655463312010631432614581285) },
+ { SC_(0.0346831791102886199951171875), SC_(-2.749298553683104560876527875763233907) },
+ { SC_(0.09283597767353057861328125), SC_(-1.704669515752701009603290162653889150725) },
+ { SC_(0.16360938549041748046875), SC_(-1.062505460428854260642631229015752036299) },
+ { SC_(0.22476322948932647705078125), SC_(-0.6774408343494534677895972717532955476869) },
+ { SC_(0.37880718708038330078125), SC_(0.02441666034110163309027907713654447093795) },
+ { SC_(0.4500701129436492919921875), SC_(0.2850997481756199579143134375351571168498) },
+ { SC_(0.64851474761962890625), SC_(0.9150076958911796894005017309253737142643) },
+ { SC_(0.872161686420440673828125), SC_(1.546602463133721778520197846604188825167) },
+ { SC_(1.14188635349273681640625), SC_(2.282017713054334977384465917433486481954) },
+ { SC_(1.632969379425048828125), SC_(3.708022196201172208181850369303918535594) },
+ { SC_(1.91524684429168701171875), SC_(4.647560468822983657335378269935274858252) },
+ { SC_(2.0095670223236083984375), SC_(4.989664796356000084558864930434693816234) },
+ { SC_(2.061771869659423828125), SC_(5.186049765719297790031932942365080982976) },
+ { SC_(2.2234554290771484375), SC_(5.829455392510293560943895777670731465053) },
+ { SC_(3.391320705413818359375), SC_(12.93581868697820390884888173217329392277) },
+ { SC_(3.63258075714111328125), SC_(15.24140806012294293304307663205345607658) },
+ { SC_(3.874083042144775390625), SC_(17.9905574004211871523525648227022806255) },
+ { SC_(3.9647958278656005859375), SC_(19.15663585397278189871759282735891458668) },
+ { SC_(4.820046901702880859375), SC_(35.20942043634765130040913234375925316531) },
+ { SC_(4.839860439300537109375), SC_(35.7230453208944376116432625721437408942) },
+ { SC_(5.3509044647216796875), SC_(52.22020521530953938550833436236144368121) },
+ { SC_(5.40289783477783203125), SC_(54.31243085873860477879662300914122221072) },
+ { SC_(5.524809360504150390625), SC_(59.58055115475630923207417956895030150463) },
+ { SC_(5.60483837127685546875), SC_(63.3358979487388193548024404586957936219) },
+ { SC_(5.655277252197265625), SC_(65.83272358924251841359208893617229420928) },
+ { SC_(5.68704509735107421875), SC_(67.45933093217862071244254216727784222832) },
+ { SC_(6.457447052001953125), SC_(123.4702296391656695506519753815867966569) },
+ { SC_(8.01086139678955078125), SC_(444.4463643880764930507024304168884617662) },
+ { SC_(8.13864803314208984375), SC_(495.3101709262324392110450657667108532755) },
+ { SC_(8.28261566162109375), SC_(559.877848810511434189052045218975505771) },
+ { SC_(8.387729644775390625), SC_(612.4581525328497943613664298891423815016) },
+ { SC_(8.7326412200927734375), SC_(823.599445125107912460255698424832715259) },
+ { SC_(8.89971637725830078125), SC_(951.4942058135830875156789370724711488375) },
+ { SC_(9.21766567230224609375), SC_(1254.116584663167251806959698506292298412) },
+ { SC_(10.12511348724365234375), SC_(2783.932169928304521372514424737213979338) },
+ { SC_(10.15696430206298828125), SC_(2863.594026810931459246318070217071739042) },
+ { SC_(10.19370746612548828125), SC_(2958.379138016360344099887177971538047866) },
+ { SC_(10.19426441192626953125), SC_(2959.840173454726579315814039625058033301) },
+ { SC_(10.4695987701416015625), SC_(3780.023943205871070531887511694330145346) },
+ { SC_(10.48462009429931640625), SC_(3830.912593094958387366502243352980495425) },
+ { SC_(11.4095668792724609375), SC_(8773.100258415416694826189142702383416451) },
+ { SC_(11.7713222503662109375), SC_(12161.33897998932776399014133107556617305) },
+ { SC_(12.4603786468505859375), SC_(22729.88062534874311051752965324633319716) },
+ { SC_(12.57059955596923828125), SC_(25130.98763507991967701586529249834912407) },
+ { SC_(13.11301326751708984375), SC_(41251.55674345891428427980010586930742943) },
+ { SC_(13.7675037384033203125), SC_(75228.92803868848986122975671702709528184) },
+ { SC_(13.9052371978759765625), SC_(85400.1662872705358542582248024368153919) },
+ { SC_(14.3790493011474609375), SC_(132224.1847370047667808930523187693328728) },
+ { SC_(14.3794498443603515625), SC_(132273.1335203298191314772732228745972998) },
+ { SC_(15.21062469482421875), SC_(285682.5599867407331192380971834146771446) },
+ { SC_(15.39539432525634765625), SC_(339189.3027111421620231430296710100618608) },
+ { SC_(16.218013763427734375), SC_(729907.8872092321790234225457781718572718) },
+ { SC_(16.46546173095703125), SC_(919706.2433779946775124389017819374115907) },
+ { SC_(17.7649173736572265625), SC_(3108879.230687753723076805660417797528995) },
+ { SC_(18.23960113525390625), SC_(4858737.11952045506522062926385708137311) },
+ { SC_(18.4260616302490234375), SC_(5791494.941827564738522268163850830865472) },
+ { SC_(19.012279510498046875), SC_(10066932.15321395806087810278623274756541) },
+ { SC_(19.5595188140869140625), SC_(16883605.29408456961771231663180943490866) },
+ { SC_(20.37397003173828125), SC_(36508755.03776723110298560035691974974617) },
+ { SC_(20.835704803466796875), SC_(56575951.205609704704636343530031541064) },
+ { SC_(21.0944309234619140625), SC_(72332387.61173328702549768015323808037801) },
+ { SC_(21.9486980438232421875), SC_(162986366.6628523568138908187268486831292) },
+ { SC_(22.0607814788818359375), SC_(181342019.5679948669381801941271758479043) },
+ { SC_(22.1025676727294921875), SC_(188703736.1360623611074418193171278225304) },
+ { SC_(22.1314754486083984375), SC_(193971208.5963560967150675933295824773472) },
+ { SC_(22.6131420135498046875), SC_(306960930.053725589282112731051688195145) },
+ { SC_(22.9966068267822265625), SC_(442531056.6008858180372506333673348776581) },
+ { SC_(24.66086578369140625), SC_(2172219893.769243704085432245669500194727) },
+ { SC_(24.7471675872802734375), SC_(2359372003.318650065162623018506525353893) },
+ { SC_(24.7672977447509765625), SC_(2405300409.260463112199179923485274897776) },
+ { SC_(24.78017425537109375), SC_(2435147794.700459281996413056218750490234) },
+ { SC_(24.831577301025390625), SC_(2558042555.796109988805685451913765393216) },
+ { SC_(24.9495487213134765625), SC_(2864104017.927884220619778105722242253745) },
+ { SC_(25.8135986328125), SC_(6558254256.348564813851988511155677431286) },
+ { SC_(26.431148529052734375), SC_(11865100527.11967913666447024180657659641) },
+ { SC_(26.475616455078125), SC_(12382894374.47640125042051702147914482717) },
+ { SC_(26.8984375), SC_(18589906285.97139709477775311556771661975) },
+ { SC_(27.6351680755615234375), SC_(37758334087.66944768183509564350686344903) },
+ { SC_(27.6650714874267578125), SC_(38860718906.05169447986846371460827946851) },
+ { SC_(28.030132293701171875), SC_(55224345285.73183315482360024631420661039) },
+ { SC_(28.1774234771728515625), SC_(63640104036.92648906241078382739179720716) },
+ { SC_(28.771076202392578125), SC_(112755629580.1567007685754818929698465233) },
+ { SC_(29.2542781829833984375), SC_(179670592771.6875712257676967047727294651) },
+ { SC_(29.84228515625), SC_(316865442957.5609324434506204080682970604) },
+ { SC_(29.9650173187255859375), SC_(356720167837.8059821256007389978942158479) },
+ { SC_(30.60785675048828125), SC_(663668224048.0604218612696926330408705931) },
+ { SC_(30.651767730712890625), SC_(692430279700.9637790480873609641395475303) },
+ { SC_(31.47119903564453125), SC_(1528910755990.844994280853960653895757449) },
+ { SC_(31.744571685791015625), SC_(1991673673982.885396571525113897855042645) },
+ { SC_(32.2966766357421875), SC_(3398181411672.422126614376199484878709082) },
+ { SC_(32.49350738525390625), SC_(4111498043870.037918808870011846450846812) },
+ { SC_(32.639377593994140625), SC_(4735210781514.282917532917045901722362452) },
+ { SC_(32.9102020263671875), SC_(6155269461572.004859718923506587585651898) },
+ { SC_(33.015533447265625), SC_(6816439946334.964794674640603518324460658) },
+ { SC_(33.292026519775390625), SC_(8910343016135.140885096036479635757392035) },
+ { SC_(33.351413726806640625), SC_(9438137404966.366739297549042509103959184) },
+ { SC_(33.790431976318359375), SC_(14443862666819.21046289715593905528182097) },
+ { SC_(33.866344451904296875), SC_(15546956543575.59764405635272615745868862) },
+ { SC_(34.012500762939453125), SC_(17913865016638.12842343852721911357435736) },
+ { SC_(34.20684814453125), SC_(21629122436899.19912288305015863841369024) },
+ { SC_(35.130886077880859375), SC_(53015183051332.74153203541356793785468028) },
+ { SC_(35.24015045166015625), SC_(58947101093536.87223820738247177154640853) },
+ { SC_(35.67874908447265625), SC_(90241306347642.26414493832961429071231867) },
+ { SC_(35.70839691162109375), SC_(92877271582193.34830869185118876551411853) },
+ { SC_(37.142803192138671875), SC_(374322570986670.3197355366942794241040052) },
+ { SC_(37.295734405517578125), SC_(434336543053163.6784396158427358728630635) },
+ { SC_(37.337249755859375), SC_(452229579706005.3198360961998657288335433) },
+ { SC_(37.371295928955078125), SC_(467452657592235.4557742032788566543129601) },
+ { SC_(37.47199249267578125), SC_(515545372809301.8307905963516087180550462) },
+ { SC_(37.700786590576171875), SC_(644036634222999.9230954385992851671021201) },
+ { SC_(37.77214813232421875), SC_(690331189582367.0242854882027008973993238) },
+ { SC_(37.7916412353515625), SC_(703546341004539.6440063503740195080075798) },
+ { SC_(38.007534027099609375), SC_(867977923035967.2387116719471097584367879) },
+ { SC_(38.030849456787109375), SC_(887892682109427.8216437485269424411635003) },
+ { SC_(38.232257843017578125), SC_(1080118946394155.640540236541909448482468) },
+ { SC_(38.828411102294921875), SC_(1929604067639860.142261254221961073466133) },
+ { SC_(38.8993072509765625), SC_(2067490868399521.448714428128264044795958) },
+ { SC_(39.070796966552734375), SC_(2443188466949830.286454990607186034125934) },
+ { SC_(39.57132720947265625), SC_(3977896133471904.309030036870273146195475) },
+ { SC_(39.619602203369140625), SC_(4169413741026091.435196275993524526107061) },
+ { SC_(39.903354644775390625), SC_(5496968390256242.123534199929484292088181) },
+ { SC_(40.292484283447265625), SC_(8031404394724528.542925073441994364789595) },
+ { SC_(40.337055206298828125), SC_(8387940643235804.328777240761144315540951) },
+ { SC_(40.40936279296875), SC_(9000350988468569.862069911874242513693811) },
+ { SC_(40.486545562744140625), SC_(9703503769049494.903270793598303590559637) },
+ { SC_(40.58036041259765625), SC_(10632608216710854.46031088764839485644682) },
+ { SC_(40.839870452880859375), SC_(13693091147862452.41874314869980290347395) },
+ { SC_(41.391147613525390625), SC_(23439146134369609.98587928723498036090512) },
+ { SC_(41.850940704345703125), SC_(36703294479064600.3832020868783140575162) },
+ { SC_(42.4788970947265625), SC_(67731301681578920.49039567895447521625383) },
+ { SC_(43.331455230712890625), SC_(155669602636333053.4786944018929963653098) },
+ { SC_(43.404224395751953125), SC_(167132241928819035.0710856728527709620153) },
+ { SC_(43.8334197998046875), SC_(254143262583491699.1980601913565298527589) },
+ { SC_(43.9896087646484375), SC_(296024739641759806.6894125116837989457761) },
+ { SC_(44.14626312255859375), SC_(344969417880314064.475422911828132537173) },
+ { SC_(44.89459991455078125), SC_(716642754835341877.2986625908564001827266) },
+ { SC_(45.55641937255859375), SC_(1368424686960668756.908114295234155840218) },
+ { SC_(45.622142791748046875), SC_(1459228779377576203.085179194127347039233) },
+ { SC_(45.96717071533203125), SC_(2044647179130784910.065675826506375503182) },
+ { SC_(46.443317413330078125), SC_(3257069147351952822.406316784082908654148) },
+ { SC_(46.62737274169921875), SC_(3899455212627022627.757193164190203742303) },
+ { SC_(47.999355316162109375), SC_(14926880987843627550.42423425846631056877) },
+ { SC_(49.637111663818359375), SC_(74190413685387077283.04485547837473387867) },
+ { SC_(49.81011962890625), SC_(87890252389194795154.44680392696975525721) },
+ { SC_(50.171234130859375), SC_(125189140534515913902.5259763391614688736) },
+ { SC_(50.383525848388671875), SC_(154131408309808097686.7891755712917358669) },
+ { SC_(50.46710968017578125), SC_(167284637436075321503.8911970981891929543) },
+ { SC_(50.471343994140625), SC_(167980083475835196141.8258748379299905807) },
+ { SC_(50.7309112548828125), SC_(216626578190231872367.3411388285205467896) },
+ { SC_(50.891300201416015625), SC_(253494280682248147653.5031137670581769109) },
+ { SC_(51.29622650146484375), SC_(376974396494639297221.5916323256511307768) },
+ { SC_(52.0242156982421875), SC_(769533307813336085464.2719431240758770955) },
+ { SC_(52.21900177001953125), SC_(931463445412117009569.997805462678793371) },
+ { SC_(52.4724273681640625), SC_(1194213241460405145426.923208285103882948) },
+ { SC_(52.739253997802734375), SC_(1551371845141512428417.754279321277408047) },
+ { SC_(52.741176605224609375), SC_(1554299590225018307998.020329038078465699) },
+ { SC_(53.40814208984375), SC_(2989698064310689472929.903511572929914131) },
+ { SC_(54.5244293212890625), SC_(8938496865444328223663.418183347060066178) },
+ { SC_(55.05193328857421875), SC_(15000102942849475726352.24634597020497441) },
+ { SC_(55.28836822509765625), SC_(18918195096476420185424.79716369248547301) },
+ { SC_(55.32575225830078125), SC_(19625295432594734639694.04077946718413513) },
+ { SC_(55.522052764892578125), SC_(23795829974930383969706.74411638885122467) },
+ { SC_(55.544170379638671875), SC_(24318128427099146738245.91342763630756375) },
+ { SC_(55.57183837890625), SC_(24987672558936599326235.83821092811506408) },
+ { SC_(55.808788299560546875), SC_(31531809737095643566486.71781327383155317) },
+ { SC_(56.137737274169921875), SC_(43552095758129714470140.32600682101217921) },
+ { SC_(56.146297454833984375), SC_(43919686479374955504528.98148221455056972) },
+ { SC_(56.446441650390625), SC_(58972731376406161145451.87899710728216492) },
+ { SC_(56.5754547119140625), SC_(66937712106290641632239.78290159424299056) },
+ { SC_(56.765209197998046875), SC_(80648977731394081623112.8051042421861491) },
+ { SC_(57.47022247314453125), SC_(161184177439288421438465.5484877575634735) },
+ { SC_(57.791820526123046875), SC_(221066403776152634685122.7495432888528563) },
+ { SC_(57.92206573486328125), SC_(251241864908534403966454.9934420615252414) },
+ { SC_(58.059658050537109375), SC_(287606300821348197823323.3455461108172774) },
+ { SC_(58.620555877685546875), SC_(499047878771232722946891.2015515727402121) },
+ { SC_(58.721736907958984375), SC_(551216418687710616233343.712210604071037) },
+ { SC_(58.73737335205078125), SC_(559751492456295202734141.0778013286664605) },
+ { SC_(59.21694183349609375), SC_(896756596017748427943431.7704197691518272) },
+ { SC_(59.3475341796875), SC_(1019568455497745443792447.961272554810421) },
+ { SC_(59.574817657470703125), SC_(1274778904679711262832523.146694528881756) },
+ { SC_(59.610748291015625), SC_(1320604762679106118330023.701104305685706) },
+ { SC_(114.701263427734375), SC_(0.5733168299717727201285049464972941664115e48) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/expinti_data_double.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expinti_data_double.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,105 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 100> expinti_data_double = {{
+ { SC_(102.87009429931640625), SC_(4654899469800805764672952463660041015404000.0) },
+ { SC_(119.09970855712890625), SC_(0.4488787864805080932333174640972770490538e50) },
+ { SC_(120.6676483154296875), SC_(0.2124946028694675872596376925084081671409e51) },
+ { SC_(121.42700958251953125), SC_(0.4512183727732527195281492082353068494556e51) },
+ { SC_(121.86475372314453125), SC_(0.6964992423126020624418128987604728390362e51) },
+ { SC_(127.7028350830078125), SC_(0.2279700329256221183052489611729485531343e54) },
+ { SC_(130.7298583984375), SC_(0.4594543786954020597612997101862332382815e55) },
+ { SC_(158.2790679931640625), SC_(0.3491987572497265283430495639424245161776e67) },
+ { SC_(158.5242462158203125), SC_(0.4455287145500353654763437019012245914284e67) },
+ { SC_(165.91705322265625), SC_(0.6912119996498744776551301234337228896794e70) },
+ { SC_(167.4787139892578125), SC_(0.326391223691365039787070460177842703726e71) },
+ { SC_(175.1096649169921875), SC_(0.6432100430305357924660611042288806557127e74) },
+ { SC_(175.5379791259765625), SC_(0.984691477953540716615977148580851612426e74) },
+ { SC_(176.1920928955078125), SC_(0.1886920114953374654886114337300975535295e75) },
+ { SC_(181.2862091064453125), SC_(0.2989862847852351506449654279623175818276e77) },
+ { SC_(185.131805419921875), SC_(0.1369637565311070319468869408302175020227e79) },
+ { SC_(189.4683837890625), SC_(0.1022933561959569428116028573369712959689e81) },
+ { SC_(194.5678558349609375), SC_(0.1632768521286416542097135533095455177471e83) },
+ { SC_(202.712005615234375), SC_(0.5394913535503452815798780947886876429896e86) },
+ { SC_(204.3191070556640625), SC_(0.266988871270822922902591264774139389463e87) },
+ { SC_(212.123565673828125), SC_(0.6303288415421386740517895306336947600047e90) },
+ { SC_(213.0291748046875), SC_(0.1552420011212288898683659113258420389942e91) },
+ { SC_(226.1254425048828125), SC_(0.7122229519086770010493744714810456037758e96) },
+ { SC_(227.15460205078125), SC_(0.1984236104811331566958586895971472749551e97) },
+ { SC_(232.62042236328125), SC_(0.4581388566249763831986535890804413533361e99) },
+ { SC_(266.153778076171875), SC_(0.1464284823232428349504366357670506664606e114) },
+ { SC_(267.09893798828125), SC_(0.3754550321478881080837201630749628066915e114) },
+ { SC_(278.2176513671875), SC_(0.2429828209076613873458952686349499170143e119) },
+ { SC_(281.147857666015625), SC_(0.4503824419536589690469228449149704329645e120) },
+ { SC_(284.900238037109375), SC_(0.1894265905804735697510091486272554808834e122) },
+ { SC_(289.930267333984375), SC_(0.2846606517420129071955201585454115986331e124) },
+ { SC_(290.259674072265625), SC_(0.39526840660281511332137740213452297475e124) },
+ { SC_(316.776397705078125), SC_(0.1188136226285138671097715211294885613261e136) },
+ { SC_(328.93505859375), SC_(0.2182212639027467806212909144237589962574e141) },
+ { SC_(335.336212158203125), SC_(0.1289694992441169816466607238785447573694e144) },
+ { SC_(339.243133544921875), SC_(0.6341554830794841647273380024739218173519e145) },
+ { SC_(345.23870849609375), SC_(0.2502707079015256413360729708739472586996e148) },
+ { SC_(353.0567626953125), SC_(0.6081275380494346069537610386054436827084e151) },
+ { SC_(353.252593994140625), SC_(0.7392674930634857604064928936832561047528e151) },
+ { SC_(363.246612548828125), SC_(0.1573977048026212180539326023109084395454e156) },
+ { SC_(367.351715087890625), SC_(0.9439039533362185936065067145525348987048e157) },
+ { SC_(374.793487548828125), SC_(0.1578028673470190623900612461257603840414e161) },
+ { SC_(384.855224609375), SC_(0.3600276754143745485244589154691966465381e165) },
+ { SC_(391.225372314453125), SC_(0.2068748707894393683497591012649949622203e168) },
+ { SC_(392.541351318359375), SC_(0.7687196958833528385591120302020777152611e168) },
+ { SC_(393.858642578125), SC_(0.2860234483451614302230860963468500787004e169) },
+ { SC_(394.353424072265625), SC_(0.468528356426515701193951809153160635264e169) },
+ { SC_(402.1976318359375), SC_(0.1171808089560200191770907797339877928134e173) },
+ { SC_(428.12890625), SC_(0.2011244899732843068179501387740539518665e184) },
+ { SC_(428.332366943359375), SC_(0.2463882456108220623335396182335238049978e184) },
+ { SC_(479.415557861328125), SC_(0.3370760755402075136867387081832481381884e206) },
+ { SC_(483.858001708984375), SC_(0.2838197444669518328148323406487783086905e208) },
+ { SC_(487.787811279296875), SC_(0.143290343327313200442365090263240144269e210) },
+ { SC_(493.2867431640625), SC_(0.3463332679043421510270870135017998699304e212) },
+ { SC_(493.44439697265625), SC_(0.4053436082306786060312645931633934496659e212) },
+ { SC_(498.163299560546875), SC_(0.4498573166263689115195724188943233736555e214) },
+ { SC_(507.2410888671875), SC_(0.3869458554978062751502315639584587941431e218) },
+ { SC_(508.815704345703125), SC_(0.1862722954440262359736876867660438647055e219) },
+ { SC_(516.89715576171875), SC_(0.5929539458008759668618166365480530357574e222) },
+ { SC_(523.627685546875), SC_(0.490256757720855085525310071865504294369e225) },
+ { SC_(525.618896484375), SC_(0.357720625670250295507690509025554576924e226) },
+ { SC_(535.50335693359375), SC_(0.6889759236100754327282718895680993386846e230) },
+ { SC_(544.38836669921875), SC_(0.4895023821578599017471211778436380380851e234) },
+ { SC_(545.87945556640625), SC_(0.2168384886985358923425414610198222504761e235) },
+ { SC_(552.81201171875), SC_(0.2194908907077200735474576859355376276996e238) },
+ { SC_(554.64410400390625), SC_(0.1366609803311340085634888162278346794975e239) },
+ { SC_(558.25), SC_(0.4998570812776135939052842271424771438308e240) },
+ { SC_(559.31011962890625), SC_(0.1440205702121135197609975402434930330836e241) },
+ { SC_(575.32440185546875), SC_(0.1261993396536182845635950097162949293812e248) },
+ { SC_(576.385009765625), SC_(0.3638077665497671657713912984804072342658e248) },
+ { SC_(577.11993408203125), SC_(0.7576893430265850749719869973928888261581e248) },
+ { SC_(578.367919921875), SC_(0.2633569534665923102825640510310718246757e249) },
+ { SC_(578.7572021484375), SC_(0.3884321712516615414225859937380556292439e249) },
+ { SC_(578.863525390625), SC_(0.4319275188177097667628494729863878264458e249) },
+ { SC_(580.16827392578125), SC_(0.1588826507174073600934477712203698999436e250) },
+ { SC_(584.51861572265625), SC_(0.1222238450958130847374075209904594309916e252) },
+ { SC_(588.834228515625), SC_(0.9082441109422063046992881078366160444507e253) },
+ { SC_(593.1419677734375), SC_(0.6696671407396550532370011475709646515434e255) },
+ { SC_(594.07470703125), SC_(0.1699256492240263485176709898640795327905e256) },
+ { SC_(601.005126953125), SC_(0.1718131816979918101950016705556617558037e259) },
+ { SC_(609.47760009765625), SC_(0.8100561951389239245138612767305143306984e262) },
+ { SC_(623.457275390625), SC_(0.9331382282084315894480060552801462030494e268) },
+ { SC_(627.05841064453125), SC_(0.3399333946028564608617370823657507561735e270) },
+ { SC_(643.47515869140625), SC_(0.4465348678487959522963305527404292744891e277) },
+ { SC_(648.0255126953125), SC_(0.4197434532469066342906967841224435165556e279) },
+ { SC_(649.44134521484375), SC_(0.1725531471297453891677758589012301168234e280) },
+ { SC_(652.52484130859375), SC_(0.3749798510829081836112102781820076672405e281) },
+ { SC_(660.39593505859375), SC_(0.970879214993044630543023552485120399286e284) },
+ { SC_(670.13323974609375), SC_(0.1620527966055446945578211401048814814567e289) },
+ { SC_(674.3001708984375), SC_(0.1039047983324197139199069164254061321298e291) },
+ { SC_(674.50408935546875), SC_(0.1273692969308263916056410711840867769624e291) },
+ { SC_(675.69549560546875), SC_(0.418522040928659237731709573433592942673e291) },
+ { SC_(678.93310546875), SC_(0.1061000019714235158838961951634579077223e293) },
+ { SC_(680.616943359375), SC_(0.5700586451271579571730049808881026675533e293) },
+ { SC_(681.3206787109375), SC_(0.1151061266572356641000638910442083400077e294) },
+ { SC_(682.35565185546875), SC_(0.3235350762276795224692901027817771950219e294) },
+ { SC_(688.66583251953125), SC_(0.1763576946849989630024915426356908693227e297) },
+ { SC_(695.728759765625), SC_(0.2038669812824068591196373014464478923157e300) },
+ { SC_(696.44110107421875), SC_(0.4152099129072985415211360691072606219165e300) },
+ { SC_(697.87677001953125), SC_(0.174130632289273126035703061440352012941e301) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/expinti_data_long.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/expinti_data_long.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,105 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 100> expinti_data_long = {{
+ { SC_(850.51361083984375), SC_(0.27809823533792637952061836944224670902e367) },
+ { SC_(1136.15478515625), SC_(0.2348005093803919554840423708437417479629e491) },
+ { SC_(1163.7506103515625), SC_(0.2213003663371766101124862788858798209669e503) },
+ { SC_(1177.1153564453125), SC_(0.1393972678294381321914138715599921955926e509) },
+ { SC_(1184.819580078125), SC_(0.3071287487721510514525001455932125917587e512) },
+ { SC_(1287.56982421875), SC_(0.1188602460855659524267859866086060607259e557) },
+ { SC_(1340.845458984375), SC_(0.1565775363947514543544059577542317926535e580) },
+ { SC_(1825.7115478515625), SC_(0.4317742008433835384506876651615126974963e790) },
+ { SC_(1830.026611328125), SC_(0.3222842941582302836955227140289123449271e792) },
+ { SC_(1960.14013671875), SC_(0.9682326984764871443713708725009118516667e848) },
+ { SC_(1987.625244140625), SC_(0.8252010696701409604448632584198026007861e860) },
+ { SC_(2121.929931640625), SC_(0.1644122120004322809189630355750827856571e919) },
+ { SC_(2129.468505859375), SC_(0.3078607683726664945534741803554577395453e922) },
+ { SC_(2140.980712890625), SC_(0.3059846959258757487477467065245238848267e927) },
+ { SC_(2230.63720703125), SC_(0.2542119875349999176355379625196504093816e966) },
+ { SC_(2298.31982421875), SC_(0.6114992506410978259391244796777268178912e995) },
+ { SC_(2374.6435546875), SC_(0.830188785884719427191192371811470577614e1028) },
+ { SC_(2464.39404296875), SC_(0.7606769935221277835214875514322852420595e1067) },
+ { SC_(2607.7314453125), SC_(0.1280208651710915937668281576410585595382e1130) },
+ { SC_(2636.01611328125), SC_(0.2434831958141217397564034109022725860803e1142) },
+ { SC_(2773.374755859375), SC_(0.1043520151961041658604037267493948608009e1202) },
+ { SC_(2789.313720703125), SC_(0.8673924117610746105433718703338830121224e1208) },
+ { SC_(3019.807861328125), SC_(0.1014040167380916647540036248296427121987e1309) },
+ { SC_(3037.9208984375), SC_(0.7410529098571197987076032731629101798719e1316) },
+ { SC_(3134.11962890625), SC_(0.4314033621612001130684487653920208910505e1358) },
+ { SC_(3724.306640625), SC_(0.7497114876830077572608496589486939616531e1614) },
+ { SC_(3740.94140625), SC_(0.1251252881668710692336811165448253472824e1622) },
+ { SC_(3936.630859375), SC_(0.1153573278500689879003545458843117005296e1707) },
+ { SC_(3988.202392578125), SC_(0.2841996613630984591213735017628358662044e1729) },
+ { SC_(4054.243896484375), SC_(0.1342609828695717510201743140807115713194e1758) },
+ { SC_(4142.7724609375), SC_(0.3681572481442059810190451103963992112454e1796) },
+ { SC_(4148.5703125), SC_(0.121171581000799833633456183949328398278e1799) },
+ { SC_(4615.2646484375), SC_(0.5246465971256288730180022026676777543742e2001) },
+ { SC_(4829.25732421875), SC_(0.4325309705481133900503845562540831591495e2094) },
+ { SC_(4941.91748046875), SC_(0.357836144515945182929963672150715372631e2143) },
+ { SC_(5010.6787109375), SC_(0.2572200946506254896455407953607460924114e2173) },
+ { SC_(5116.201171875), SC_(0.1694628673308089036903938764581354437254e2219) },
+ { SC_(5253.798828125), SC_(0.9450381302497917822730309088983075713142e2278) },
+ { SC_(5257.24560546875), SC_(0.2965383255217071801210759810882002854358e2280) },
+ { SC_(5433.140625), SC_(0.7047285278346101208658057139925849862554e2356) },
+ { SC_(5505.39013671875), SC_(0.1659005813598457669810325988575538660018e2388) },
+ { SC_(5636.36572265625), SC_(0.123483589653905750755240300669656546009e2445) },
+ { SC_(5813.45166015625), SC_(0.9674253782674757458616517516767150594778e2521) },
+ { SC_(5925.56689453125), SC_(0.465959154348727474260042419560482730271e2570) },
+ { SC_(5948.7275390625), SC_(0.5311210417035456841299141336297429192824e2580) },
+ { SC_(5971.912109375), SC_(0.6200616140526457518581489641316743841867e2590) },
+ { SC_(5980.62060546875), SC_(0.3748467021497618776363280710356423632891e2594) },
+ { SC_(6118.67822265625), SC_(0.3323548513925888198554192040808784242521e2654) },
+ { SC_(6575.06884765625), SC_(0.4992113296799401332170302610613651749985e2852) },
+ { SC_(6578.6494140625), SC_(0.1790887030753559149862073840512717626631e2854) },
+ { SC_(7477.7138671875), SC_(0.453063439997264160754767400139975001266e3244) },
+ { SC_(7555.90087890625), SC_(0.4053486713272468063037722021443381630624e3278) },
+ { SC_(7625.0654296875), SC_(0.4381811161168660111987981480837499404122e3308) },
+ { SC_(7721.84619140625), SC_(0.4650783679722625981733974952858145989039e3350) },
+ { SC_(7724.62158203125), SC_(0.7459451366176179637703427587587394395181e3351) },
+ { SC_(7807.67431640625), SC_(0.8657770283993666196881334661703905178512e3387) },
+ { SC_(7967.44287109375), SC_(0.2066376033881102222399296966624611161435e3457) },
+ { SC_(7995.15673828125), SC_(0.2237075980936927860568603957470382881289e3469) },
+ { SC_(8137.39013671875), SC_(0.1297781899952190216559462644235208641515e3531) },
+ { SC_(8255.8466796875), SC_(0.3564079826420461256934314917221024535487e3582) },
+ { SC_(8290.892578125), SC_(0.589315461709375088751076327530039211034e3597) },
+ { SC_(8464.859375), SC_(0.2061333287437003593390952585665220300663e3673) },
+ { SC_(8621.2353515625), SC_(0.1657376800782722410304770650822997699241e3741) },
+ { SC_(8647.478515625), SC_(0.4124415895621698868851529362785050121075e3752) },
+ { SC_(8769.4912109375), SC_(0.3969329427154640956668041611282529236515e3805) },
+ { SC_(8801.736328125), SC_(0.3990244136134911987900607765723496356083e3819) },
+ { SC_(8865.2001953125), SC_(0.1445061203725423928848837944828607819372e3847) },
+ { SC_(8883.857421875), SC_(0.1826853197788422299249942076987355766608e3855) },
+ { SC_(9165.708984375), SC_(0.4515605271244922649573310924321143987289e3977) },
+ { SC_(9184.3759765625), SC_(0.5765062048528042160801422542318948604069e3985) },
+ { SC_(9197.3115234375), SC_(0.238797240985925516325017189407703419842e3991) },
+ { SC_(9219.275390625), SC_(0.8237200206643906423722827693221290304098e4000) },
+ { SC_(9226.1259765625), SC_(0.7773715903123152522709440763956473274495e4003) },
+ { SC_(9227.998046875), SC_(0.5053244921662419600389850256151955782088e4004) },
+ { SC_(9250.9619140625), SC_(0.4737744487728344772209960864307761252156e4014) },
+ { SC_(9327.52734375), SC_(0.839334799085535932104716295994462739704e4047) },
+ { SC_(9403.482421875), SC_(0.8077630243130543392122877176716464625234e4080) },
+ { SC_(9479.298828125), SC_(0.6767729229089682203216741035877315937008e4113) },
+ { SC_(9495.71484375), SC_(0.9100734532106930249198078682510663631931e4120) },
+ { SC_(9617.6904296875), SC_(0.8449998576157010058160975375848278518588e4173) },
+ { SC_(9766.8056640625), SC_(0.4787377238207901984222005262457964596487e4238) },
+ { SC_(10012.8486328125), SC_(0.3344992068689187467671400212667671782847e4345) },
+ { SC_(10076.2275390625), SC_(0.11136885577784012567387295792753442916e4373) },
+ { SC_(10365.1630859375), SC_(0.3293047656065511164747161575530322956908e4498) },
+ { SC_(10445.2490234375), SC_(0.1973039455254220882950372775604517375325e4533) },
+ { SC_(10470.1669921875), SC_(0.1305681315488859113163146324068469579781e4544) },
+ { SC_(10524.4375), SC_(0.4819186831856610440931487751621965500502e4567) },
+ { SC_(10662.96875), SC_(0.6928694779347995167937115115212504365928e4627) },
+ { SC_(10834.3447265625), SC_(0.1825438577646410483210158166935577469757e4702) },
+ { SC_(10907.68359375), SC_(0.1285589751375311174300431256570906461288e4734) },
+ { SC_(10911.2724609375), SC_(0.4651411212288175929735371788790669615768e4735) },
+ { SC_(10932.240234375), SC_(0.5928423151111867954833915596799084326543e4744) },
+ { SC_(10989.22265625), SC_(0.3294826635257870726228138790579703502685e4769) },
+ { SC_(11018.8583984375), SC_(0.2439507354669304579499512829726839932215e4782) },
+ { SC_(11031.244140625), SC_(0.5832754259182122887134092147181083406225e4787) },
+ { SC_(11049.4599609375), SC_(0.474446561495313567373051850934536721701e4795) },
+ { SC_(11160.5185546875), SC_(0.8016374991446073482862383560024456346995e4843) },
+ { SC_(11284.826171875), SC_(0.7678551455742636373830825128178952778616e4897) },
+ { SC_(11297.36328125), SC_(0.2135966594384904628860134271820875984946e4903) },
+ { SC_(11322.6318359375), SC_(0.2007326162507306591356341202787380118764e4914) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/test_expint.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/test_expint.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,279 @@
+// (C) Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/concepts/real_concept.hpp>
+#include <boost/math/special_functions/expint.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/math/tools/stats.hpp>
+#include <boost/math/tools/test.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/array.hpp>
+#include "functor.hpp"
+
+#include "handle_test_result.hpp"
+
+//
+// DESCRIPTION:
+// ~~~~~~~~~~~~
+//
+// This file tests the expint functions. There are two sets of tests:
+// 1) Sanity checks: comparison to test values created with the
+// online calculator at functions.wolfram.com
+// 2) Accuracy tests use values generated with NTL::RR at
+// 1000-bit precision and our generic versions of these functions.
+//
+// Note that when this file is first run on a new platform many of
+// these tests will fail: the default accuracy is 1 epsilon which
+// is too tight for most platforms. In this situation you will
+// need to cast a human eye over the error rates reported and make
+// a judgement as to whether they are acceptable. Either way please
+// report the results to the Boost mailing list. Acceptable rates of
+// error are marked up below as a series of regular expressions that
+// identify the compiler/stdlib/platform/data-type/test-data/test-function
+// along with the maximum expected peek and RMS mean errors for that
+// test.
+//
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ const char* largest_type;
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ if(boost::math::policies::digits<double, boost::math::policies::policy<> >() == boost::math::policies::digits<long double, boost::math::policies::policy<> >())
+ {
+ largest_type = "(long\\s+)?double";
+ }
+ else
+ {
+ largest_type = "long double";
+ }
+#else
+ largest_type = "(long\\s+)?double";
+#endif
+
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float|double|long double", // test type(s)
+ ".*E1.*", // test data group
+ ".*", 2, 1); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float|double|long double", // test type(s)
+ ".*Ei.*", // test data group
+ ".*", 6, 3); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "real_concept", // test type(s)
+ ".*Ei.*", // test data group
+ ".*", 50, 20); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 20, 5); // test function
+
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+T expint_wrapper(T n, T z)
+{
+ return boost::math::expint(
+ boost::math::tools::real_cast<unsigned>(n), z);
+}
+
+template <class T>
+void do_test_expint(const T& data, const char* type_name, const char* test_name)
+{
+ //
+ // test En(T) against data:
+ //
+ using namespace std;
+ typedef typename T::value_type row_type;
+ typedef typename row_type::value_type value_type;
+
+ std::cout << test_name << " with type " << type_name << std::endl;
+
+ typedef value_type (*pg)(value_type, value_type);
+ pg funcp = expint_wrapper;
+
+ boost::math::tools::test_result<value_type> result;
+ //
+ // test expint against data:
+ //
+ result = boost::math::tools::test(
+ data,
+ bind_func(funcp, 0, 1),
+ extract_result(2));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::expint", test_name);
+
+ std::cout << std::endl;
+}
+
+template <class T>
+void do_test_expint_Ei(const T& data, const char* type_name, const char* test_name)
+{
+ //
+ // test Ei(T) against data:
+ //
+ using namespace std;
+ typedef typename T::value_type row_type;
+ typedef typename row_type::value_type value_type;
+
+ std::cout << test_name << " with type " << type_name << std::endl;
+
+ typedef value_type (*pg)(value_type);
+ pg funcp = boost::math::expint;
+
+ boost::math::tools::test_result<value_type> result;
+ //
+ // test expint against data:
+ //
+ result = boost::math::tools::test(
+ data,
+ bind_func(funcp, 0),
+ extract_result(1));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::expint", test_name);
+}
+
+template <class T>
+void test_expint(T, const char* name)
+{
+ //
+ // The actual test data is rather verbose, so it's in a separate file
+ //
+#include "expint_data.ipp"
+ do_test_expint(expint_data, name, "Exponential Integral En");
+#include "expint_small_data.ipp"
+ do_test_expint(expint_small_data, name, "Exponential Integral En: small z values");
+#include "expint_1_data.ipp"
+ do_test_expint(expint_1_data, name, "Exponential Integral E1");
+#include "expinti_data.ipp"
+ do_test_expint_Ei(expinti_data, name, "Exponential Integral Ei");
+
+ if(boost::math::tools::log_max_value<T>() > 100)
+ {
+#include "expinti_data_double.ipp"
+ do_test_expint_Ei(expinti_data_double, name, "Exponential Integral Ei: double exponent range");
+ }
+#if defined(LDBL_MAX_10_EXP) && (LDBL_MAX_10_EXP > 2000)
+ if(boost::math::tools::log_max_value<T>() > 1000)
+ {
+#include "expinti_data_long.ipp"
+ do_test_expint_Ei(expinti_data_long, name, "Exponential Integral Ei: long exponent range");
+ }
+#endif
+}
+
+template <class T>
+void test_spots(T, const char* t)
+{
+ std::cout << "Testing basic sanity checks for type " << t << std::endl;
+ //
+ // Basic sanity checks, tolerance is 100 epsilon
+ // expressed as a percentage:
+ //
+ T tolerance = boost::math::tools::epsilon<T>() * 100 *
+ (boost::is_floating_point<T>::value ? 500 : 500);
+ //
+ // En:
+ //
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(1)/1024), static_cast<T>(1023.0004881223430781283448725609773366468629307172L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(0.125F)), static_cast<T>(7.0599752206767632229191371458324058897760385999252L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(0.5F)), static_cast<T>(1.2130613194252668472075990699823609068838362709744L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(1.5F)), static_cast<T>(0.14875344009895321928885364717600834756144775290739L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(4.5F)), static_cast<T>(0.0024686658973871792213651409526512283936753927790603L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(0, static_cast<T>(50.0F)), static_cast<T>(3.8574996959278355660346856330540251495056653024605e-24L), tolerance);
+
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(1)/1024), static_cast<T>(6.3552324648310718026144555193580322129376300855378L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(0.125F)), static_cast<T>(1.6234256405841687914563069246244088736331060573721L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(0.5F)), static_cast<T>(0.55977359477616081174679593931508523522684689031635L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(1.5F)), static_cast<T>(0.10001958240663265190190933991166697826173000614035L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(4.5F)), static_cast<T>(0.0020734007547146144328855938695797884889319725701443L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(1, static_cast<T>(50.0F)), static_cast<T>(3.7832640295504590186989678540212857803028931862511e-24L), tolerance);
+
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(1)/1024), static_cast<T>(0.99281763247803906867747111039220635198625517639812L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(0.125F)), static_cast<T>(0.67956869751157430393285377765099962701786656781914L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(0.5F)), static_cast<T>(0.32664386232455301773040156533363783582849469032901L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(1.5F)), static_cast<T>(0.073100786538480851080416460896512053949576620150553L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(4.5F)), static_cast<T>(0.0017786931420265415481579618738214795713453909401220L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(2, static_cast<T>(50.0F)), static_cast<T>(3.7117833188688273667858889516369684601386058104706e-24L), tolerance);
+
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(1)/1024), static_cast<T>(0.24967471743034509414923673526350536071348482068601L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(0.125F)), static_cast<T>(0.21195078838966585733668853784460504343264488743527L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(0.5F)), static_cast<T>(0.13097731169586484777931864012654136046214618229236L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(1.5F)), static_cast<T>(0.038529924425495155395971538166055731456940831714065L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(4.5F)), static_cast<T>(0.0012311157382296328534406162790653865883418172939975L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(5, static_cast<T>(50.0F)), static_cast<T>(3.5124400631332394056901125740903320085753990490695e-24L), tolerance);
+
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(1)/1024), static_cast<T>(0.047570244582119027573000641518739337055625638422014L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(0.125F)), static_cast<T>(0.041762730174712898120606793100375713866392079558609L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(0.5F)), static_cast<T>(0.028178840877963713109230354192609362941651630844684L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(1.5F)), static_cast<T>(0.0098864453561701486668317763826728620676449196215016L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(4.5F)), static_cast<T>(0.00043257793497205419001613830279995985617548506505159L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(22, static_cast<T>(50.0F)), static_cast<T>(2.6900194251201629500599598206345018300567305625080e-24L), tolerance);
+ //
+ // Ei:
+ //
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(1)/1024), static_cast<T>(-6.35327933972759151358547423727042905862963067106751711596065L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(0.125)), static_cast<T>(-1.37320852494298333781545045921206470808223543321810480716122L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(0.5)), static_cast<T>(0.454219904863173579920523812662802365281405554352642045162818L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(1)), static_cast<T>(1.89511781635593675546652093433163426901706058173270759164623L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(50.5)), static_cast<T>(1.72763195602911805201155668940185673806099654090456049881069e20L), tolerance);
+
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(-1)/1024), static_cast<T>(-6.35523246483107180261445551935803221293763008553775821607264L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(-0.125)), static_cast<T>(-1.62342564058416879145630692462440887363310605737209536579267L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(-0.5)), static_cast<T>(-0.559773594776160811746795939315085235226846890316353515248293L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(-1)), static_cast<T>(-0.219383934395520273677163775460121649031047293406908207577979L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::expint(static_cast<T>(-50.5)), static_cast<T>(-2.27237132932219350440719707268817831250090574830769670186618e-24L), tolerance);
+}
+
+int test_main(int, char* [])
+{
+ expected_results();
+ BOOST_MATH_CONTROL_FP;
+
+ boost::math::expint(114.7);
+
+ test_spots(0.0f, "float");
+ test_spots(0.0, "double");
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ test_spots(0.0L, "long double");
+ test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
+#else
+ std::cout << "<note>The long double tests have been disabled on this platform "
+ "either because the long double overloads of the usual math functions are "
+ "not available at all, or because they are too inaccurate for these tests "
+ "to pass.</note>" << std::cout;
+#endif
+
+ test_expint(0.1F, "float");
+ test_expint(0.1, "double");
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ test_expint(0.1L, "long double");
+ test_expint(boost::math::concepts::real_concept(0.1), "real_concept");
+#else
+ std::cout << "<note>The long double tests have been disabled on this platform "
+ "either because the long double overloads of the usual math functions are "
+ "not available at all, or because they are too inaccurate for these tests "
+ "to pass.</note>" << std::cout;
+#endif
+ return 0;
+}
+
Added: sandbox/math_toolkit/libs/math/test/test_zeta.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/test_zeta.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,207 @@
+// (C) Copyright John Maddock 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/concepts/real_concept.hpp>
+#include <boost/math/special_functions/zeta.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/math/tools/stats.hpp>
+#include <boost/math/tools/test.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/array.hpp>
+#include "functor.hpp"
+
+#include "handle_test_result.hpp"
+
+//
+// DESCRIPTION:
+// ~~~~~~~~~~~~
+//
+// This file tests the zeta function. There are two sets of tests:
+// 1) Sanity checks: comparison to test values created with the
+// online calculator at functions.wolfram.com
+// 2) Accuracy tests use values generated with NTL::RR at
+// 1000-bit precision and our generic versions of these functions.
+//
+// Note that when this file is first run on a new platform many of
+// these tests will fail: the default accuracy is 1 epsilon which
+// is too tight for most platforms. In this situation you will
+// need to cast a human eye over the error rates reported and make
+// a judgement as to whether they are acceptable. Either way please
+// report the results to the Boost mailing list. Acceptable rates of
+// error are marked up below as a series of regular expressions that
+// identify the compiler/stdlib/platform/data-type/test-data/test-function
+// along with the maximum expected peek and RMS mean errors for that
+// test.
+//
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ const char* largest_type;
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ if(boost::math::policies::digits<double, boost::math::policies::policy<> >() == boost::math::policies::digits<long double, boost::math::policies::policy<> >())
+ {
+ largest_type = "(long\\s+)?double";
+ }
+ else
+ {
+ largest_type = "long double";
+ }
+#else
+ largest_type = "(long\\s+)?double";
+#endif
+
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ largest_type, // test type(s)
+ ".*Random values less than 1", // test data group
+ ".*", 1200, 500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "real_concept", // test type(s)
+ ".*Random values less than 1", // test data group
+ ".*", 1200, 500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ largest_type, // test type(s)
+ ".*", // test data group
+ ".*", 2, 1); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "real_concept", // test type(s)
+ ".*", // test data group
+ ".*", 10, 5); // test function
+
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void do_test_zeta(const T& data, const char* type_name, const char* test_name)
+{
+ //
+ // test zeta(T) against data:
+ //
+ using namespace std;
+ typedef typename T::value_type row_type;
+ typedef typename row_type::value_type value_type;
+
+ std::cout << test_name << " with type " << type_name << std::endl;
+
+ typedef value_type (*pg)(value_type);
+ pg funcp = boost::math::zeta;
+
+ boost::math::tools::test_result<value_type> result;
+ //
+ // test zeta against data:
+ //
+ result = boost::math::tools::test(
+ data,
+ bind_func(funcp, 0),
+ extract_result(1));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::zeta", test_name);
+
+ std::cout << std::endl;
+}
+template <class T>
+void test_zeta(T, const char* name)
+{
+ //
+ // The actual test data is rather verbose, so it's in a separate file
+ //
+#include "zeta_data.ipp"
+ do_test_zeta(zeta_data, name, "Zeta: Random values greater than 1");
+#include "zeta_neg_data.ipp"
+ do_test_zeta(zeta_neg_data, name, "Zeta: Random values less than 1");
+#include "zeta_1_up_data.ipp"
+ do_test_zeta(zeta_1_up_data, name, "Zeta: Values close to and greater than 1");
+#include "zeta_1_below_data.ipp"
+ do_test_zeta(zeta_1_below_data, name, "Zeta: Values close to and less than 1");
+}
+
+extern "C" double zetac(double);
+
+template <class T>
+void test_spots(T, const char* t)
+{
+ std::cout << "Testing basic sanity checks for type " << t << std::endl;
+ //
+ // Basic sanity checks, tolerance is either 2 or 10 epsilon
+ // expressed as a percentage:
+ //
+ T tolerance = boost::math::tools::epsilon<T>() * 100 *
+ (boost::is_floating_point<T>::value ? 2 : 10);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(0.125)), static_cast<T>(-0.63277562349869525529352526763564627152686379131122L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(1023) / static_cast<T>(1024)), static_cast<T>(-1023.4228554489429786541032870895167448906103303056L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(1025) / static_cast<T>(1024)), static_cast<T>(1024.5772867695045940578681624248887776501597556226L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(0.5)), static_cast<T>(-1.46035450880958681288949915251529801246722933101258149054289L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(1.125)), static_cast<T>(8.5862412945105752999607544082693023591996301183069L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(2)), static_cast<T>(1.6449340668482264364724151666460251892189499012068L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(3.5)), static_cast<T>(1.1267338673170566464278124918549842722219969574036L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(4)), static_cast<T>(1.08232323371113819151600369654116790277475095191872690768298L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(4 + static_cast<T>(1) / 1024), static_cast<T>(1.08225596856391369799036835439238249195298434901488518878804L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(4.5)), static_cast<T>(1.05470751076145426402296728896028011727249383295625173068468L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(6.5)), static_cast<T>(1.01200589988852479610078491680478352908773213619144808841031L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(7.5)), static_cast<T>(1.00582672753652280770224164440459408011782510096320822989663L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(8.125)), static_cast<T>(1.0037305205308161603183307711439385250181080293472L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(16.125)), static_cast<T>(1.0000140128224754088474783648500235958510030511915L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(0)), static_cast<T>(-0.5L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-0.125)), static_cast<T>(-0.39906966894504503550986928301421235400280637468895L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-1)), static_cast<T>(-0.083333333333333333333333333333333333333333333333333L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-2)), static_cast<T>(0L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-2.5)), static_cast<T>(0.0085169287778503305423585670283444869362759902200745L), tolerance * 3);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-3)), static_cast<T>(0.0083333333333333333333333333333333333333333333333333L), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-4)), static_cast<T>(0), tolerance);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-20)), static_cast<T>(0), tolerance * 100);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-21)), static_cast<T>(-281.46014492753623188405797101449275362318840579710L), tolerance * 100);
+ BOOST_CHECK_CLOSE(::boost::math::zeta(static_cast<T>(-30.125)), static_cast<T>(2.2762941726834511267740045451463455513839970804578e7L), tolerance * 100);
+}
+
+int test_main(int, char* [])
+{
+ expected_results();
+ BOOST_MATH_CONTROL_FP;
+
+ test_spots(0.0f, "float");
+ test_spots(0.0, "double");
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ test_spots(0.0L, "long double");
+ test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
+#else
+ std::cout << "<note>The long double tests have been disabled on this platform "
+ "either because the long double overloads of the usual math functions are "
+ "not available at all, or because they are too inaccurate for these tests "
+ "to pass.</note>" << std::cout;
+#endif
+
+ test_zeta(0.1F, "float");
+ test_zeta(0.1, "double");
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ test_zeta(0.1L, "long double");
+ test_zeta(boost::math::concepts::real_concept(0.1), "real_concept");
+#else
+ std::cout << "<note>The long double tests have been disabled on this platform "
+ "either because the long double overloads of the usual math functions are "
+ "not available at all, or because they are too inaccurate for these tests "
+ "to pass.</note>" << std::cout;
+#endif
+ return 0;
+}
+
+
+
Added: sandbox/math_toolkit/libs/math/test/zeta_1_below_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/zeta_1_below_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,29 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 24> zeta_1_below_data = {{
+ { SC_(0.02141654491424560546875), SC_(-0.5201506602793944998316548018699690797681) },
+ { SC_(0.50472259521484375), SC_(-1.479059796502255763615575236860218694317) },
+ { SC_(0.753675937652587890625), SC_(-3.500701844470537839375475836745309608254) },
+ { SC_(0.892135083675384521484375), SC_(-8.701549551111914711016864206105707387913) },
+ { SC_(0.963824570178985595703125), SC_(-27.06849649507583530629721672895651369373) },
+ { SC_(0.969254791736602783203125), SC_(-31.95042124075855399021415469463730656365) },
+ { SC_(0.98464930057525634765625), SC_(-64.56751477719026237096105864334609394117) },
+ { SC_(0.992201328277587890625), SC_(-127.6503167276133070149448420866102648888) },
+ { SC_(0.99617671966552734375), SC_(-260.9785629260130820484322508586172549118) },
+ { SC_(0.998053848743438720703125), SC_(-513.2576018780070294737373079904789166413) },
+ { SC_(0.99924468994140625), SC_(-1323.382435295998941597319533493165885945) },
+ { SC_(0.9997098445892333984375), SC_(-3445.851729045998047072816129417437104917) },
+ { SC_(0.99984395503997802734375), SC_(-6407.832268577823258975422770409768729774) },
+ { SC_(0.99990558624267578125), SC_(-10591.09955888672689821582177914203224971) },
+ { SC_(0.99996650218963623046875), SC_(-29852.12029567107244043543924323873276124) },
+ { SC_(0.999980032444000244140625), SC_(-50080.66457683383099069439395050656417597) },
+ { SC_(0.999987542629241943359375), SC_(-80273.18355079243243774478653269383556504) },
+ { SC_(0.99999535083770751953125), SC_(-215091.9356051864517678048611890100788117) },
+ { SC_(0.999996364116668701171875), SC_(-275035.7506534523074664329441741330074557) },
+ { SC_(0.9999980926513671875), SC_(-524287.4227844739836880964361309795525948) },
+ { SC_(0.999999463558197021484375), SC_(-1864134.533895485271043081470070250144498) },
+ { SC_(0.999999582767486572265625), SC_(-2396744.56564150833674906851990450393092) },
+ { SC_(0.9999997615814208984375), SC_(-4194303.422784352459117831107301957279448) },
+ { SC_(0.999999940395355224609375), SC_(-16777215.42278433943862976068131370725545) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/zeta_1_up_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/zeta_1_up_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,29 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 24> zeta_1_up_data = {{
+ { SC_(1.00000011920928955078125), SC_(8388608.57721567358185799990090564625463) },
+ { SC_(1.0000002384185791015625), SC_(4194304.577215682262183001486952251646755) },
+ { SC_(1.000000476837158203125), SC_(2097152.577215699622832591533990692770612) },
+ { SC_(1.00000059604644775390625), SC_(1677722.177215708303157179994975569843472) },
+ { SC_(1.0000019073486328125), SC_(524288.577215803786718564313226471202153) },
+ { SC_(1.00000369548797607421875), SC_(270600.8352804501205804024002567735033821) },
+ { SC_(1.00000464916229248046875), SC_(215093.0900365162546240716837932060406643) },
+ { SC_(1.00001239776611328125), SC_(80660.26952425996230208837588346956460766) },
+ { SC_(1.00001990795135498046875), SC_(50231.76284585702889240460092067814586596) },
+ { SC_(1.00003349781036376953125), SC_(29853.27472700086463256814366228500539722) },
+ { SC_(1.00009441375732421875), SC_(10592.253990216443584450690925565465553) },
+ { SC_(1.00015604496002197265625), SC_(6408.986699907390364066670889074476433249) },
+ { SC_(1.0002901554107666015625), SC_(3447.006160374985279544507526117209600704) },
+ { SC_(1.00075531005859375), SC_(1324.536866620273720254607350418328040857) },
+ { SC_(1.0019462108612060546875), SC_(514.3962964770573413079586126451916678814) },
+ { SC_(1.00382328033447265625), SC_(262.1329941141675715333591367272474762968) },
+ { SC_(1.007798671722412109375), SC_(128.8047474680561710562008547158197319238) },
+ { SC_(1.01535069942474365234375), SC_(65.72194382352840743913691516911618095535) },
+ { SC_(1.0307452678680419921875), SC_(33.1047803593638190816111616860939640546) },
+ { SC_(1.03617537021636962890625), SC_(28.22296068581747567698336482012316769919) },
+ { SC_(1.10786497592926025390625), SC_(9.855863042654116305734265296224764929693) },
+ { SC_(1.246324062347412109375), SC_(4.654545919478261756646025472315043204481) },
+ { SC_(1.49527740478515625), SC_(2.631125733364186076058384433696635480314) },
+ { SC_(1.97858345508575439453125), SC_(1.665479359458163559316085149303802250507) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/zeta_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/zeta_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,205 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 200> zeta_data = {{
+ { SC_(1.16628754138946533203125), SC_(6.602868183069916948720755731837247651904) },
+ { SC_(1.28222560882568359375), SC_(4.140637712279411074557164685415721499333) },
+ { SC_(1.7022221088409423828125), SC_(2.049914055577335303673424130546639695977) },
+ { SC_(1.79880845546722412109375), SC_(1.884017213259316830925461356827163589705) },
+ { SC_(2.048659801483154296875), SC_(1.601558368429615698519833097274473510457) },
+ { SC_(2.8781378269195556640625), SC_(1.228101328930692778618914405979886894909) },
+ { SC_(3.032318592071533203125), SC_(1.195776877916973414012665761751705560617) },
+ { SC_(3.1069891452789306640625), SC_(1.182159242558432231709092493922425008201) },
+ { SC_(3.1500339508056640625), SC_(1.174833816740130223224455066511517932084) },
+ { SC_(3.724112033843994140625), SC_(1.104091496679991538723159196605198807097) },
+ { SC_(4.021769046783447265625), SC_(1.080838392415394466528941224431751600289) },
+ { SC_(4.18305683135986328125), SC_(1.070728699189787267711417808282208201243) },
+ { SC_(4.988127231597900390625), SC_(1.037268683773212337925891820825986369163) },
+ { SC_(5.475403308868408203125), SC_(1.025677237452222708699509051024184979758) },
+ { SC_(6.73077487945556640625), SC_(1.010147799135311596739412446000395677634) },
+ { SC_(6.75488376617431640625), SC_(1.009971613405573851873574290566390329028) },
+ { SC_(7.481843471527099609375), SC_(1.005903033995481747047683253211887943379) },
+ { SC_(7.635406494140625), SC_(1.005288494073193869275365293603878222362) },
+ { SC_(8.020862579345703125), SC_(1.004017268583341130595381689022448999632) },
+ { SC_(8.38578319549560546875), SC_(1.003100201571479771794633384423398597856) },
+ { SC_(8.42790126800537109375), SC_(1.003009041836055382568010141093226826892) },
+ { SC_(8.492221832275390625), SC_(1.002875040229932893183945988160370427031) },
+ { SC_(8.66446590423583984375), SC_(1.002545196845709311376898921088902444564) },
+ { SC_(8.9931430816650390625), SC_(1.002018125856127423319731400168443258982) },
+ { SC_(9.1788425445556640625), SC_(1.001770614157242715970257755765969939378) },
+ { SC_(9.3712940216064453125), SC_(1.001546356501243682890096399666391078865) },
+ { SC_(9.79772472381591796875), SC_(1.001146130957712750505516168299351687689) },
+ { SC_(9.808345794677734375), SC_(1.00113762301831987584969089187780050217) },
+ { SC_(10.11186695098876953125), SC_(1.000919597225029357674089436218492816592) },
+ { SC_(10.29917240142822265625), SC_(1.000806567139600490049263928993429525886) },
+ { SC_(10.325397491455078125), SC_(1.000791898339491638031859012162073442552) },
+ { SC_(10.59409236907958984375), SC_(1.000656217007150362893379421381526735049) },
+ { SC_(11.10001468658447265625), SC_(1.000460863347090913162269206213828518989) },
+ { SC_(11.258045196533203125), SC_(1.000412744570371150451037951828092883018) },
+ { SC_(12.02548313140869140625), SC_(1.000241757815894734629418410369301746079) },
+ { SC_(12.114536285400390625), SC_(1.000227221507799340331471780559564457085) },
+ { SC_(12.59912014007568359375), SC_(1.000162173028028771481952241164711193704) },
+ { SC_(13.27601528167724609375), SC_(1.000101287979535386768777024448093303828) },
+ { SC_(13.40233516693115234375), SC_(1.000092774524593217714357153624534009066) },
+ { SC_(13.50353527069091796875), SC_(1.000086474027947163401202419199584993912) },
+ { SC_(13.81703281402587890625), SC_(1.00006954876715640831942977005349491939) },
+ { SC_(14.04100894927978515625), SC_(1.000059528194484375589465960959559392027) },
+ { SC_(14.2049045562744140625), SC_(1.000053123725822614470754551602877776071) },
+ { SC_(14.57920742034912109375), SC_(1.000040965134201953746630782215943808799) },
+ { SC_(15.36797332763671875), SC_(1.000023694259291145619969142932513875694) },
+ { SC_(15.8139476776123046875), SC_(1.000017387917474363833490985179130947483) },
+ { SC_(16.0026493072509765625), SC_(1.000015254196094267783311053302032549741) },
+ { SC_(16.0506114959716796875), SC_(1.000014754970384001823203354717544204648) },
+ { SC_(16.1929874420166015625), SC_(1.000013367248015505858617397050136565041) },
+ { SC_(17.285480499267578125), SC_(1.000006265375288782355276787853647834027) },
+ { SC_(17.3384552001953125), SC_(1.000006039370585766187763904743838901712) },
+ { SC_(17.431396484375), SC_(1.000005662382433471779572282335717605371) },
+ { SC_(17.864501953125), SC_(1.00000419335137039446528405523273417847) },
+ { SC_(18.5247364044189453125), SC_(1.000002653000473253577578493409620982871) },
+ { SC_(18.69007110595703125), SC_(1.000002365653327425220021887287461178979) },
+ { SC_(18.81287384033203125), SC_(1.000002172565731416793616844762261244142) },
+ { SC_(19.1818561553955078125), SC_(1.000001682165061320587705723061871112821) },
+ { SC_(19.67647552490234375), SC_(1.00000119382334998635578076483569134487) },
+ { SC_(19.70886993408203125), SC_(1.000001167310591227212167384387209403708) },
+ { SC_(20.61444854736328125), SC_(1.000000623066938898373480079125184673916) },
+ { SC_(20.89023590087890625), SC_(1.000000514640103638265544723138844382034) },
+ { SC_(21.0827579498291015625), SC_(1.000000450341377189234015911832375901699) },
+ { SC_(21.6490421295166015625), SC_(1.000000304127710718113360167907484415053) },
+ { SC_(21.7479114532470703125), SC_(1.000000283981940559836806790957987649415) },
+ { SC_(21.8129825592041015625), SC_(1.000000271456777007108293719830577426366) },
+ { SC_(22.024364471435546875), SC_(1.000000234457016042858052978953659230864) },
+ { SC_(22.31634521484375), SC_(1.000000191496938987028342073327362804024) },
+ { SC_(23.4463043212890625), SC_(1.000000087496653103497740447812661569997) },
+ { SC_(23.5119476318359375), SC_(1.000000083604563844903851348021422245475) },
+ { SC_(23.8504581451416015625), SC_(1.000000066118672757144002036583533060251) },
+ { SC_(23.9256191253662109375), SC_(1.000000062762118335210507369548667805974) },
+ { SC_(24.1413936614990234375), SC_(1.000000054043162442589559272614572137384) },
+ { SC_(24.1469058990478515625), SC_(1.000000053837061982953069368273926175689) },
+ { SC_(24.2995853424072265625), SC_(1.000000048430482721838693416022261315822) },
+ { SC_(24.52557373046875), SC_(1.00000004140831046897333530316265610171) },
+ { SC_(24.8483028411865234375), SC_(1.000000033108065641575998984551968709104) },
+ { SC_(25.115139007568359375), SC_(1.000000027517326675188465672935455696634) },
+ { SC_(25.347324371337890625), SC_(1.000000023426640017082892404381467024384) },
+ { SC_(25.883914947509765625), SC_(1.000000016150174569147643163428466835474) },
+ { SC_(25.903171539306640625), SC_(1.000000015936036497475570766824085170722) },
+ { SC_(25.9667415618896484375), SC_(1.000000015249075980692704336912033740583) },
+ { SC_(26.88591766357421875), SC_(1.000000008063810840808460735890647313959) },
+ { SC_(27.289585113525390625), SC_(1.000000006095693351337655085514196913602) },
+ { SC_(27.9059352874755859375), SC_(1.000000003976323567324742280069738235563) },
+ { SC_(28.0213603973388671875), SC_(1.000000003670583049284047356311447119736) },
+ { SC_(28.6940479278564453125), SC_(1.000000002302686016920949834610470007565) },
+ { SC_(28.924041748046875), SC_(1.000000001963357304099298248229398455341) },
+ { SC_(29.0107631683349609375), SC_(1.000000001848815070266702493862791862422) },
+ { SC_(29.6371631622314453125), SC_(1.000000001197643401744885528390587608634) },
+ { SC_(29.7665653228759765625), SC_(1.000000001094897489879537307636075154625) },
+ { SC_(29.896099090576171875), SC_(1.000000001000874865523017090100762703195) },
+ { SC_(29.9447536468505859375), SC_(1.000000000967683322176361378042505764603) },
+ { SC_(30.40348052978515625), SC_(1.000000000704112916637256444040895840462) },
+ { SC_(30.716098785400390625), SC_(1.000000000566936750566018696285006521506) },
+ { SC_(30.851467132568359375), SC_(1.000000000516160286455123973861824307492) },
+ { SC_(32.114917755126953125), SC_(1.000000000215004429998345753311603463246) },
+ { SC_(32.31705474853515625), SC_(1.000000000186895151300205581521237835124) },
+ { SC_(33.2660064697265625), SC_(1.000000000096813254374934769090357620442) },
+ { SC_(33.285717010498046875), SC_(1.000000000095499555541792141940005023127) },
+ { SC_(33.286014556884765625), SC_(1.000000000095479861400139003020181708444) },
+ { SC_(33.43369293212890625), SC_(1.000000000086189849924727332774207599423) },
+ { SC_(34.13188934326171875), SC_(1.000000000053122428800090015460135314565) },
+ { SC_(34.501476287841796875), SC_(1.000000000041116970445658244297262938037) },
+ { SC_(34.5605926513671875), SC_(1.000000000039466198914643412779159907251) },
+ { SC_(34.85152435302734375), SC_(1.000000000032258642822020209836223179965) },
+ { SC_(35.2764434814453125), SC_(1.000000000024028830747846719836544655561) },
+ { SC_(35.530582427978515625), SC_(1.000000000020147871220182569297544208725) },
+ { SC_(35.530796051025390625), SC_(1.000000000020144888100208513063984898063) },
+ { SC_(35.9766082763671875), SC_(1.000000000014789788630980767807649535379) },
+ { SC_(36.075710296630859375), SC_(1.000000000013807952318212484703393304569) },
+ { SC_(37.346637725830078125), SC_(1.000000000005721921857809586500408112553) },
+ { SC_(38.30919647216796875), SC_(1.000000000002936181040773097124904210497) },
+ { SC_(38.746036529541015625), SC_(1.00000000000216910640536046429265717688) },
+ { SC_(38.9936981201171875), SC_(1.000000000001826952613666734849972430403) },
+ { SC_(39.13246917724609375), SC_(1.000000000001659407425313111065810951635) },
+ { SC_(39.650783538818359375), SC_(1.000000000001158576855480162680056752427) },
+ { SC_(39.67319488525390625), SC_(1.000000000001140718173333054850436397748) },
+ { SC_(39.688701629638671875), SC_(1.000000000001128522871078350064987157044) },
+ { SC_(40.1527252197265625), SC_(1.00000000000081813568920259864182340915) },
+ { SC_(41.04537200927734375), SC_(1.000000000000440668358431418275080044096) },
+ { SC_(41.102458953857421875), SC_(1.000000000000423571747277636883518004963) },
+ { SC_(41.10936737060546875), SC_(1.00000000000042154830144392988490289401) },
+ { SC_(41.2002105712890625), SC_(1.000000000000395822807194682529407123307) },
+ { SC_(41.9948883056640625), SC_(1.000000000000228180734060750744420949622) },
+ { SC_(42.01873779296875), SC_(1.000000000000224439639108525255752196646) },
+ { SC_(42.245525360107421875), SC_(1.000000000000191791651936161940112696305) },
+ { SC_(42.640682220458984375), SC_(1.000000000000145839655420702994396584213) },
+ { SC_(42.656719207763671875), SC_(1.000000000000144227479936645019793391633) },
+ { SC_(42.8525238037109375), SC_(1.000000000000125922969766185468474101667) },
+ { SC_(42.93152618408203125), SC_(1.000000000000119212795161526838438039263) },
+ { SC_(43.824497222900390625), SC_(1.000000000000064196566283314196661109382) },
+ { SC_(43.89032745361328125), SC_(1.000000000000061333101268165345810372718) },
+ { SC_(44.2351226806640625), SC_(1.00000000000004829489412268436483221931) },
+ { SC_(44.69818878173828125), SC_(1.000000000000035035186258816984623517723) },
+ { SC_(44.844814300537109375), SC_(1.000000000000031649419666232107485326247) },
+ { SC_(45.324756622314453125), SC_(1.000000000000022692832892549255237158092) },
+ { SC_(45.4700164794921875), SC_(1.000000000000020519233831913348485253367) },
+ { SC_(45.52651214599609375), SC_(1.000000000000019731234145578672796054892) },
+ { SC_(45.67481231689453125), SC_(1.000000000000017803748480318501874295268) },
+ { SC_(45.706668853759765625), SC_(1.000000000000017414927749921329025278045) },
+ { SC_(45.942142486572265625), SC_(1.000000000000014792345774484033646200826) },
+ { SC_(46.061252593994140625), SC_(1.000000000000013620132568841259892936442) },
+ { SC_(46.165493011474609375), SC_(1.000000000000012670735995557404974141305) },
+ { SC_(46.66110992431640625), SC_(1.000000000000008986824993086497939810961) },
+ { SC_(46.95496368408203125), SC_(1.000000000000007330734455050719634274445) },
+ { SC_(46.970867156982421875), SC_(1.000000000000007250368259197024518158727) },
+ { SC_(47.740230560302734375), SC_(1.000000000000004253619155993815373574244) },
+ { SC_(47.82225799560546875), SC_(1.00000000000000401851769095578631160734) },
+ { SC_(47.844524383544921875), SC_(1.000000000000003956972517068642986534164) },
+ { SC_(47.916797637939453125), SC_(1.000000000000003763627354737768001799664) },
+ { SC_(48.03951263427734375), SC_(1.000000000000003456732091224533384587416) },
+ { SC_(48.077789306640625), SC_(1.000000000000003366226193065923102690805) },
+ { SC_(48.088245391845703125), SC_(1.000000000000003341917308946400199448992) },
+ { SC_(48.21654510498046875), SC_(1.000000000000003057550491069862425535113) },
+ { SC_(48.644329071044921875), SC_(1.000000000000002272991605673625823218911) },
+ { SC_(48.682353973388671875), SC_(1.000000000000002213865312361618938196866) },
+ { SC_(48.7743377685546875), SC_(1.000000000000002077118692813712217229131) },
+ { SC_(49.042804718017578125), SC_(1.000000000000001724426584048478072980917) },
+ { SC_(49.068695068359375), SC_(1.00000000000000169375635354541860333178) },
+ { SC_(49.429607391357421875), SC_(1.000000000000001318880667089529421391478) },
+ { SC_(49.453510284423828125), SC_(1.000000000000001297209182880660183342645) },
+ { SC_(49.4922943115234375), SC_(1.000000000000001262800830493712288542346) },
+ { SC_(49.584011077880859375), SC_(1.000000000000001185019129246615676129004) },
+ { SC_(50.018886566162109375), SC_(1.000000000000000876626902724624554021734) },
+ { SC_(50.265506744384765625), SC_(1.000000000000000738881381594389232226354) },
+ { SC_(50.60231781005859375), SC_(1.000000000000000585038557479300395348451) },
+ { SC_(51.059597015380859375), SC_(1.000000000000000426117855101476521328968) },
+ { SC_(51.098628997802734375), SC_(1.000000000000000414743830855801205190555) },
+ { SC_(52.473300933837890625), SC_(1.000000000000000159941972488386163451755) },
+ { SC_(52.728687286376953125), SC_(1.000000000000000133993427096920945462604) },
+ { SC_(52.8274078369140625), SC_(1.00000000000000012513121114750147039425) },
+ { SC_(53.563289642333984375), SC_(1.000000000000000075135148894081185552722) },
+ { SC_(54.441722869873046875), SC_(1.000000000000000040870354119536041226567) },
+ { SC_(54.534519195556640625), SC_(1.000000000000000038324272820380003916252) },
+ { SC_(54.8891754150390625), SC_(1.00000000000000002997172663898867687923) },
+ { SC_(55.0283966064453125), SC_(1.000000000000000027214603309398090046137) },
+ { SC_(55.1144256591796875), SC_(1.000000000000000025639212561447923551389) },
+ { SC_(55.33161163330078125), SC_(1.000000000000000022055920618207215687506) },
+ { SC_(55.826557159423828125), SC_(1.000000000000000015650626977085832472044) },
+ { SC_(56.10559844970703125), SC_(1.000000000000000012898284202740849648306) },
+ { SC_(56.106632232666015625), SC_(1.000000000000000012889045070538182553024) },
+ { SC_(56.464366912841796875), SC_(1.000000000000000010058468799404521129717) },
+ { SC_(57.06310272216796875), SC_(1.000000000000000006641932153342522535343) },
+ { SC_(57.346035003662109375), SC_(1.000000000000000005459128681570429564283) },
+ { SC_(57.472850799560546875), SC_(1.000000000000000004999746361816983875868) },
+ { SC_(57.4929046630859375), SC_(1.000000000000000004930729282248733593481) },
+ { SC_(57.598194122314453125), SC_(1.000000000000000004583696701999359539209) },
+ { SC_(57.61005401611328125), SC_(1.000000000000000004546170184327776041529) },
+ { SC_(57.6248931884765625), SC_(1.00000000000000000449964916454958377241) },
+ { SC_(57.9284210205078125), SC_(1.000000000000000003645924503223314003083) },
+ { SC_(57.933013916015625), SC_(1.000000000000000003634335967038469182822) },
+ { SC_(58.09400177001953125), SC_(1.000000000000000003250595270157055505909) },
+ { SC_(58.16320037841796875), SC_(1.000000000000000003098361177564293540649) },
+ { SC_(58.26497650146484375), SC_(1.000000000000000002887316391786182139852) },
+ { SC_(58.885471343994140625), SC_(1.00000000000000000187804855653649070089) },
+ { SC_(59.2601165771484375), SC_(1.000000000000000001448529565053139975957) },
+ { SC_(59.322772979736328125), SC_(1.000000000000000001386966294498092563052) },
+ { SC_(59.579998016357421875), SC_(1.000000000000000001160468764851974345628) },
+ { SC_(59.650043487548828125), SC_(1.000000000000000001105471797878708756365) },
+ { SC_(59.791217803955078125), SC_(1.000000000000000001002420555691430478745) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/test/zeta_neg_data.ipp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/test/zeta_neg_data.ipp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,205 @@
+#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
+ static const boost::array<boost::array<T, 2>, 200> zeta_neg_data = {{
+ { SC_(-29.912628173828125), SC_(-11411595.03734503626230312380285630491992) },
+ { SC_(-29.851711273193359375), SC_(-17491128.83255653477666248263741824395945) },
+ { SC_(-29.6310367584228515625), SC_(-29338557.80907609522626540806232745245856) },
+ { SC_(-29.580287933349609375), SC_(-30306395.15877987544763078130380383514834) },
+ { SC_(-29.449008941650390625), SC_(-30679896.21366776808601886434072241922978) },
+ { SC_(-29.0131816864013671875), SC_(-20461364.43945172423472081418662644617911) },
+ { SC_(-28.932170867919921875), SC_(-17954718.78416694210282615237096201590328) },
+ { SC_(-28.8929386138916015625), SC_(-16756279.89114728919232419374363852845816) },
+ { SC_(-28.8703212738037109375), SC_(-16073970.93038052754961877241558169058995) },
+ { SC_(-28.56868743896484375), SC_(-8043912.797659222132349302164106524597545) },
+ { SC_(-28.4122905731201171875), SC_(-4903635.075080145389499851622270349855906) },
+ { SC_(-28.3275470733642578125), SC_(-3515000.607629881325886083145603311677359) },
+ { SC_(-27.9045429229736328125), SC_(561872.9101127770815302245082844482980385) },
+ { SC_(-27.648517608642578125), SC_(1342198.470655673842508718473103589634627) },
+ { SC_(-26.98891448974609375), SC_(958967.3644061210965186556335814069245902) },
+ { SC_(-26.9762477874755859375), SC_(940695.8288692367233401584802662854004146) },
+ { SC_(-26.5942859649658203125), SC_(431764.3905797650182797008420936167894022) },
+ { SC_(-26.513599395751953125), SC_(344789.2311643767144853652064583290283269) },
+ { SC_(-26.3110713958740234375), SC_(166950.9217712466990407178286461519015362) },
+ { SC_(-26.119335174560546875), SC_(50216.50838488570401977081704289833643882) },
+ { SC_(-26.0972042083740234375), SC_(39696.07667360741023132228278408445173572) },
+ { SC_(-26.06340789794921875), SC_(24717.59361206202031383049563915428563206) },
+ { SC_(-25.97290802001953125), SC_(-9283.102630861689329279837111548500337322) },
+ { SC_(-25.800212860107421875), SC_(-52573.91752584962621396048551282302169873) },
+ { SC_(-25.7026424407958984375), SC_(-66701.3515681932512045823224337761059857) },
+ { SC_(-25.60152435302734375), SC_(-75127.68961892726687631489083928203368082) },
+ { SC_(-25.3774662017822265625), SC_(-77369.49762740646964459716518117457943474) },
+ { SC_(-25.3718852996826171875), SC_(-77211.18174801304523919999376682789300922) },
+ { SC_(-25.2124080657958984375), SC_(-69818.92283651854238898648172800794135819) },
+ { SC_(-25.113994598388671875), SC_(-63308.57776529969909975415070544651202913) },
+ { SC_(-25.1002140045166015625), SC_(-62323.27853183353019086156608655701085742) },
+ { SC_(-24.9590358734130859375), SC_(-51664.42535000520168097529147316913191884) },
+ { SC_(-24.6932125091552734375), SC_(-31670.01281816867446841516400384736191327) },
+ { SC_(-24.610179901123046875), SC_(-26064.93805025958872153777775894298753194) },
+ { SC_(-24.2069492340087890625), SC_(-5837.615323910213540582720536747728255397) },
+ { SC_(-24.1601581573486328125), SC_(-4267.760146707777974801177862963289435484) },
+ { SC_(-23.905548095703125), SC_(1791.561198109913837096109939891110951525) },
+ { SC_(-23.5498905181884765625), SC_(4871.416521314878510824761013567411455181) },
+ { SC_(-23.4835186004638671875), SC_(4975.227974192317781212488271510561925245) },
+ { SC_(-23.4303455352783203125), SC_(4984.336960568300045015617894873870024567) },
+ { SC_(-23.2656269073486328125), SC_(4689.056669026157611801515942421136275408) },
+ { SC_(-23.147945404052734375), SC_(4269.09697487404379106734373164284895236) },
+ { SC_(-23.0618305206298828125), SC_(3895.967523742781467049009764795714670535) },
+ { SC_(-22.865161895751953125), SC_(2953.311728747392678575675862332538485112) },
+ { SC_(-22.450725555419921875), SC_(1144.061952511390247866794452177364720154) },
+ { SC_(-22.216400146484375), SC_(433.4964624209467744240111502742949136417) },
+ { SC_(-22.117252349853515625), SC_(209.670669847220366780433535101515157212) },
+ { SC_(-22.0920505523681640625), SC_(159.7249542805152560864294822534577696243) },
+ { SC_(-22.0172443389892578125), SC_(27.28537205103064323405309172342888102988) },
+ { SC_(-21.4432220458984375), SC_(-374.2415260535891625043607900493959621482) },
+ { SC_(-21.4153881072998046875), SC_(-374.303271908688039818985907313585954208) },
+ { SC_(-21.36655426025390625), SC_(-371.7545846369976735832217959234696992869) },
+ { SC_(-21.1389904022216796875), SC_(-326.1669603491139591285009725186578239647) },
+ { SC_(-20.792087554931640625), SC_(-206.625063426231189233571547577406886055) },
+ { SC_(-20.7052173614501953125), SC_(-175.5791090488241874023715949426197745063) },
+ { SC_(-20.64069366455078125), SC_(-153.3071708461727420185632819734936375388) },
+ { SC_(-20.4468212127685546875), SC_(-92.67534368527936634847943709898214630585) },
+ { SC_(-20.1869373321533203125), SC_(-30.43108614924854718139530495549243305713) },
+ { SC_(-20.1699161529541015625), SC_(-27.17316397712932041916821790643340800192) },
+ { SC_(-19.694103240966796875), SC_(27.1714136640721528789798045585951196151) },
+ { SC_(-19.549198150634765625), SC_(32.29909704565499257138194367283757692887) },
+ { SC_(-19.4480419158935546875), SC_(33.67605769729398309956337071678460455377) },
+ { SC_(-19.1505031585693359375), SC_(30.51834489947975739023200586922515652717) },
+ { SC_(-19.0985546112060546875), SC_(29.23410383834503370501000988892387173246) },
+ { SC_(-19.064365386962890625), SC_(28.3146818846773107926880125501905809413) },
+ { SC_(-18.95330047607421875), SC_(25.02711851332149330549031951636533097105) },
+ { SC_(-18.7998867034912109375), SC_(20.07798417651821829598839554245992618286) },
+ { SC_(-18.2061786651611328125), SC_(3.48259567016902798768190885417275768286) },
+ { SC_(-18.171688079833984375), SC_(2.808091309863074171772985422170099249644) },
+ { SC_(-17.99382781982421875), SC_(-0.08425805633923885570999830270532256204479) },
+ { SC_(-17.9543361663818359375), SC_(-0.5968706969826661560508135615534999329391) },
+ { SC_(-17.840961456298828125), SC_(-1.822852247678475212693660825685951918909) },
+ { SC_(-17.83806610107421875), SC_(-1.849579792577253331534678618823864608689) },
+ { SC_(-17.7578449249267578125), SC_(-2.504689097176022370085233310047718350241) },
+ { SC_(-17.6391048431396484375), SC_(-3.193024470338536865812887315255732910235) },
+ { SC_(-17.46953582763671875), SC_(-3.679429462928429733583422830868284984109) },
+ { SC_(-17.329334259033203125), SC_(-3.730955850518545451525056518679296419855) },
+ { SC_(-17.2073383331298828125), SC_(-3.582528563068304439407127816770249435282) },
+ { SC_(-16.9253997802734375), SC_(-2.810296984266164459897058245930083917242) },
+ { SC_(-16.915283203125), SC_(-2.77589555245432113406083575136508432266) },
+ { SC_(-16.8818817138671875), SC_(-2.660508806128033733833130593715903076036) },
+ { SC_(-16.3989238739013671875), SC_(-0.9776305321380423960622625495871224063825) },
+ { SC_(-16.18682861328125), SC_(-0.3914840091082085155017628868619033070834) },
+ { SC_(-15.86298274993896484375), SC_(0.2113095736867095471658768228963977110005) },
+ { SC_(-15.8023357391357421875), SC_(0.2852756275882561377493711146849722900443) },
+ { SC_(-15.44889068603515625), SC_(0.5095766448261500611629872324946933071932) },
+ { SC_(-15.32804584503173828125), SC_(0.5204935020247384500134730244597097470842) },
+ { SC_(-15.28248119354248046875), SC_(0.518000024039102855822688087754595443758) },
+ { SC_(-14.95335483551025390625), SC_(0.4238642347557435114933888974408451377203) },
+ { SC_(-14.88536357879638671875), SC_(0.3933692627692705652205577653029677414393) },
+ { SC_(-14.81730365753173828125), SC_(0.3608573293373039084524243522210581723643) },
+ { SC_(-14.79173946380615234375), SC_(0.3482722720977891877868480924645011434135) },
+ { SC_(-14.5507144927978515625), SC_(0.2263366094050870980047656705259818867826) },
+ { SC_(-14.38645648956298828125), SC_(0.147084896053585110709304360793633346003) },
+ { SC_(-14.31533050537109375), SC_(0.1152816347651253287394552787556741727121) },
+ { SC_(-13.65148448944091796875), SC_(-0.07251231425417656377649950152568494966249) },
+ { SC_(-13.545276641845703125), SC_(-0.08375031877772358984694147296792966961615) },
+ { SC_(-13.04667377471923828125), SC_(-0.08613748015144290972450792644674564697467) },
+ { SC_(-13.03631877899169921875), SC_(-0.08554589764966609410422566041830102984647) },
+ { SC_(-13.0361614227294921875), SC_(-0.08553676925262460195666037008963074921075) },
+ { SC_(-12.95856761932373046875), SC_(-0.08056765309761383957595558846249995931279) },
+ { SC_(-12.5917186737060546875), SC_(-0.04916757520124342761036750118646514054843) },
+ { SC_(-12.39752960205078125), SC_(-0.03115114084163494465794707790061004080063) },
+ { SC_(-12.36646747589111328125), SC_(-0.02836586465940004481089358385830546327083) },
+ { SC_(-12.21360492706298828125), SC_(-0.01539036046556130908669688029744711232684) },
+ { SC_(-11.99034214019775390625), SC_(0.0006069904308788892543024610864850846763506) },
+ { SC_(-11.8568134307861328125), SC_(0.008147201960813915155871421057182351090437) },
+ { SC_(-11.856700897216796875), SC_(0.008152875868653809905975061985964214000197) },
+ { SC_(-11.62246036529541015625), SC_(0.01746194346204194142446845779680149340516) },
+ { SC_(-11.5703887939453125), SC_(0.01886566756877059520362077789879963609155) },
+ { SC_(-10.902614593505859375), SC_(0.0196626059012350652716117019088095189095) },
+ { SC_(-10.39686298370361328125), SC_(0.008689980413332084843117426575282850372437) },
+ { SC_(-10.16733551025390625), SC_(0.003416813948098911896742939961274332301015) },
+ { SC_(-10.0372104644775390625), SC_(0.0007176193820913189364411980055213424358445) },
+ { SC_(-9.9642963409423828125), SC_(-0.0006632811340011981503362639124151757266767) },
+ { SC_(-9.6919612884521484375), SC_(-0.004807940796456133525623000987469972333747) },
+ { SC_(-9.6801853179931640625), SC_(-0.004948106664919310929639531491612686942336) },
+ { SC_(-9.672039031982421875), SC_(-0.005043104323545521915854009513305224121704) },
+ { SC_(-9.42822933197021484375), SC_(-0.007140216297724451093935994631687254893686) },
+ { SC_(-8.95921039581298828125), SC_(-0.007434519412310381781780546556040051757663) },
+ { SC_(-8.9292163848876953125), SC_(-0.007313912761229121731761666014703562188579) },
+ { SC_(-8.92558765411376953125), SC_(-0.00729839292833941319530973378448137863064) },
+ { SC_(-8.87785434722900390625), SC_(-0.00707633883068269537335294544211513278741) },
+ { SC_(-8.46031284332275390625), SC_(-0.004074256641827071875084784818914263298709) },
+ { SC_(-8.447780609130859375), SC_(-0.003964973936847219963439195813913605287177) },
+ { SC_(-8.32862186431884765625), SC_(-0.002903415969312147961289161209278260789382) },
+ { SC_(-8.120998382568359375), SC_(-0.00103823391856569843811586237609042444109) },
+ { SC_(-8.11257076263427734375), SC_(-0.0009641405242205096512409518786467984036622) },
+ { SC_(-8.00969028472900390625), SC_(-0.8081897555380671288572993901221806428558e-4) },
+ { SC_(-7.96818065643310546875), SC_(0.000261996231792748327532018167663538399616) },
+ { SC_(-7.498992443084716796875), SC_(0.003273417189465077929314372888310860553978) },
+ { SC_(-7.46440410614013671875), SC_(0.003417551297097495653085939986968115182729) },
+ { SC_(-7.28324031829833984375), SC_(0.003973224858687943569640790429796668774442) },
+ { SC_(-7.03993511199951171875), SC_(0.004188064885842535489566897798831477388136) },
+ { SC_(-6.96289348602294921875), SC_(0.00413307218623721479271246253687857536289) },
+ { SC_(-6.710720539093017578125), SC_(0.003579650425628445602269416395217624438872) },
+ { SC_(-6.6343975067138671875), SC_(0.003311914606322736219077651823305971579526) },
+ { SC_(-6.604713916778564453125), SC_(0.003196837407418412428928538915252495489608) },
+ { SC_(-6.5267925262451171875), SC_(0.00286808681065953969739400100637205637184) },
+ { SC_(-6.5100555419921875), SC_(0.002792769359155893317313951562112124642491) },
+ { SC_(-6.38633251190185546875), SC_(0.002191129317123186105010600162934947438173) },
+ { SC_(-6.323749542236328125), SC_(0.001861047805191740695151906651937619919389) },
+ { SC_(-6.268978595733642578125), SC_(0.001560903697471362240875092595942452538086) },
+ { SC_(-6.00856876373291015625), SC_(0.5056493923745302784537384920689241524123e-4) },
+ { SC_(-5.854171276092529296875), SC_(-0.000850699827548195177814512570253393816845) },
+ { SC_(-5.8458156585693359375), SC_(-0.0008984756388001563233098481127032455383618) },
+ { SC_(-5.441573619842529296875), SC_(-0.002915026968595680785713416510699222417991) },
+ { SC_(-5.398475170135498046875), SC_(-0.003081263239844393794556192268338493619238) },
+ { SC_(-5.38677501678466796875), SC_(-0.003124321716617199710687253202017509643958) },
+ { SC_(-5.348802089691162109375), SC_(-0.003257740949901305827723740216599368435532) },
+ { SC_(-5.284323215484619140625), SC_(-0.003461160844402030020337003403034416960299) },
+ { SC_(-5.26421260833740234375), SC_(-0.003518393964166156715278378770334015232501) },
+ { SC_(-5.258718967437744140625), SC_(-0.003533499841767076804949459388722993177251) },
+ { SC_(-5.19130611419677734375), SC_(-0.003699890777792053165830070855367893096293) },
+ { SC_(-4.966538906097412109375), SC_(-0.003982393105088701410063296824875351251516) },
+ { SC_(-4.946559429168701171875), SC_(-0.00398600239489331055969397480564266110296) },
+ { SC_(-4.8982295989990234375), SC_(-0.003979612855119401843972374236087226591403) },
+ { SC_(-4.757171154022216796875), SC_(-0.003836405057552962242456530288751158127348) },
+ { SC_(-4.743566036224365234375), SC_(-0.003812665437930484329367028055222166144102) },
+ { SC_(-4.553936004638671875), SC_(-0.003299286445112839390501564610822343063568) },
+ { SC_(-4.54137516021728515625), SC_(-0.003253340207436420485572929378617465360415) },
+ { SC_(-4.5209980010986328125), SC_(-0.003175691140094301576675103590991471527218) },
+ { SC_(-4.4728069305419921875), SC_(-0.002976858185863617245397173014294301888612) },
+ { SC_(-4.24431324005126953125), SC_(-0.00175551877458019938328423578132053906906) },
+ { SC_(-4.114734649658203125), SC_(-0.0008756602845971692915754872652644095998698) },
+ { SC_(-3.9377651214599609375), SC_(0.0005075394336783163996239897113119062326783) },
+ { SC_(-3.69749927520751953125), SC_(0.002622130552658735330754289390878800389753) },
+ { SC_(-3.676990985870361328125), SC_(0.002810112977938437719471179582479423269376) },
+ { SC_(-2.9547061920166015625), SC_(0.00856184012269561519081119026118342931302) },
+ { SC_(-2.8205192089080810546875), SC_(0.009037989206198579118042330714986772360851) },
+ { SC_(-2.7686493396759033203125), SC_(0.009128821249400912985786171301727546611781) },
+ { SC_(-2.3819997310638427734375), SC_(0.007528500554786901983716620452938789863242) },
+ { SC_(-1.9204499721527099609375), SC_(-0.002637408450550919969361055380236527200873) },
+ { SC_(-1.87169349193572998046875), SC_(-0.004478507698442871056456977520107815363936) },
+ { SC_(-1.6853485107421875), SC_(-0.01331301401933966559224964767883365698475) },
+ { SC_(-1.6121981143951416015625), SC_(-0.01766825358627221799677465200009125172091) },
+ { SC_(-1.5669968128204345703125), SC_(-0.02064343048265733044842029728400047740426) },
+ { SC_(-1.4528820514678955078125), SC_(-0.02922143297753860874334243356099190516151) },
+ { SC_(-1.192826747894287109375), SC_(-0.05566943732471789169546884977433587458236) },
+ { SC_(-1.04621016979217529296875), SC_(-0.07595018260277478359527480657330720805406) },
+ { SC_(-1.0456688404083251953125), SC_(-0.07603371990103121884396103918441800305874) },
+ { SC_(-0.857705175876617431640625), SC_(-0.1096023911883116703076955371201458249853) },
+ { SC_(-0.543115675449371337890625), SC_(-0.1928664573137838612762872432285532859205) },
+ { SC_(-0.394455432891845703125), SC_(-0.2495443485845467778254047395388879044791) },
+ { SC_(-0.327823936939239501953125), SC_(-0.2799982799519977440228461605076452171571) },
+ { SC_(-0.317288100719451904296875), SC_(-0.2851488655947230334542341313298974452691) },
+ { SC_(-0.261966645717620849609375), SC_(-0.3138527949668934661932558041917113174462) },
+ { SC_(-0.2557342052459716796875), SC_(-0.317271262348402548403653041282308443369) },
+ { SC_(-0.247936725616455078125), SC_(-0.3216037424750364211708767678886883998309) },
+ { SC_(-0.088456094264984130859375), SC_(-0.4259272083317181924380711619296285238665) },
+ { SC_(-0.086042940616607666015625), SC_(-0.4277716953524606366478858744722936332152) },
+ { SC_(-0.001456916332244873046875), SC_(-0.4986633097035792982997269904612808871223) },
+ { SC_(0.034901142120361328125), SC_(-0.533338048759179364792881398709205491114) },
+ { SC_(0.088376700878143310546875), SC_(-0.5898057330494933987159364633901975183229) },
+ { SC_(0.414400041103363037109375), SC_(-1.174656654636669840597116356984374413125) },
+ { SC_(0.611247599124908447265625), SC_(-2.024132913638389303467555729734394339536) },
+ { SC_(0.644168853759765625), SC_(-2.259612667973966645670455260002849054666) },
+ { SC_(0.779320240020751953125), SC_(-3.970538544084429654769915000159638319936) },
+ { SC_(0.81612360477447509765625), SC_(-4.874770988252068737319828926058330714155) },
+ { SC_(0.890301287174224853515625), SC_(-8.54670722409884960433372346851249404364) }
+ }};
+#undef SC_
+
Added: sandbox/math_toolkit/libs/math/tools/expint_data.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/tools/expint_data.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,68 @@
+// (C) Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/bindings/rr.hpp>
+#include "ntl_rr_digamma.hpp"
+#include <boost/math/special_functions/expint.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <fstream>
+
+#include <boost/math/tools/test_data.hpp>
+
+using namespace boost::math::tools;
+
+struct expint_data_generator
+{
+ boost::math::ntl::RR operator()(boost::math::ntl::RR a, boost::math::ntl::RR b)
+ {
+ unsigned n = boost::math::tools::real_cast<unsigned>(a);
+ std::cout << n << " " << b << " ";
+ boost::math::ntl::RR result = boost::math::expint(n, b);
+ std::cout << result << std::endl;
+ return result;
+ }
+};
+
+
+int main()
+{
+ boost::math::ntl::RR::SetPrecision(1000);
+ boost::math::ntl::RR::SetOutputPrecision(40);
+
+ boost::math::expint(1, 0.06227754056453704833984375);
+ std::cout << boost::math::expint(1, boost::math::ntl::RR(0.5)) << std::endl;
+
+ parameter_info<boost::math::ntl::RR> arg1, arg2;
+ test_data<boost::math::ntl::RR> data;
+
+ std::cout << "Welcome.\n"
+ "This program will generate spot tests for the expint function:\n"
+ " expint(a, b)\n\n";
+
+ bool cont;
+ std::string line;
+
+ do{
+ get_user_parameter_info(arg1, "a");
+ get_user_parameter_info(arg2, "b");
+ data.insert(expint_data_generator(), arg1, arg2);
+
+ std::cout << "Any more data [y/n]?";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ cont = (line == "y");
+ }while(cont);
+
+ std::cout << "Enter name of test data file [default=expint_data.ipp]";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ if(line == "")
+ line = "expint_data.ipp";
+ std::ofstream ofs(line.c_str());
+ write_code(ofs, data, "expint_data");
+
+ return 0;
+}
+
Added: sandbox/math_toolkit/libs/math/tools/expint_i_data.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/tools/expint_i_data.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,54 @@
+// (C) Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/bindings/rr.hpp>
+#include "ntl_rr_digamma.hpp"
+#include <boost/math/special_functions/expint.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <fstream>
+
+#include <boost/math/tools/test_data.hpp>
+
+using namespace boost::math::tools;
+
+
+int main()
+{
+ boost::math::ntl::RR::SetPrecision(1000);
+ boost::math::ntl::RR::SetOutputPrecision(40);
+
+ parameter_info<boost::math::ntl::RR> arg1;
+ test_data<boost::math::ntl::RR> data;
+
+ boost::math::ntl::RR (*f)(boost::math::ntl::RR) = boost::math::expint;
+
+ std::cout << "Welcome.\n"
+ "This program will generate spot tests for the expint Ei function:\n"
+ " expint(a)\n\n";
+
+ bool cont;
+ std::string line;
+
+ do{
+ get_user_parameter_info(arg1, "a");
+ data.insert(f, arg1);
+
+ std::cout << "Any more data [y/n]?";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ cont = (line == "y");
+ }while(cont);
+
+ std::cout << "Enter name of test data file [default=expinti_data.ipp]";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ if(line == "")
+ line = "expinti_data.ipp";
+ std::ofstream ofs(line.c_str());
+ write_code(ofs, data, "expinti_data");
+
+ return 0;
+}
+
Added: sandbox/math_toolkit/libs/math/tools/zeta_data.cpp
==============================================================================
--- (empty file)
+++ sandbox/math_toolkit/libs/math/tools/zeta_data.cpp 2007-12-10 13:35:56 EST (Mon, 10 Dec 2007)
@@ -0,0 +1,77 @@
+// Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/bindings/rr.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/math/special_functions/zeta.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <boost/math/tools/test.hpp>
+#include <fstream>
+
+#include <boost/math/tools/test_data.hpp>
+
+using namespace boost::math::tools;
+using namespace std;
+
+struct zeta_data_generator
+{
+ boost::math::ntl::RR operator()(boost::math::ntl::RR z)
+ {
+ std::cout << z << " ";
+ boost::math::ntl::RR result = boost::math::zeta(z);
+ std::cout << result << std::endl;
+ return result;
+ }
+};
+
+struct zeta_data_generator2
+{
+ std::tr1::tuple<boost::math::ntl::RR, boost::math::ntl::RR> operator()(boost::math::ntl::RR z)
+ {
+ std::cout << -z << " ";
+ boost::math::ntl::RR result = boost::math::zeta(-z);
+ std::cout << result << std::endl;
+ return std::tr1::make_tuple(-z, result);
+ }
+};
+
+
+int test_main(int argc, char*argv [])
+{
+ boost::math::ntl::RR::SetPrecision(500);
+ boost::math::ntl::RR::SetOutputPrecision(40);
+
+ parameter_info<boost::math::ntl::RR> arg1;
+ test_data<boost::math::ntl::RR> data;
+
+ bool cont;
+ std::string line;
+
+ std::cout << "Welcome.\n"
+ "This program will generate spot tests for the zeta function:\n";
+
+ do{
+ if(0 == get_user_parameter_info(arg1, "z"))
+ return 1;
+ arg1.type |= dummy_param;
+ data.insert(zeta_data_generator2(), arg1);
+
+ std::cout << "Any more data [y/n]?";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ cont = (line == "y");
+ }while(cont);
+
+ std::cout << "Enter name of test data file [default=zeta_data.ipp]";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ if(line == "")
+ line = "zeta_data.ipp";
+ std::ofstream ofs(line.c_str());
+ write_code(ofs, data, "zeta_data");
+
+ return 0;
+}
+
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk