Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r86781 - in trunk: boost/multiprecision boost/multiprecision/cpp_bin_float libs/multiprecision/doc libs/multiprecision/doc/html libs/multiprecision/doc/html/boost_multiprecision libs/multiprecision/doc/html/boost_multiprecision/map libs/multiprecision/doc/html/boost_multiprecision/perf libs/multiprecision/doc/html/boost_multiprecision/ref libs/multiprecision/doc/html/boost_multiprecision/tut libs/multiprecision/doc/html/boost_multiprecision/tut/floats libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg libs/multiprecision/doc/html/boost_multiprecision/tut/interval libs/multiprecision/doc/html/boost_multiprecision/tut/ints libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs libs/multiprecision/doc/html/boost_multiprecision/tut/limits libs/multiprecision/doc/html/boost_multiprecision/tut/misc libs/multiprecision/doc/html/boost_multiprecision/tut/rational libs/multiprecision/example libs/multiprecision/performance libs/multiprecision/test libs/multiprecision/test/concepts libs/multiprecision/test/include_test libs/multiprecision/test/math libs/multiprecision/test/math/instances libs/multiprecision/tools
From: john_at_[hidden]
Date: 2013-11-21 14:05:42


Author: johnmaddock
Date: 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013)
New Revision: 86781
URL: http://svn.boost.org/trac/boost/changeset/86781

Log:
Initial merge of cpp_bin_float code from sandbox.

Added:
   trunk/boost/multiprecision/cpp_bin_float/
   trunk/boost/multiprecision/cpp_bin_float.hpp (contents, props changed)
   trunk/boost/multiprecision/cpp_bin_float/io.hpp (contents, props changed)
   trunk/boost/multiprecision/cpp_bin_float/transcendental.hpp (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html (contents, props changed)
   trunk/libs/multiprecision/doc/numeric_limits_32_tables.qbk (contents, props changed)
   trunk/libs/multiprecision/doc/numeric_limits_qbk.cpp (contents, props changed)
   trunk/libs/multiprecision/example/cpp_bin_float_snips.cpp (contents, props changed)
   trunk/libs/multiprecision/example/numeric_limits_snips.cpp (contents, props changed)
   trunk/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp (contents, props changed)
   trunk/libs/multiprecision/test/sincos.ipp (contents, props changed)
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_cpp_bin_float.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_cpp_bin_float_io.cpp (contents, props changed)
   trunk/libs/multiprecision/tools/
      - copied from r86779, sandbox/multiprecision.cpp_bin_float/libs/multiprecision/tools/
Text files modified:
   trunk/boost/multiprecision/cpp_bin_float.hpp | 1559 ++++++++++++++++++++++++++++++
   trunk/boost/multiprecision/cpp_bin_float/io.hpp | 690 +++++++++++++
   trunk/boost/multiprecision/cpp_bin_float/transcendental.hpp | 132 ++
   trunk/libs/multiprecision/doc/Jamfile.v2 | 3
   trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes.html | 17
   trunk/libs/multiprecision/doc/html/boost_multiprecision/intro.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/map.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html | 17
   trunk/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf.html | 4
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html | 42
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html | 4
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html | 66
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html | 4
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html | 42
   trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html | 10
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref.html | 9
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html | 6
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html | 186 +++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html | 10
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html | 15
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html | 48
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html | 42
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html | 192 +++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html | 10
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html | 18
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html | 6
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html | 9
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html | 9
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html | 185 +++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html | 17
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html | 10
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html | 6
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html | 100 +
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html | 705 +++++++++++++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html | 546 ++++++++++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html | 168 +++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html | 2049 ++++++++++++++++++++++++++++++++++++++++
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html | 10
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html | 14
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html | 6
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html | 18
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html | 8
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html | 2
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html | 63 +
   trunk/libs/multiprecision/doc/html/index.html | 26
   trunk/libs/multiprecision/doc/multiprecision.qbk | 1395 +++++++++++++++++++++++---
   trunk/libs/multiprecision/doc/numeric_limits_32_tables.qbk | 94 +
   trunk/libs/multiprecision/doc/numeric_limits_qbk.cpp | 719 ++++++++++++++
   trunk/libs/multiprecision/example/cpp_bin_float_snips.cpp | 39
   trunk/libs/multiprecision/example/numeric_limits_snips.cpp | 458 ++++++++
   trunk/libs/multiprecision/performance/performance_test.cpp | 20
   trunk/libs/multiprecision/performance/sf_performance.hpp | 11
   trunk/libs/multiprecision/performance/sf_performance_bessel2.cpp | 3
   trunk/libs/multiprecision/performance/sf_performance_bessel6.cpp | 3
   trunk/libs/multiprecision/performance/sf_performance_nct3.cpp | 3
   trunk/libs/multiprecision/performance/sf_performance_nct6.cpp | 3
   trunk/libs/multiprecision/performance/sf_performance_poly.cpp | 6
   trunk/libs/multiprecision/test/Jamfile.v2 | 68 +
   trunk/libs/multiprecision/test/concepts/number_concept_check.cpp | 13
   trunk/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp | 9
   trunk/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp | 10
   trunk/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp | 10
   trunk/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp | 10
   trunk/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp | 10
   trunk/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp | 12
   trunk/libs/multiprecision/test/math/instances/Jamfile.v2 | 3
   trunk/libs/multiprecision/test/math/setup.hpp | 22
   trunk/libs/multiprecision/test/sincos.ipp | 358 ++++++
   trunk/libs/multiprecision/test/test_acos.cpp | 15
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp | 28
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp | 27
   trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp | 27
   trunk/libs/multiprecision/test/test_asin.cpp | 9
   trunk/libs/multiprecision/test/test_atan.cpp | 9
   trunk/libs/multiprecision/test/test_cos.cpp | 22
   trunk/libs/multiprecision/test/test_cosh.cpp | 15
   trunk/libs/multiprecision/test/test_cpp_bin_float.cpp | 219 ++++
   trunk/libs/multiprecision/test/test_cpp_bin_float_io.cpp | 258 +++++
   trunk/libs/multiprecision/test/test_exp.cpp | 13
   trunk/libs/multiprecision/test/test_fpclassify.cpp | 9
   trunk/libs/multiprecision/test/test_log.cpp | 16
   trunk/libs/multiprecision/test/test_numeric_limits.cpp | 24
   trunk/libs/multiprecision/test/test_pow.cpp | 9
   trunk/libs/multiprecision/test/test_round.cpp | 12
   trunk/libs/multiprecision/test/test_sin.cpp | 23
   trunk/libs/multiprecision/test/test_sinh.cpp | 9
   trunk/libs/multiprecision/test/test_sqrt.cpp | 14
   trunk/libs/multiprecision/test/test_tan.cpp | 9
   trunk/libs/multiprecision/test/test_tanh.cpp | 9
   121 files changed, 10720 insertions(+), 606 deletions(-)

Added: trunk/boost/multiprecision/cpp_bin_float.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/boost/multiprecision/cpp_bin_float.hpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,1559 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifndef BOOST_MATH_CPP_BIN_FLOAT_HPP
+#define BOOST_MATH_CPP_BIN_FLOAT_HPP
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/integer.hpp>
+#include <boost/math/special_functions/trunc.hpp>
+#include <boost/multiprecision/detail/float_string_cvt.hpp>
+
+namespace boost{ namespace multiprecision{ namespace backends{
+
+enum digit_base_type
+{
+ digit_base_2 = 2,
+ digit_base_10 = 10
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4522) // multiple assignment operators specified
+#endif
+
+template <unsigned Digits, digit_base_type DigitBase = digit_base_10, class Allocator = void, class Exponent = int, Exponent MinExponent = 0, Exponent MaxExponent = 0>
+class cpp_bin_float
+{
+public:
+ static const unsigned bit_count = DigitBase == digit_base_2 ? Digits : (Digits * 1000uL) / 301uL + ((Digits * 1000uL) % 301 ? 2u : 1u);
+ typedef cpp_int_backend<is_void<Allocator>::value ? bit_count : 0, bit_count, is_void<Allocator>::value ? unsigned_magnitude : signed_magnitude, unchecked, Allocator> rep_type;
+ typedef cpp_int_backend<is_void<Allocator>::value ? 2 * bit_count : 0, 2 * bit_count, is_void<Allocator>::value ? unsigned_magnitude : signed_magnitude, unchecked, Allocator> double_rep_type;
+
+ typedef typename rep_type::signed_types signed_types;
+ typedef typename rep_type::unsigned_types unsigned_types;
+ typedef boost::mpl::list<double, long double> float_types;
+ typedef Exponent exponent_type;
+
+ static const exponent_type max_exponent_limit = boost::integer_traits<exponent_type>::const_max - 2 * static_cast<exponent_type>(bit_count);
+ static const exponent_type min_exponent_limit = boost::integer_traits<exponent_type>::const_min + 2 * static_cast<exponent_type>(bit_count);
+
+ BOOST_STATIC_ASSERT_MSG(MinExponent >= min_exponent_limit, "Template parameter MinExponent is too negative for our internal logic to function correctly, sorry!");
+ BOOST_STATIC_ASSERT_MSG(MaxExponent <= max_exponent_limit, "Template parameter MaxExponent is too large for our internal logic to function correctly, sorry!");
+ BOOST_STATIC_ASSERT_MSG(MinExponent <= 0, "Template parameter MinExponent can not be positive!");
+ BOOST_STATIC_ASSERT_MSG(MaxExponent >= 0, "Template parameter MaxExponent can not be negative!");
+
+ static const exponent_type max_exponent = MaxExponent == 0 ? max_exponent_limit : MaxExponent;
+ static const exponent_type min_exponent = MinExponent == 0 ? min_exponent_limit : MinExponent;
+
+ static const exponent_type exponent_zero = max_exponent + 1;
+ static const exponent_type exponent_infinity = max_exponent + 2;
+ static const exponent_type exponent_nan = max_exponent + 3;
+
+private:
+
+ rep_type m_data;
+ exponent_type m_exponent;
+ bool m_sign;
+public:
+ cpp_bin_float() : m_data(), m_exponent(exponent_nan), m_sign(false) {}
+
+ cpp_bin_float(const cpp_bin_float &o)
+ : m_data(o.m_data), m_exponent(o.m_exponent), m_sign(o.m_sign) {}
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ cpp_bin_float(const cpp_bin_float<D, B, A, E, MinE, MaxE> &o, typename boost::enable_if_c<(bit_count >= cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count)>::type const* = 0)
+ : m_exponent(o.exponent()), m_sign(o.sign())
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ copy_and_round(*this, b);
+ }
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ explicit cpp_bin_float(const cpp_bin_float<D, B, A, E, MinE, MaxE> &o, typename boost::disable_if_c<(bit_count >= cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count)>::type const* = 0)
+ : m_exponent(o.exponent()), m_sign(o.sign())
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ copy_and_round(*this, b);
+ }
+
+ template <class Float>
+ cpp_bin_float(const Float& f,
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && (std::numeric_limits<Float>::digits <= bit_count)
+ && (std::numeric_limits<Float>::radix == 2)
+ >::type const* = 0)
+ : m_data(), m_exponent(0), m_sign(false)
+ {
+ this->assign_float(f);
+ }
+
+ cpp_bin_float& operator=(const cpp_bin_float &o)
+ {
+ m_data = o.m_data;
+ m_exponent = o.m_exponent;
+ m_sign = o.m_sign;
+ return *this;
+ }
+
+ template <unsigned D, digit_base_type B, class A, class E, E MinE, E MaxE>
+ typename boost::enable_if_c<bit_count >= cpp_bin_float<D, B, A, E, MinE, MaxE>::bit_count, cpp_bin_float&>::type operator=(const cpp_bin_float &o)
+ {
+ typename cpp_bin_float<D, B, A, E, MinE, MaxE>::rep_type b(o.bits());
+ copy_and_round(*this, b);
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && (std::numeric_limits<Float>::digits <= bit_count)
+ && (std::numeric_limits<Float>::radix == 2), cpp_bin_float&>::type operator=(const Float& f)
+ {
+ return assign_float(f);
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<is_floating_point<Float>::value, cpp_bin_float&>::type assign_float(Float f)
+ {
+ BOOST_MATH_STD_USING
+ using default_ops::eval_add;
+
+ switch((boost::math::fpclassify)(f))
+ {
+ case FP_ZERO:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_zero;
+ return *this;
+ case FP_NAN:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_nan;
+ return *this;
+ case FP_INFINITE:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_infinity;
+ return *this;
+ }
+ if(f < 0)
+ {
+ *this = -f;
+ this->negate();
+ return *this;
+ }
+
+ typedef typename mpl::front<unsigned_types>::type ui_type;
+ m_data = static_cast<ui_type>(0u);
+ m_sign = false;
+ m_exponent = 0;
+
+ static const int bits = sizeof(int) * CHAR_BIT - 1;
+ int e;
+ f = frexp(f, &e);
+ while(f)
+ {
+ f = ldexp(f, bits);
+ e -= bits;
+ int ipart = itrunc(f);
+ f -= ipart;
+ m_exponent += bits;
+ eval_add(*this, ipart);
+ }
+ m_exponent += static_cast<Exponent>(e);
+ return *this;
+ }
+
+ template <class Float>
+ typename boost::enable_if_c<
+ (number_category<Float>::value == number_kind_floating_point)
+ && !is_floating_point<Float>::value
+ /*&& (std::numeric_limits<number<Float> >::radix == 2)*/,
+ cpp_bin_float&>::type assign_float(Float f)
+ {
+ BOOST_MATH_STD_USING
+ using default_ops::eval_add;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_convert_to;
+ using default_ops::eval_subtract;
+
+ typedef typename boost::multiprecision::detail::canonical<int, Float>::type f_int_type;
+ typedef typename boost::multiprecision::detail::canonical<int, cpp_bin_float>::type bf_int_type;
+
+ switch(eval_fpclassify(f))
+ {
+ case FP_ZERO:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_zero;
+ return *this;
+ case FP_NAN:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_nan;
+ return *this;
+ case FP_INFINITE:
+ m_data = limb_type(0);
+ m_sign = false;
+ m_exponent = exponent_infinity;
+ return *this;
+ }
+ if(eval_get_sign(f) < 0)
+ {
+ f.negate();
+ *this = f;
+ this->negate();
+ return *this;
+ }
+
+ typedef typename mpl::front<unsigned_types>::type ui_type;
+ m_data = static_cast<ui_type>(0u);
+ m_sign = false;
+ m_exponent = 0;
+
+ static const int bits = sizeof(int) * CHAR_BIT - 1;
+ int e;
+ eval_frexp(f, f, &e);
+ while(eval_get_sign(f) != 0)
+ {
+ eval_ldexp(f, f, bits);
+ e -= bits;
+ int ipart;
+ eval_convert_to(&ipart, f);
+ eval_subtract(f, static_cast<f_int_type>(ipart));
+ m_exponent += bits;
+ eval_add(*this, static_cast<bf_int_type>(ipart));
+ }
+ m_exponent += e;
+ if(m_exponent > max_exponent)
+ m_exponent = exponent_infinity;
+ if(m_exponent < min_exponent)
+ {
+ m_data = limb_type(0u);
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ else if(eval_get_sign(m_data) == 0)
+ {
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ return *this;
+ }
+
+ template <class I>
+ typename boost::enable_if<is_integral<I>, cpp_bin_float&>::type operator=(const I& i)
+ {
+ using default_ops::eval_bit_test;
+ if(!i)
+ {
+ m_data = static_cast<limb_type>(0);
+ m_exponent = exponent_zero;
+ m_sign = false;
+ }
+ else
+ {
+ typedef typename make_unsigned<I>::type ui_type;
+ ui_type fi = static_cast<ui_type>(boost::multiprecision::detail::abs(i));
+ typedef typename boost::multiprecision::detail::canonical<ui_type, rep_type>::type ar_type;
+ m_data = static_cast<ar_type>(fi);
+ unsigned shift = msb(fi);
+ if(shift >= bit_count)
+ {
+ m_exponent = static_cast<Exponent>(shift);
+ m_data = static_cast<limb_type>(fi >> (shift + 1 - bit_count));
+ }
+ else
+ {
+ m_exponent = static_cast<Exponent>(shift);
+ eval_left_shift(m_data, bit_count - shift - 1);
+ }
+ BOOST_ASSERT(eval_bit_test(m_data, bit_count-1));
+ m_sign = i < 0;
+ }
+ return *this;
+ }
+
+ cpp_bin_float& operator=(const char *s);
+
+ void swap(cpp_bin_float &o) BOOST_NOEXCEPT
+ {
+ m_data.swap(o.m_data);
+ std::swap(m_exponent, o.m_exponent);
+ std::swap(m_sign, o.m_sign);
+ }
+
+ std::string str(std::streamsize dig, std::ios_base::fmtflags f) const;
+
+ void negate()
+ {
+ if((m_exponent != exponent_zero) && (m_exponent != exponent_nan))
+ m_sign = !m_sign;
+ }
+
+ int compare(const cpp_bin_float &o) const BOOST_NOEXCEPT
+ {
+ if(m_sign != o.m_sign)
+ return m_sign ? -1 : 1;
+ int result;
+ if(m_exponent != o.m_exponent)
+ {
+ if(m_exponent == exponent_zero)
+ result = -1;
+ else if(o.m_exponent == exponent_zero)
+ result = 1;
+ else
+ result = m_exponent > o.m_exponent ? 1 : -1;
+ }
+ else
+ result = m_data.compare(o.m_data);
+ if(m_sign)
+ result = -result;
+ return result;
+ }
+ template <class A>
+ int compare(const A& o) const BOOST_NOEXCEPT
+ {
+ cpp_bin_float b;
+ b = o;
+ return compare(b);
+ }
+
+ rep_type& bits() { return m_data; }
+ const rep_type& bits()const { return m_data; }
+ exponent_type& exponent() { return m_exponent; }
+ const exponent_type& exponent()const { return m_exponent; }
+ bool& sign() { return m_sign; }
+ const bool& sign()const { return m_sign; }
+ void check_invariants()
+ {
+ using default_ops::eval_bit_test;
+ using default_ops::eval_is_zero;
+ if((m_exponent <= max_exponent) && (m_exponent >= min_exponent))
+ {
+ BOOST_ASSERT(eval_bit_test(m_data, bit_count - 1));
+ }
+ else
+ {
+ BOOST_ASSERT(m_exponent > max_exponent);
+ BOOST_ASSERT(m_exponent <= exponent_nan);
+ BOOST_ASSERT(eval_is_zero(m_data));
+ }
+ }
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class Int>
+inline void copy_and_round(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, Int &arg)
+{
+ // Precondition: exponent of res must have been set before this function is called
+ // as we may need to adjust it based on how many cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in arg are set.
+ using default_ops::eval_msb;
+ using default_ops::eval_lsb;
+ using default_ops::eval_left_shift;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_right_shift;
+ using default_ops::eval_increment;
+ using default_ops::eval_get_sign;
+
+ // cancellation may have resulted in arg being all zeros:
+ if(eval_get_sign(arg) == 0)
+ {
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ int msb = eval_msb(arg);
+ if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count > msb + 1)
+ {
+ // Must have had cancellation in subtraction, shift left and copy:
+ eval_left_shift(arg, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb - 1);
+ res.exponent() -= static_cast<Exponent>(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb - 1);
+ }
+ else if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count < msb + 1)
+ {
+ // We have more cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count than we need, so round as required,
+ // first get the rounding bit:
+ bool roundup = eval_bit_test(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count);
+ // Then check for a tie:
+ if(roundup && (msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count == eval_lsb(arg)))
+ {
+ // Ties round towards even:
+ if(!eval_bit_test(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1))
+ roundup = false;
+ }
+ // Shift off the cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count we don't need:
+ eval_right_shift(arg, msb - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1);
+ res.exponent() += static_cast<Exponent>(msb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1);
+ if(roundup)
+ {
+ eval_increment(arg);
+ if(eval_bit_test(arg, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ // This happens very very rairly:
+ eval_right_shift(arg, 1u);
+ ++res.exponent();
+ }
+ }
+ }
+ BOOST_ASSERT((eval_msb(arg) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ res.bits() = arg;
+
+ if(res.exponent() > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ res.bits() = static_cast<limb_type>(0u);
+ }
+ else if(res.exponent() < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.bits() = static_cast<limb_type>(0u);
+ res.sign() = false;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void do_eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_add;
+ using default_ops::eval_bit_test;
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = b;
+ if(res.sign())
+ res.negate();
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = b;
+ else
+ res = a;
+ return; // ault is still infinite.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return; // ault is still a NaN.
+ }
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = b;
+ if(res.sign())
+ res.negate();
+ return; // ault is infinite.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ return; // ault is a NaN.
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e_diff = a.exponent() - b.exponent();
+ bool s = a.sign();
+ if(e_diff >= 0)
+ {
+ dt = a.bits();
+ if(e_diff < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, e_diff);
+ res.exponent() = a.exponent() - e_diff;
+ eval_add(dt, b.bits());
+ }
+ else
+ res.exponent() = a.exponent();
+ }
+ else
+ {
+ dt= b.bits();
+ if(-e_diff < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, -e_diff);
+ res.exponent() = b.exponent() + e_diff;
+ eval_add(dt, a.bits());
+ }
+ else
+ res.exponent() = b.exponent();
+ }
+
+ copy_and_round(res, dt);
+ res.check_invariants();
+ if(res.sign() != s)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void do_eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_bit_test;
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ {
+ res = b;
+ if(!res.sign())
+ res.negate();
+ }
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if((b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan) || (b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity))
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return; // result is still a NaN.
+ }
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return; // result is a NaN.
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ return; // result is still a NaN.
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e_diff = a.exponent() - b.exponent();
+ bool s = a.sign();
+ if((e_diff > 0) || ((e_diff == 0) && a.bits().compare(b.bits()) >= 0))
+ {
+ dt = a.bits();
+ if(e_diff < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, e_diff);
+ res.exponent() = a.exponent() - e_diff;
+ eval_subtract(dt, b.bits());
+ }
+ else
+ res.exponent() = a.exponent();
+ }
+ else
+ {
+ dt = b.bits();
+ if(-e_diff < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ eval_left_shift(dt, -e_diff);
+ res.exponent() = b.exponent() + e_diff;
+ eval_subtract(dt, a.bits());
+ }
+ else
+ res.exponent() = b.exponent();
+ s = !s;
+ }
+
+ copy_and_round(res, dt);
+ if(res.sign() != s)
+ res.negate();
+ res.check_invariants();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ if(a.sign() == b.sign())
+ do_eval_add(res, a, b);
+ else
+ do_eval_subtract(res, a, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_add(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ return eval_add(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ if(a.sign() != b.sign())
+ do_eval_add(res, a, b);
+ else
+ do_eval_subtract(res, a, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_subtract(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ return eval_subtract(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ using default_ops::eval_bit_test;
+ using default_ops::eval_multiply;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(b.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan)
+ res = b;
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ switch(b.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ break;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = b;
+ break;
+ default:
+ res = a;
+ break;
+ }
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return;
+ }
+ if(b.exponent() > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ res = b;
+ return;
+ }
+ if((a.exponent() > 0) && (b.exponent() > 0))
+ {
+ if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent + 2 - a.exponent() < b.exponent())
+ {
+ // We will certainly overflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ res.sign() = a.sign() != b.sign();
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ }
+ if((a.exponent() < 0) && (b.exponent() < 0))
+ {
+ if(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent - 2 - a.exponent() > b.exponent())
+ {
+ // We will certainly underflow:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.sign() = false;
+ res.bits() = static_cast<limb_type>(0u);
+ return;
+ }
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+ eval_multiply(dt, a.bits(), b.bits());
+ res.exponent() = a.exponent() + b.exponent() - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ copy_and_round(res, dt);
+ res.check_invariants();
+ res.sign() = a.sign() != b.sign();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a)
+{
+ eval_multiply(res, res, a);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const U &b)
+{
+ using default_ops::eval_bit_test;
+ using default_ops::eval_multiply;
+
+ // Special cases first:
+ switch(a.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ if(b == 0)
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ else
+ res = a;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = a;
+ return;
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type dt;
+ typedef typename boost::multiprecision::detail::canonical<U, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::type canon_ui_type;
+ eval_multiply(dt, a.bits(), static_cast<canon_ui_type>(b));
+ res.exponent() = a.exponent();
+ copy_and_round(res, dt);
+ res.check_invariants();
+ res.sign() = a.sign();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const U &b)
+{
+ eval_multiply(res, res, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, const S &b)
+{
+ typedef typename make_unsigned<S>::type ui_type;
+ eval_multiply(res, a, static_cast<ui_type>(boost::multiprecision::detail::abs(b)));
+ if(b < 0)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_multiply(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const S &b)
+{
+ eval_multiply(res, res, b);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &v)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_qr;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_increment;
+
+ //
+ // Special cases first:
+ //
+ switch(u.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ switch(v.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ {
+ bool s = u.sign() != v.sign();
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = s;
+ return;
+ }
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res.exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ res.bits() = limb_type(0);
+ res.sign() = false;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+
+ // We can scale u and v so that both are integers, then perform integer
+ // division to obtain quotient q and remainder r, such that:
+ //
+ // q * v + r = u
+ //
+ // and hense:
+ //
+ // q + r/v = u/v
+ //
+ // From this, assuming q has "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, we only need to determine whether
+ // r/v is less than, equal to, or greater than 0.5 to determine rounding -
+ // this we can do with a shift and comparison.
+ //
+ // We can set the exponent and sign of the result up front:
+ //
+ res.exponent() = u.exponent() - v.exponent() - 1;
+ res.sign() = u.sign() != v.sign();
+ //
+ // Now get the quotient and remainder:
+ //
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(u.bits()), t2(v.bits()), q, r;
+ eval_left_shift(t, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count);
+ eval_qr(t, t2, q, r);
+ //
+ // We now have either "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" or "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1" significant cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ //
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ if(eval_bit_test(q, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ //
+ // OK we have cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1 cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, so we already have rounding info,
+ // we just need to changes things if the last bit is 1 and the
+ // remainder is non-zero (ie we do not have a tie).
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count));
+ if((q.limbs()[0] & 1u) && eval_get_sign(r))
+ {
+ eval_increment(q);
+ }
+ }
+ else
+ {
+ //
+ // We have exactly "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ // Get rounding info, which we can get by comparing 2r with v.
+ // We want to call copy_and_round to handle rounding and general cleanup,
+ // so we'll left shift q and add some fake digits on the end to represent
+ // how we'll be rounding.
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ static const unsigned lshift = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count < limb_bits ? 2 : limb_bits;
+ eval_left_shift(q, lshift);
+ res.exponent() -= lshift;
+ eval_left_shift(r, 1u);
+ int c = r.compare(v.bits());
+ if(c == 0)
+ q.limbs()[0] |= static_cast<limb_type>(1u) << (lshift - 1);
+ else if(c > 0)
+ q.limbs()[0] |= (static_cast<limb_type>(1u) << (lshift - 1)) + static_cast<limb_type>(1u);
+ }
+ copy_and_round(res, q);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ eval_divide(res, res, arg);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const U &v)
+{
+ using default_ops::eval_subtract;
+ using default_ops::eval_qr;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_get_sign;
+ using default_ops::eval_increment;
+
+ //
+ // Special cases first:
+ //
+ switch(u.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ if(v == 0)
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = u;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ if(v == 0)
+ {
+ bool s = u.sign();
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = s;
+ return;
+ }
+
+ // We can scale u and v so that both are integers, then perform integer
+ // division to obtain quotient q and remainder r, such that:
+ //
+ // q * v + r = u
+ //
+ // and hense:
+ //
+ // q + r/v = u/v
+ //
+ // From this, assuming q has "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, we only need to determine whether
+ // r/v is less than, equal to, or greater than 0.5 to determine rounding -
+ // this we can do with a shift and comparison.
+ //
+ // We can set the exponent and sign of the result up front:
+ //
+ int gb = msb(v);
+ res.exponent() = u.exponent() - static_cast<Exponent>(gb) - static_cast<Exponent>(1);
+ res.sign() = u.sign();
+ //
+ // Now get the quotient and remainder:
+ //
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(u.bits()), q, r;
+ eval_left_shift(t, gb + 1);
+ eval_qr(t, number<typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::canonical_value(v), q, r);
+ //
+ // We now have either "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" or "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1" significant cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ //
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ if(eval_bit_test(q, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ //
+ // OK we have cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count+1 cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count, so we already have rounding info,
+ // we just need to changes things if the last bit is 1 and the
+ // remainder is non-zero (ie we do not have a tie).
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count));
+ if((q.limbs()[0] & 1u) && eval_get_sign(r))
+ {
+ eval_increment(q);
+ }
+ }
+ else
+ {
+ //
+ // We have exactly "cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count" cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in q.
+ // Get rounding info, which we can get by comparing 2r with v.
+ // We want to call copy_and_round to handle rounding and general cleanup,
+ // so we'll left shift q and add some fake cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count on the end to represent
+ // how we'll be rounding.
+ //
+ BOOST_ASSERT((eval_msb(q) == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ static const unsigned lshift = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count < limb_bits ? 2 : limb_bits;
+ eval_left_shift(q, lshift);
+ res.exponent() -= lshift;
+ eval_left_shift(r, 1u);
+ int c = r.compare(number<typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type>::canonical_value(v));
+ if(c == 0)
+ q.limbs()[0] |= static_cast<limb_type>(1u) << (lshift - 1);
+ else if(c > 0)
+ q.limbs()[0] |= (static_cast<limb_type>(1u) << (lshift - 1)) + static_cast<limb_type>(1u);
+ }
+ copy_and_round(res, q);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class U>
+inline typename enable_if_c<is_unsigned<U>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const U &v)
+{
+ eval_divide(res, res, v);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &u, const S &v)
+{
+ typedef typename make_unsigned<S>::type ui_type;
+ eval_divide(res, u, static_cast<ui_type>(boost::multiprecision::detail::abs(v)));
+ if(v < 0)
+ res.negate();
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class S>
+inline typename enable_if_c<is_signed<S>::value>::type eval_divide(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const S &v)
+{
+ eval_divide(res, res, v);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline int eval_get_sign(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ return arg.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero ? 0 : arg.sign() ? -1 : 1;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline bool eval_is_zero(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ return arg.exponent() == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline bool eval_eq(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &a, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &b)
+{
+ return (a.exponent() == b.exponent())
+ && (a.sign() == b.sign())
+ && (a.bits().compare(b.bits()) == 0)
+ && (a.exponent() != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(long long *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<long long>::max)();
+ if(arg.sign())
+ *res = -*res;
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::rep_type man(arg.bits());
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift
+ = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - arg.exponent();
+ if(shift > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ *res = 0;
+ return;
+ }
+ else if(shift < 0)
+ {
+ // TODO: what if we have fewer cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count than a long long?
+ *res = (std::numeric_limits<long long>::max)();
+ if(arg.sign())
+ *res = -*res;
+ return;
+ }
+ eval_right_shift(man, shift);
+ eval_convert_to(res, man);
+ if(arg.sign())
+ *res = -*res;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(unsigned long long *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ BOOST_THROW_EXCEPTION(std::runtime_error("Could not convert NaN to integer."));
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<unsigned long long>::max)();
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::rep_type man(arg.bits());
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift
+ = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - arg.exponent();
+ if(shift > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ *res = 0;
+ return;
+ }
+ else if(shift < 0)
+ {
+ // TODO: what if we have fewer cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count than a long long?
+ *res = (std::numeric_limits<long long>::max)();
+ return;
+ }
+ eval_right_shift(man, shift);
+ eval_convert_to(res, man);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_convert_to(long double *res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ *res = 0;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ *res = std::numeric_limits<long double>::quiet_NaN();
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *res = (std::numeric_limits<long double>::infinity)();
+ if(arg.sign())
+ *res = -*res;
+ return;
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type e = arg.exponent();
+ e -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1;
+ *res = std::ldexp(static_cast<long double>(*arg.bits().limbs()), e);
+ for(unsigned i = 1; i < arg.bits().size(); ++i)
+ {
+ e += sizeof(*arg.bits().limbs()) * CHAR_BIT;
+ *res += std::ldexp(static_cast<long double>(arg.bits().limbs()[i]), e);
+ }
+ if(arg.sign())
+ *res = -*res;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_frexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, Exponent *e)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ *e = 0;
+ res = arg;
+ return;
+ }
+ res = arg;
+ *e = arg.exponent() + 1;
+ res.exponent() = -1;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline void eval_frexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I *pe)
+{
+ Exponent e;
+ eval_frexp(res, arg, &e);
+ if((e > (std::numeric_limits<I>::max)()) || (e < (std::numeric_limits<I>::min)()))
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("Exponent was outside of the range of the argument type to frexp."));
+ }
+ *pe = static_cast<I>(e);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, Exponent e)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ if((e > 0) && (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent - e < arg.exponent()))
+ {
+ // Overflow:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ res.sign() = arg.sign();
+ }
+ else if((e < 0) && (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent - e > arg.exponent()))
+ {
+ // Underflow:
+ res = limb_type(0);
+ }
+ else
+ {
+ res = arg;
+ res.exponent() += e;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline typename enable_if_c<is_unsigned<I>::value>::type eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I e)
+{
+ typedef typename make_signed<I>::type si_type;
+ if(e > static_cast<I>((std::numeric_limits<si_type>::max)()))
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ else
+ eval_ldexp(res, arg, static_cast<si_type>(e));
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, class I>
+inline typename enable_if_c<is_signed<I>::value>::type eval_ldexp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg, I e)
+{
+ if((e > (std::numeric_limits<Exponent>::max)()) || (e < (std::numeric_limits<Exponent>::min)()))
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ if(e < 0)
+ res.negate();
+ }
+ else
+ eval_ldexp(res, arg, static_cast<Exponent>(e));
+}
+
+/*
+* Sign manipulation
+*/
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_abs(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ res = arg;
+ res.sign() = false;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_fabs(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ res = arg;
+ res.sign() = false;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline int eval_fpclassify(const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ return FP_ZERO;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ return FP_INFINITE;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ return FP_NAN;
+ }
+ return FP_NORMAL;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_sqrt(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_integer_sqrt;
+ using default_ops::eval_bit_test;
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ res = arg;
+ return;
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+ if(arg.sign())
+ {
+ res = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ return;
+ }
+
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::double_rep_type t(arg.bits()), r, s;
+ eval_left_shift(t, arg.exponent() & 1 ? cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count : cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1);
+ eval_integer_sqrt(s, r, t);
+
+ if(!eval_bit_test(s, cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count))
+ {
+ // We have exactly the right number of cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count in the result, round as required:
+ if(s.compare(r) < 0)
+ {
+ eval_increment(s);
+ }
+ }
+ typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type ae = arg.exponent();
+ res.exponent() = ae / 2;
+ if((ae & 1) && (ae < 0))
+ --res.exponent();
+ copy_and_round(res, s);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_floor(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift =
+ (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - arg.exponent() - 1;
+ if((arg.exponent() > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent) || (shift <= 0))
+ {
+ // Either arg is already an integer, or a special value:
+ res = arg;
+ return;
+ }
+ if(shift >= (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ res = static_cast<signed_limb_type>(arg.sign() ? -1 : 0);
+ return;
+ }
+ bool fractional = (int)eval_lsb(arg.bits()) < shift;
+ res = arg;
+ eval_right_shift(res.bits(), shift);
+ if(fractional && res.sign())
+ {
+ eval_increment(res.bits());
+ if(eval_msb(res.bits()) != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - shift)
+ {
+ // Must have extended result by one bit in the increment:
+ --shift;
+ ++res.exponent();
+ }
+ }
+ eval_left_shift(res.bits(), shift);
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+inline void eval_ceil(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ using default_ops::eval_increment;
+ switch(arg.exponent())
+ {
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_nan:
+ case cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity:
+ res = arg;
+ return;
+ }
+ typename mpl::if_c<sizeof(typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type) < sizeof(int), int, typename cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type>::type shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - arg.exponent() - 1;
+ if((arg.exponent() > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent) || (shift <= 0))
+ {
+ // Either arg is already an integer, or a special value:
+ res = arg;
+ return;
+ }
+ if(shift >= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)
+ {
+ res = static_cast<signed_limb_type>(arg.sign() ? 0 : 1);
+ return;
+ }
+ bool fractional = (int)eval_lsb(arg.bits()) < shift;
+ res = arg;
+ eval_right_shift(res.bits(), shift);
+ if(fractional && !res.sign())
+ {
+ eval_increment(res.bits());
+ if(eval_msb(res.bits()) != cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 - shift)
+ {
+ // Must have extended result by one bit in the increment:
+ --shift;
+ ++res.exponent();
+ }
+ }
+ eval_left_shift(res.bits(), shift);
+}
+
+} // namespace backends
+
+#ifdef BOOST_NO_SFINAE_EXPR
+
+namespace detail{
+
+template<unsigned D1, backends::digit_base_type B1, class A1, unsigned D2, backends::digit_base_type B2, class A2>
+struct is_explicitly_convertible<backends::cpp_bin_float<D1, B1, A1>, backends::cpp_bin_float<D2, B2, A2> > : public mpl::true_ {};
+
+}
+#endif
+
+
+using backends::cpp_bin_float;
+using backends::digit_base_2;
+using backends::digit_base_10;
+
+template<unsigned Digits, backends::digit_base_type DigitBase, class Exponent, Exponent MinE, Exponent MaxE, class Allocator>
+struct number_category<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > : public boost::mpl::int_<boost::multiprecision::number_kind_floating_point>{};
+
+template<unsigned Digits, backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+struct expression_template_default<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >
+{
+ static const expression_template_option value = is_void<Allocator>::value ? et_off : et_on;
+};
+
+typedef number<backends::cpp_bin_float<50> > cpp_bin_float_50;
+typedef number<backends::cpp_bin_float<100> > cpp_bin_float_100;
+
+typedef number<backends::cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127>, et_off> cpp_bin_float_single;
+typedef number<backends::cpp_bin_float<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023>, et_off> cpp_bin_float_double;
+typedef number<backends::cpp_bin_float<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_double_extended;
+typedef number<backends::cpp_bin_float<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_quad;
+
+}} // namespaces
+
+#include <boost/multiprecision/cpp_bin_float/io.hpp>
+#include <boost/multiprecision/cpp_bin_float/transcendental.hpp>
+
+namespace std{
+
+//
+// numeric_limits [partial] specializations for the types declared in this header:
+//
+template<unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+class numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> number_type;
+public:
+ BOOST_STATIC_CONSTEXPR bool is_specialized = true;
+ static number_type (min)()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1u;
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ return value.second;
+ }
+ static number_type (max)()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ eval_complement(value.second.backend().bits(), value.second.backend().bits());
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ return value.second;
+ }
+ BOOST_STATIC_CONSTEXPR number_type lowest()
+ {
+ return -(max)();
+ }
+ BOOST_STATIC_CONSTEXPR int digits = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count;
+ BOOST_STATIC_CONSTEXPR int digits10 = digits * 301 / 1000;
+ // Is this really correct???
+ BOOST_STATIC_CONSTEXPR int max_digits10 = digits10 + 2;
+ BOOST_STATIC_CONSTEXPR bool is_signed = true;
+ BOOST_STATIC_CONSTEXPR bool is_integer = false;
+ BOOST_STATIC_CONSTEXPR bool is_exact = false;
+ BOOST_STATIC_CONSTEXPR int radix = 2;
+ static number_type epsilon()
+ {
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1;
+ value.second = ldexp(value.second, 1 - (int)digits);
+ }
+ return value.second;
+ }
+ // What value should this be????
+ static number_type round_error()
+ {
+ // returns 0.5
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second = 1;
+ value.second = ldexp(value.second, -1);
+ }
+ return value.second;
+ }
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type min_exponent = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type min_exponent10 = (min_exponent / 1000) * 301L;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type max_exponent = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ BOOST_STATIC_CONSTEXPR typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type max_exponent10 = (max_exponent / 1000) * 301L;
+ BOOST_STATIC_CONSTEXPR bool has_infinity = true;
+ BOOST_STATIC_CONSTEXPR bool has_quiet_NaN = true;
+ BOOST_STATIC_CONSTEXPR bool has_signaling_NaN = false;
+ BOOST_STATIC_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
+ BOOST_STATIC_CONSTEXPR bool has_denorm_loss = false;
+ static number_type infinity()
+ {
+ // returns epsilon/2
+ initializer.do_nothing();
+ static std::pair<bool, number_type> value;
+ if(!value.first)
+ {
+ value.first = true;
+ value.second.backend().exponent() = boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ }
+ return value.second;
+ }
+ static number_type quiet_NaN()
+ {
+ return number_type();
+ }
+ BOOST_STATIC_CONSTEXPR number_type signaling_NaN()
+ {
+ return number_type(0);
+ }
+ BOOST_STATIC_CONSTEXPR number_type denorm_min() { return number_type(0); }
+ BOOST_STATIC_CONSTEXPR bool is_iec559 = false;
+ BOOST_STATIC_CONSTEXPR bool is_bounded = true;
+ BOOST_STATIC_CONSTEXPR bool is_modulo = false;
+ BOOST_STATIC_CONSTEXPR bool traps = true;
+ BOOST_STATIC_CONSTEXPR bool tinyness_before = false;
+ BOOST_STATIC_CONSTEXPR float_round_style round_style = round_to_nearest;
+private:
+ struct data_initializer
+ {
+ data_initializer()
+ {
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::epsilon();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::round_error();
+ (std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::min)();
+ (std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::max)();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity();
+ std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN();
+ }
+ void do_nothing()const{}
+ };
+ static const data_initializer initializer;
+};
+
+template<unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+const typename numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::data_initializer numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::initializer;
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::digits;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::digits10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_digits10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_signed;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_integer;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_exact;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST int numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::radix;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::min_exponent;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::min_exponent10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_exponent;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST typename boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_type numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::max_exponent10;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_infinity;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_quiet_NaN;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_signaling_NaN;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm_loss;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_iec559;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_bounded;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::is_modulo;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::traps;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::tinyness_before;
+template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
+BOOST_CONSTEXPR_OR_CONST float_round_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::round_style;
+
+#endif
+
+} // namespace std
+
+#endif

Added: trunk/boost/multiprecision/cpp_bin_float/io.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/boost/multiprecision/cpp_bin_float/io.hpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,690 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifndef BOOST_MP_CPP_BIN_FLOAT_IO_HPP
+#define BOOST_MP_CPP_BIN_FLOAT_IO_HPP
+
+namespace boost{ namespace multiprecision{ namespace cpp_bf_io_detail{
+
+//
+// Multiplies a by b and shifts the result so it fits inside max_bits bits,
+// returns by how much the result was shifted.
+//
+template <class I>
+inline I restricted_multiply(cpp_int& result, const cpp_int& a, const cpp_int& b, I max_bits, boost::int64_t& error)
+{
+ result = a * b;
+ I gb = msb(result);
+ I rshift = 0;
+ if(gb > max_bits)
+ {
+ rshift = gb - max_bits;
+ I lb = lsb(result);
+ int roundup = 0;
+ // The error rate increases by the error of both a and b,
+ // this may be overly pessimistic in many case as we're assuming
+ // that a and b have the same level of uncertainty...
+ if(lb < rshift)
+ error = error ? error * 2 : 1;
+ if(rshift)
+ {
+ BOOST_ASSERT(rshift < INT_MAX);
+ if(bit_test(result, static_cast<unsigned>(rshift - 1)))
+ {
+ if(lb == rshift - 1)
+ roundup = 1;
+ else
+ roundup = 2;
+ }
+ result >>= rshift;
+ }
+ if((roundup == 2) || ((roundup == 1) && (result.backend().limbs()[0] & 1)))
+ ++result;
+ }
+ return rshift;
+}
+//
+// Computes a^e shifted to the right so it fits in max_bits, returns how far
+// to the right we are shifted.
+//
+template <class I>
+inline I restricted_pow(cpp_int& result, const cpp_int& a, I e, I max_bits, boost::int64_t& error)
+{
+ BOOST_ASSERT(&result != &a);
+ I exp = 0;
+ if(e == 1)
+ {
+ result = a;
+ return exp;
+ }
+ else if(e == 2)
+ {
+ return restricted_multiply(result, a, a, max_bits, error);
+ }
+ else if(e == 3)
+ {
+ exp = restricted_multiply(result, a, a, max_bits, error);
+ exp += restricted_multiply(result, result, a, max_bits, error);
+ return exp;
+ }
+ I p = e / 2;
+ exp = restricted_pow(result, a, p, max_bits, error);
+ exp *= 2;
+ exp += restricted_multiply(result, result, result, max_bits, error);
+ if(e & 1)
+ exp += restricted_multiply(result, result, a, max_bits, error);
+ return exp;
+}
+
+inline int get_round_mode(const cpp_int& what, boost::int64_t location, boost::int64_t error)
+{
+ //
+ // Can we round what at /location/, if the error in what is /error/ in
+ // units of 0.5ulp. Return:
+ //
+ // -1: Can't round.
+ // 0: leave as is.
+ // 1: tie.
+ // 2: round up.
+ //
+ BOOST_ASSERT(location >= 0);
+ BOOST_ASSERT(location < INT_MAX);
+ boost::int64_t error_radius = error & 1 ? (1 + error) / 2 : error / 2;
+ if(error_radius && ((int)msb(error_radius) >= location))
+ return -1;
+ if(bit_test(what, static_cast<unsigned>(location)))
+ {
+ if((int)lsb(what) == location)
+ return error ? -1 : 1; // Either a tie or can't round depending on whether we have any error
+ if(!error)
+ return 2; // no error, round up.
+ cpp_int t = what - error_radius;
+ if((int)lsb(t) >= location)
+ return -1;
+ return 2;
+ }
+ else if(error)
+ {
+ cpp_int t = what + error_radius;
+ return bit_test(t, static_cast<unsigned>(location)) ? -1 : 0;
+ }
+ return 0;
+}
+
+inline int get_round_mode(cpp_int& r, cpp_int& d, boost::int64_t error, const cpp_int& q)
+{
+ //
+ // Lets suppose we have an inexact division by d+delta, where the true
+ // value for the divisor is d, and with |delta| <= error/2, then
+ // we have calculated q and r such that:
+ //
+ // n r
+ // --- = q + -----------
+ // d + error d + error
+ //
+ // Rearranging for n / d we get:
+ //
+ // n delta*q + r
+ // --- = q + -------------
+ // d d
+ //
+ // So rounding depends on whether 2r + error * q > d.
+ //
+ // We return:
+ // 0 = down down.
+ // 1 = tie.
+ // 2 = round up.
+ // -1 = couldn't decide.
+ //
+ r <<= 1;
+ int c = r.compare(d);
+ if(c == 0)
+ return error ? -1 : 1;
+ if(c > 0)
+ {
+ if(error)
+ {
+ r -= error * q;
+ return r.compare(d) > 0 ? 2 : -1;
+ }
+ return 2;
+ }
+ if(error)
+ {
+ r += error * q;
+ return r.compare(d) < 0 ? 0 : -1;
+ }
+ return 0;
+}
+
+} // namespace
+
+namespace backends{
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>& cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::operator=(const char *s)
+{
+ cpp_int n;
+ boost::intmax_t decimal_exp = 0;
+ boost::intmax_t digits_seen = 0;
+ static const boost::intmax_t max_digits_seen = 4 + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count * 301L) / 1000;
+ bool ss = false;
+ //
+ // Extract the sign:
+ //
+ if(*s == '-')
+ {
+ ss = true;
+ ++s;
+ }
+ else if(*s == '+')
+ ++s;
+ //
+ // Special cases first:
+ //
+ if((std::strcmp(s, "nan") == 0) || (std::strcmp(s, "NaN") == 0) || (std::strcmp(s, "NAN") == 0))
+ {
+ return *this = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::quiet_NaN().backend();
+ }
+ if((std::strcmp(s, "inf") == 0) || (std::strcmp(s, "Inf") == 0) || (std::strcmp(s, "INF") == 0) || (std::strcmp(s, "infinity") == 0) || (std::strcmp(s, "Infinity") == 0) || (std::strcmp(s, "INFINITY") == 0))
+ {
+ *this = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::infinity().backend();
+ if(ss)
+ negate();
+ return *this;
+ }
+ //
+ // Digits before the point:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ n *= 10u;
+ n += *s - '0';
+ if(digits_seen || (*s != '0'))
+ ++digits_seen;
+ ++s;
+ }
+ // The decimal point (we really should localise this!!)
+ if(*s && (*s == '.'))
+ ++s;
+ //
+ // Digits after the point:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ n *= 10u;
+ n += *s - '0';
+ --decimal_exp;
+ if(digits_seen || (*s != '0'))
+ ++digits_seen;
+ ++s;
+ if(digits_seen > max_digits_seen)
+ break;
+ }
+ //
+ // Digits we're skipping:
+ //
+ while(*s && (*s >= '0') && (*s <= '9'))
+ ++s;
+ //
+ // See if there's an exponent:
+ //
+ if(*s && ((*s == 'e') || (*s == 'E')))
+ {
+ ++s;
+ boost::intmax_t e = 0;
+ bool es = false;
+ if(*s && (*s == '-'))
+ {
+ es = true;
+ ++s;
+ }
+ else if(*s && (*s == '+'))
+ ++s;
+ while(*s && (*s >= '0') && (*s <= '9'))
+ {
+ e *= 10u;
+ e += *s - '0';
+ ++s;
+ }
+ if(es)
+ e = -e;
+ decimal_exp += e;
+ }
+ if(*s)
+ {
+ //
+ // Oops unexpected input at the end of the number:
+ //
+ BOOST_THROW_EXCEPTION(std::runtime_error("Unable to parse string as a valid floating point number."));
+ }
+ if(n == 0)
+ {
+ // Result is necessarily zero:
+ *this = static_cast<limb_type>(0u);
+ return *this;
+ }
+
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ //
+ // Set our working precision - this is heuristic based, we want
+ // a value as small as possible > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count to avoid large computations
+ // and excessive memory usage, but we also want to avoid having to
+ // up the computation and start again at a higher precision.
+ // So we round cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count up to the nearest whole number of limbs, and add
+ // one limb for good measure. This works very well for small exponents,
+ // but for larger exponents we may may need to restart, we could add some
+ // extra precision right from the start for larger exponents, but this
+ // seems to be slightly slower in the *average* case:
+ //
+#ifdef BOOST_MP_STRESS_IO
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 32;
+#else
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits ? limb_bits - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits : 0) + limb_bits;
+#endif
+ boost::int64_t error = 0;
+ boost::intmax_t calc_exp = 0;
+ boost::intmax_t final_exponent = 0;
+
+ if(decimal_exp >= 0)
+ {
+ // Nice and simple, the result is an integer...
+ do
+ {
+ cpp_int t;
+ if(decimal_exp)
+ {
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(t, cpp_int(5), decimal_exp, max_bits, error);
+ calc_exp += boost::multiprecision::cpp_bf_io_detail::restricted_multiply(t, t, n, max_bits, error);
+ }
+ else
+ t = n;
+ final_exponent = (boost::int64_t)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 + decimal_exp + calc_exp;
+ int rshift = msb(t) - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ if(rshift > 0)
+ {
+ final_exponent += rshift;
+ int roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(t, rshift - 1, error);
+ t >>= rshift;
+ if((roundup == 2) || ((roundup == 1) && t.backend().limbs()[0] & 1))
+ ++t;
+ else if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ error = 0;
+ continue;
+ }
+ }
+ else
+ {
+ BOOST_ASSERT(!error);
+ }
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ final_exponent = 0;
+ }
+ copy_and_round(*this, t.backend());
+ break;
+ }
+ while(true);
+
+ if(ss != sign())
+ negate();
+ }
+ else
+ {
+ // Result is the ratio of two integers: we need to organise the
+ // division so as to produce at least an N-bit result which we can
+ // round according to the remainder.
+ //cpp_int d = pow(cpp_int(5), -decimal_exp);
+ do
+ {
+ cpp_int d;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(d, cpp_int(5), -decimal_exp, max_bits, error);
+ int shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - msb(n) + msb(d);
+ final_exponent = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1 + decimal_exp - calc_exp;
+ if(shift > 0)
+ {
+ n <<= shift;
+ final_exponent -= static_cast<Exponent>(shift);
+ }
+ cpp_int q, r;
+ divide_qr(n, d, q, r);
+ int gb = msb(q);
+ BOOST_ASSERT((gb >= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ //
+ // Check for rounding conditions we have to
+ // handle ourselves:
+ //
+ int roundup = 0;
+ if(gb == cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1)
+ {
+ // Exactly the right number of bits, use the remainder to round:
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(r, d, error, q);
+ }
+ else if(bit_test(q, gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count) && ((int)lsb(q) == (gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count)))
+ {
+ // Too many bits in q and the bits in q indicate a tie, but we can break that using r,
+ // note that the radius of error in r is error/2 * q:
+ int shift = gb - (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 1;
+ q >>= shift;
+ final_exponent += static_cast<Exponent>(shift);
+ BOOST_ASSERT((msb(q) >= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - 1));
+ if(error && (r < (error / 2) * q))
+ roundup = -1;
+ else if(error && (r + (error / 2) * q >= d))
+ roundup = -1;
+ else
+ roundup = r ? 2 : 1;
+ }
+ else if(error && (((error / 2) * q + r >= d) || (r < (error / 2) * q)))
+ {
+ // We might have been rounding up, or got the wrong quotient: can't tell!
+ roundup = -1;
+ }
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ error = 0;
+ if(shift > 0)
+ {
+ n >>= shift;
+ final_exponent += static_cast<Exponent>(shift);
+ }
+ continue;
+ }
+ else if((roundup == 2) || ((roundup == 1) && q.backend().limbs()[0] & 1))
+ ++q;
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent;
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ final_exponent -= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ final_exponent = 0;
+ }
+ copy_and_round(*this, q.backend());
+ if(ss != sign())
+ negate();
+ break;
+ }
+ while(true);
+ }
+ //
+ // Check for scaling and/or over/under-flow:
+ //
+ final_exponent += exponent();
+ if(final_exponent > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // Overflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_infinity;
+ bits() = limb_type(0);
+ }
+ else if(final_exponent < cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::min_exponent)
+ {
+ // Underflow:
+ exponent() = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::exponent_zero;
+ bits() = limb_type(0);
+ sign() = 0;
+ }
+ else
+ {
+ exponent() = static_cast<Exponent>(final_exponent);
+ }
+ return *this;
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+std::string cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::str(std::streamsize dig, std::ios_base::fmtflags f) const
+{
+ if(dig == 0)
+ dig = std::numeric_limits<number<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> > >::max_digits10;
+
+ bool scientific = (f & std::ios_base::scientific) == std::ios_base::scientific;
+ bool fixed = !scientific && (f & std::ios_base::fixed);
+
+ std::string s;
+
+ if(exponent() <= cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent)
+ {
+ // How far to left-shift in order to demormalise the mantissa:
+ boost::intmax_t shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1;
+ boost::intmax_t digits_wanted = static_cast<int>(dig);
+ boost::intmax_t base10_exp = exponent() >= 0 ? static_cast<boost::intmax_t>(std::floor(0.30103 * exponent())) : static_cast<boost::intmax_t>(std::ceil(0.30103 * exponent()));
+ //
+ // For fixed formatting we want /dig/ digits after the decimal point,
+ // so if the exponent is zero, allowing for the one digit before the
+ // decimal point, we want 1 + dig digits etc.
+ //
+ if(fixed)
+ digits_wanted += 1 + base10_exp;
+ if(scientific)
+ digits_wanted += 1;
+ if(digits_wanted < -1)
+ {
+ // Fixed precision, no significant digits, and nothing to round!
+ s = "0";
+ if(sign())
+ s.insert(0, 1, '-');
+ boost::multiprecision::detail::format_float_string(s, base10_exp, dig, f, true);
+ return s;
+ }
+ //
+ // power10 is the base10 exponent we need to multiply/divide by in order
+ // to convert our denormalised number to an integer with the right number of digits:
+ //
+ boost::intmax_t power10 = digits_wanted - base10_exp - 1;
+ //
+ // If we calculate 5^power10 rather than 10^power10 we need to move
+ // 2^power10 into /shift/
+ //
+ shift -= power10;
+ cpp_int i;
+ int roundup = 0; // 0=no rounding, 1=tie, 2=up
+ static const unsigned limb_bits = sizeof(limb_type) * CHAR_BIT;
+ //
+ // Set our working precision - this is heuristic based, we want
+ // a value as small as possible > cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count to avoid large computations
+ // and excessive memory usage, but we also want to avoid having to
+ // up the computation and start again at a higher precision.
+ // So we round cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count up to the nearest whole number of limbs, and add
+ // one limb for good measure. This works very well for small exponents,
+ // but for larger exponents we add a few extra limbs to max_bits:
+ //
+#ifdef BOOST_MP_STRESS_IO
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + 32;
+#else
+ boost::intmax_t max_bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count + (cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits ? limb_bits - cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count % limb_bits : 0) + limb_bits;
+ if(power10)
+ max_bits += (msb(std::abs(power10)) / 8) * limb_bits;
+#endif
+ do
+ {
+ boost::int64_t error = 0;
+ boost::intmax_t calc_exp = 0;
+ //
+ // Our integer result is: bits() * 2^-shift * 5^power10
+ //
+ i = bits();
+ if(shift < 0)
+ {
+ if(power10 >= 0)
+ {
+ // We go straight to the answer with all integer arithmetic,
+ // the result is always exact and never needs rounding:
+ BOOST_ASSERT(power10 <= (boost::intmax_t)INT_MAX);
+ i <<= -shift;
+ if(power10)
+ i *= pow(cpp_int(5), static_cast<unsigned>(power10));
+ }
+ else if(power10 < 0)
+ {
+ cpp_int d;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(d, cpp_int(5), -power10, max_bits, error);
+ shift += calc_exp;
+ BOOST_ASSERT(shift < 0); // Must still be true!
+ i <<= -shift;
+ cpp_int r;
+ divide_qr(i, d, i, r);
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(r, d, error, i);
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ }
+ }
+ else
+ {
+ //
+ // Our integer is bits() * 2^-shift * 10^power10
+ //
+ if(power10 > 0)
+ {
+ if(power10)
+ {
+ cpp_int t;
+ calc_exp = boost::multiprecision::cpp_bf_io_detail::restricted_pow(t, cpp_int(5), power10, max_bits, error);
+ calc_exp += boost::multiprecision::cpp_bf_io_detail::restricted_multiply(i, i, t, max_bits, error);
+ shift -= calc_exp;
+ }
+ if((shift < 0) || ((shift == 0) && error))
+ {
+ // We only get here if we were asked for a crazy number of decimal digits -
+ // more than are present in a 2^max_bits number.
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ if(shift)
+ {
+ roundup = boost::multiprecision::cpp_bf_io_detail::get_round_mode(i, shift - 1, error);
+ if(roundup < 0)
+ {
+#ifdef BOOST_MP_STRESS_IO
+ max_bits += 32;
+#else
+ max_bits *= 2;
+#endif
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ continue;
+ }
+ i >>= shift;
+ }
+ }
+ else
+ {
+ // We're right shifting, *and* dividing by 5^-power10,
+ // so 5^-power10 can never be that large or we'd simply
+ // get zero as a result, and that case is already handled above:
+ cpp_int r;
+ BOOST_ASSERT(-power10 < INT_MAX);
+ cpp_int d = pow(cpp_int(5), static_cast<unsigned>(-power10));
+ d <<= shift;
+ divide_qr(i, d, i, r);
+ r <<= 1;
+ int c = r.compare(d);
+ roundup = c < 0 ? 0 : c == 0 ? 1 : 2;
+ }
+ }
+ s = i.str(0, std::ios_base::fmtflags(0));
+ //
+ // Check if we got the right number of digits, this
+ // is really a test of whether we calculated the
+ // decimal exponent correctly:
+ //
+ boost::intmax_t digits_got = i ? static_cast<boost::intmax_t>(s.size()) : 0;
+ if(digits_got != digits_wanted)
+ {
+ base10_exp += digits_got - digits_wanted;
+ if(fixed)
+ digits_wanted = digits_got; // strange but true.
+ power10 = digits_wanted - base10_exp - 1;
+ shift = (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count - exponent() - 1 - power10;
+ if(fixed)
+ break;
+ roundup = 0;
+ }
+ else
+ break;
+ }
+ while(true);
+ //
+ // Check whether we need to round up: note that we could equally round up
+ // the integer /i/ above, but since we need to perform the rounding *after*
+ // the conversion to a string and the digit count check, we might as well
+ // do it here:
+ //
+ if((roundup == 2) || ((roundup == 1) && ((s[s.size() - 1] - '0') & 1)))
+ {
+ boost::multiprecision::detail::round_string_up_at(s, static_cast<int>(s.size() - 1), base10_exp);
+ }
+
+ if(sign())
+ s.insert(0, 1, '-');
+
+ boost::multiprecision::detail::format_float_string(s, base10_exp, dig, f, false);
+ }
+ else
+ {
+ switch(exponent())
+ {
+ case exponent_zero:
+ s = "0";
+ boost::multiprecision::detail::format_float_string(s, 0, dig, f, true);
+ break;
+ case exponent_nan:
+ s = "nan";
+ break;
+ case exponent_infinity:
+ s = sign() ? "-inf" : f & std::ios_base::showpos ? "+inf" : "inf";
+ break;
+ }
+ }
+ return s;
+}
+
+}}} // namespaces
+
+#endif
+

Added: trunk/boost/multiprecision/cpp_bin_float/transcendental.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/boost/multiprecision/cpp_bin_float/transcendental.hpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,132 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifndef BOOST_MULTIPRECISION_CPP_BIN_FLOAT_TRANSCENDENTAL_HPP
+#define BOOST_MULTIPRECISION_CPP_BIN_FLOAT_TRANSCENDENTAL_HPP
+
+namespace boost{ namespace multiprecision{ namespace backends{
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+void eval_exp_taylor(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ static const int bits = cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::bit_count;
+ //
+ // Taylor series for small argument, note returns exp(x) - 1:
+ //
+ res = limb_type(0);
+ cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> num(arg), denom, t;
+ denom = limb_type(1);
+ eval_add(res, num);
+
+ for(unsigned k = 2; ; ++k)
+ {
+ eval_multiply(denom, k);
+ eval_multiply(num, arg);
+ eval_divide(t, num, denom);
+ eval_add(res, t);
+ if(eval_is_zero(t) || (res.exponent() - bits > t.exponent()))
+ break;
+ }
+}
+
+template <unsigned Digits, digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE>
+void eval_exp(cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &res, const cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> &arg)
+{
+ //
+ // This is based on MPFR's method, let:
+ //
+ // n = floor(x / ln(2))
+ //
+ // Then:
+ //
+ // r = x - n ln(2) : 0 <= r < ln(2)
+ //
+ // We can reduce r further by dividing by 2^k, with k ~ sqrt(n),
+ // so if:
+ //
+ // e0 = exp(r / 2^k) - 1
+ //
+ // With e0 evaluated by taylor series for small arguments, then:
+ //
+ // exp(x) = 2^n (1 + e0)^2^k
+ //
+ // Note that to preserve precision we actually square (1 + e0) k times, calculating
+ // the result less one each time, i.e.
+ //
+ // (1 + e0)^2 - 1 = e0^2 + 2e0
+ //
+ // Then add the final 1 at the end, given that e0 is small, this effectively wipes
+ // out the error in the last step.
+ //
+ using default_ops::eval_multiply;
+ using default_ops::eval_subtract;
+ using default_ops::eval_add;
+ using default_ops::eval_convert_to;
+
+ int type = eval_fpclassify(arg);
+ bool isneg = eval_get_sign(arg) < 0;
+ if(type == FP_NAN)
+ {
+ res = arg;
+ return;
+ }
+ else if(type == FP_INFINITE)
+ {
+ res = arg;
+ if(isneg)
+ res = limb_type(0u);
+ else
+ res = arg;
+ return;
+ }
+ else if(type == FP_ZERO)
+ {
+ res = limb_type(1);
+ return;
+ }
+ cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> t, n;
+ if(isneg)
+ {
+ t = arg;
+ t.negate();
+ eval_exp(res, t);
+ t.swap(res);
+ res = limb_type(1);
+ eval_divide(res, t);
+ return;
+ }
+
+ eval_divide(n, arg, default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >());
+ eval_floor(n, n);
+ eval_multiply(t, n, default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >());
+ eval_subtract(t, arg);
+ t.negate();
+ BOOST_ASSERT(t.compare(limb_type(0)) >= 0);
+ BOOST_ASSERT(t.compare(default_ops::get_constant_ln2<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE> >()) < 0);
+
+ Exponent k, nn;
+ eval_convert_to(&nn, n);
+ k = nn ? Exponent(1) << (msb(nn) / 2) : 0;
+ eval_ldexp(t, t, -k);
+
+ eval_exp_taylor(res, t);
+ //
+ // Square 1 + res k times:
+ //
+ for(int s = 0; s < k; ++s)
+ {
+ t.swap(res);
+ eval_multiply(res, t, t);
+ eval_ldexp(t, t, 1);
+ eval_add(res, t);
+ }
+ eval_add(res, limb_type(1));
+ eval_ldexp(res, res, nn);
+}
+
+}}} // namespaces
+
+#endif
+

Modified: trunk/libs/multiprecision/doc/Jamfile.v2
==============================================================================
--- trunk/libs/multiprecision/doc/Jamfile.v2 Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/Jamfile.v2 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -74,7 +74,8 @@
         <format>pdf:<xsl:param>index.on.type=1
     ;
 
-install pdf-install : standalone : <location>. <install-type>PDF <name>multiprecision.pdf ;
+install pdfinstall : standalone : <location>. <install-type>PDF <name>multiprecision.pdf ;
+
 
 
 

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -7,7 +7,6 @@
 <link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="prev" href="map/ack.html" title="Acknowledgements">
-<link rel="next" href="indexes/s01.html" title="Function Index">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,22 +19,20 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="indexes/s01.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
 <a name="boost_multiprecision.indexes"></a><a class="link" href="indexes.html" title="Indexes">Indexes</a>
 </h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section">Function Index</span></dt>
-<dt><span class="section">Class Index</span></dt>
-<dt><span class="section">Typedef Index</span></dt>
-<dt><span class="section">Index</span></dt>
-</dl></div>
+<p>
+ [named_index function_name Function Index] [named_index class_name Class Index]
+ [named_index typedef_name Typedef Index] [index]
+ </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -43,7 +40,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="indexes/s01.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/intro.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/intro.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/intro.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -372,7 +372,7 @@
       for polynomial execution:
     </p>
 <div class="table">
-<a name="boost_multiprecision.intro.evaluation_of_order_6_polynomial_"></a><p class="title"><b>Table&#160;1.1.&#160;Evaluation of Order 6 Polynomial.</b></p>
+<a name="boost_multiprecision.intro.evaluation_of_order_6_polynomial"></a><p class="title"><b>Table&#160;1.1.&#160;Evaluation of Order 6 Polynomial.</b></p>
 <div class="table-contents"><table class="table" summary="Evaluation of Order 6 Polynomial.">
 <colgroup>
 <col>
@@ -486,7 +486,7 @@
       (50 decimal digits):
     </p>
 <div class="table">
-<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_bessel_function_test_data"></a><p class="title"><b>Table&#160;1.2.&#160;Evaluation of Boost.Math's Bessel function test data</b></p>
+<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_besse"></a><p class="title"><b>Table&#160;1.2.&#160;Evaluation of Boost.Math's Bessel function test data</b></p>
 <div class="table-contents"><table class="table" summary="Evaluation of Boost.Math's Bessel function test data">
 <colgroup>
 <col>
@@ -584,7 +584,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_non_central_t_distribution_test_data"></a><p class="title"><b>Table&#160;1.3.&#160;Evaluation of Boost.Math's Non-Central T distribution test data</b></p>
+<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_non_c"></a><p class="title"><b>Table&#160;1.3.&#160;Evaluation of Boost.Math's Non-Central T distribution test data</b></p>
 <div class="table-contents"><table class="table" summary="Evaluation of Boost.Math's Non-Central T distribution test data">
 <colgroup>
 <col>
@@ -696,7 +696,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/map.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/map.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/map.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -35,7 +35,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -50,7 +50,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -106,7 +106,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -28,6 +28,13 @@
 </h3></div></div></div>
 <h5>
 <a name="boost_multiprecision.map.hist.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.1_56"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_56">1.56</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Added list of values for numeric_limits.
+ </li></ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h1"></a>
         <span class="phrase"><a name="boost_multiprecision.map.hist.1_55"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_55">1.55</a>
       </h5>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
@@ -65,7 +72,7 @@
           </li>
 </ul></div>
 <h5>
-<a name="boost_multiprecision.map.hist.h1"></a>
+<a name="boost_multiprecision.map.hist.h2"></a>
         <span class="phrase"><a name="boost_multiprecision.map.hist.1_54"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_54">1.54</a>
       </h5>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
@@ -120,7 +127,7 @@
           </li>
 </ul></div>
 <h5>
-<a name="boost_multiprecision.map.hist.h2"></a>
+<a name="boost_multiprecision.map.hist.h3"></a>
         <span class="phrase"><a name="boost_multiprecision.map.hist.1_53"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_53">1.53</a>
       </h5>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
@@ -136,7 +143,7 @@
           </li>
 </ul></div>
 <h5>
-<a name="boost_multiprecision.map.hist.h3"></a>
+<a name="boost_multiprecision.map.hist.h4"></a>
         <span class="phrase"><a name="boost_multiprecision.map.hist.post_review_changes"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.post_review_changes">Post
         review changes</a>
       </h5>
@@ -190,7 +197,7 @@
           </li>
 </ul></div>
 <h5>
-<a name="boost_multiprecision.map.hist.h4"></a>
+<a name="boost_multiprecision.map.hist.h5"></a>
         <span class="phrase"><a name="boost_multiprecision.map.hist.pre_review_history"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.pre_review_history">Pre-review
         history</a>
       </h5>
@@ -213,7 +220,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -221,7 +221,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -29,7 +29,7 @@
 <div class="toc"><dl class="toc">
 <dt><span class="section"><a href="perf/overhead.html">The Overhead in the
       Number Class Wrapper</a></span></dt>
-<dt><span class="section"><a href="perf/realworld.html">Floating Point Real
+<dt><span class="section"><a href="perf/realworld.html">Floating-Point Real
       World Tests</a></span></dt>
 <dt><span class="section"><a href="perf/int_real_world.html">Integer Real
       World Tests</a></span></dt>
@@ -43,7 +43,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -37,7 +37,7 @@
         for 500000 operations.
       </p>
 <div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator__"></a><p class="title"><b>Table&#160;1.10.&#160;Operator +</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator"></a><p class="title"><b>Table&#160;1.14.&#160;Operator +</b></p>
 <div class="table-contents"><table class="table" summary="Operator +">
 <colgroup>
 <col>
@@ -138,7 +138,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator___int_"></a><p class="title"><b>Table&#160;1.11.&#160;Operator +(int)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_int"></a><p class="title"><b>Table&#160;1.15.&#160;Operator +(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(int)">
 <colgroup>
 <col>
@@ -239,7 +239,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table&#160;1.12.&#160;Operator +(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long"></a><p class="title"><b>Table&#160;1.16.&#160;Operator +(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
 <colgroup>
 <col>
@@ -340,7 +340,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table&#160;1.13.&#160;Operator +=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.17.&#160;Operator +=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
 <colgroup>
 <col>
@@ -441,7 +441,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator0"></a><p class="title"><b>Table&#160;1.14.&#160;Operator -</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator0"></a><p class="title"><b>Table&#160;1.18.&#160;Operator -</b></p>
 <div class="table-contents"><table class="table" summary="Operator -">
 <colgroup>
 <col>
@@ -542,7 +542,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int0"></a><p class="title"><b>Table&#160;1.15.&#160;Operator -(int)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_int0"></a><p class="title"><b>Table&#160;1.19.&#160;Operator -(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(int)">
 <colgroup>
 <col>
@@ -643,7 +643,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.16.&#160;Operator -(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.20.&#160;Operator -(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
 <colgroup>
 <col>
@@ -744,7 +744,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.17.&#160;Operator -=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.21.&#160;Operator -=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
 <colgroup>
 <col>
@@ -845,7 +845,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator1"></a><p class="title"><b>Table&#160;1.18.&#160;Operator *</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator1"></a><p class="title"><b>Table&#160;1.22.&#160;Operator *</b></p>
 <div class="table-contents"><table class="table" summary="Operator *">
 <colgroup>
 <col>
@@ -946,7 +946,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int1"></a><p class="title"><b>Table&#160;1.19.&#160;Operator *(int)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_int1"></a><p class="title"><b>Table&#160;1.23.&#160;Operator *(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(int)">
 <colgroup>
 <col>
@@ -1047,7 +1047,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.20.&#160;Operator *(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.24.&#160;Operator *(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
 <colgroup>
 <col>
@@ -1148,7 +1148,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.21.&#160;Operator *=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.25.&#160;Operator *=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
 <colgroup>
 <col>
@@ -1249,7 +1249,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator2"></a><p class="title"><b>Table&#160;1.22.&#160;Operator /</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator2"></a><p class="title"><b>Table&#160;1.26.&#160;Operator /</b></p>
 <div class="table-contents"><table class="table" summary="Operator /">
 <colgroup>
 <col>
@@ -1350,7 +1350,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int2"></a><p class="title"><b>Table&#160;1.23.&#160;Operator /(int)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_int2"></a><p class="title"><b>Table&#160;1.27.&#160;Operator /(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(int)">
 <colgroup>
 <col>
@@ -1451,7 +1451,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.24.&#160;Operator /(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.28.&#160;Operator /(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
 <colgroup>
 <col>
@@ -1552,7 +1552,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.25.&#160;Operator /=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table&#160;1.29.&#160;Operator /=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
 <colgroup>
 <col>
@@ -1653,7 +1653,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_construct"></a><p class="title"><b>Table&#160;1.26.&#160;Operator construct</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_construct"></a><p class="title"><b>Table&#160;1.30.&#160;Operator construct</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct">
 <colgroup>
 <col>
@@ -1754,7 +1754,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_"></a><p class="title"><b>Table&#160;1.27.&#160;Operator construct(unsigned)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned"></a><p class="title"><b>Table&#160;1.31.&#160;Operator construct(unsigned)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
 <colgroup>
 <col>
@@ -1855,7 +1855,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table&#160;1.28.&#160;Operator construct(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table&#160;1.32.&#160;Operator construct(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
 <colgroup>
 <col>
@@ -1956,7 +1956,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_str"></a><p class="title"><b>Table&#160;1.29.&#160;Operator str</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_str"></a><p class="title"><b>Table&#160;1.33.&#160;Operator str</b></p>
 <div class="table-contents"><table class="table" summary="Operator str">
 <colgroup>
 <col>
@@ -2064,7 +2064,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../perf.html" title="Performance Comparison">
-<link rel="prev" href="realworld.html" title="Floating Point Real World Tests">
+<link rel="prev" href="realworld.html" title="Floating-Point Real World Tests">
 <link rel="next" href="float_performance.html" title="Float Algorithm Performance">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -367,7 +367,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -37,7 +37,7 @@
         for 500000 operations.
       </p>
 <div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator__"></a><p class="title"><b>Table&#160;1.30.&#160;Operator +</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator"></a><p class="title"><b>Table&#160;1.34.&#160;Operator +</b></p>
 <div class="table-contents"><table class="table" summary="Operator +">
 <colgroup>
 <col>
@@ -186,7 +186,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator___int_"></a><p class="title"><b>Table&#160;1.31.&#160;Operator +(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int"></a><p class="title"><b>Table&#160;1.35.&#160;Operator +(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(int)">
 <colgroup>
 <col>
@@ -335,7 +335,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table&#160;1.32.&#160;Operator +(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long"></a><p class="title"><b>Table&#160;1.36.&#160;Operator +(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
 <colgroup>
 <col>
@@ -484,7 +484,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table&#160;1.33.&#160;Operator +=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.37.&#160;Operator +=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
 <colgroup>
 <col>
@@ -633,7 +633,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator0"></a><p class="title"><b>Table&#160;1.34.&#160;Operator -</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator0"></a><p class="title"><b>Table&#160;1.38.&#160;Operator -</b></p>
 <div class="table-contents"><table class="table" summary="Operator -">
 <colgroup>
 <col>
@@ -782,7 +782,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int0"></a><p class="title"><b>Table&#160;1.35.&#160;Operator -(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int0"></a><p class="title"><b>Table&#160;1.39.&#160;Operator -(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(int)">
 <colgroup>
 <col>
@@ -931,7 +931,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.36.&#160;Operator -(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.40.&#160;Operator -(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
 <colgroup>
 <col>
@@ -1080,7 +1080,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.37.&#160;Operator -=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.41.&#160;Operator -=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
 <colgroup>
 <col>
@@ -1229,7 +1229,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator1"></a><p class="title"><b>Table&#160;1.38.&#160;Operator *</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator1"></a><p class="title"><b>Table&#160;1.42.&#160;Operator *</b></p>
 <div class="table-contents"><table class="table" summary="Operator *">
 <colgroup>
 <col>
@@ -1378,7 +1378,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int1"></a><p class="title"><b>Table&#160;1.39.&#160;Operator *(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int1"></a><p class="title"><b>Table&#160;1.43.&#160;Operator *(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(int)">
 <colgroup>
 <col>
@@ -1527,7 +1527,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.40.&#160;Operator *(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.44.&#160;Operator *(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
 <colgroup>
 <col>
@@ -1676,7 +1676,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.41.&#160;Operator *=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.45.&#160;Operator *=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
 <colgroup>
 <col>
@@ -1825,7 +1825,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator2"></a><p class="title"><b>Table&#160;1.42.&#160;Operator /</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator2"></a><p class="title"><b>Table&#160;1.46.&#160;Operator /</b></p>
 <div class="table-contents"><table class="table" summary="Operator /">
 <colgroup>
 <col>
@@ -1974,7 +1974,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int2"></a><p class="title"><b>Table&#160;1.43.&#160;Operator /(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int2"></a><p class="title"><b>Table&#160;1.47.&#160;Operator /(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(int)">
 <colgroup>
 <col>
@@ -2123,7 +2123,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.44.&#160;Operator /(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.48.&#160;Operator /(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
 <colgroup>
 <col>
@@ -2272,7 +2272,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.45.&#160;Operator /=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table&#160;1.49.&#160;Operator /=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
 <colgroup>
 <col>
@@ -2421,7 +2421,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator3"></a><p class="title"><b>Table&#160;1.46.&#160;Operator %</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator3"></a><p class="title"><b>Table&#160;1.50.&#160;Operator %</b></p>
 <div class="table-contents"><table class="table" summary="Operator %">
 <colgroup>
 <col>
@@ -2570,7 +2570,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int3"></a><p class="title"><b>Table&#160;1.47.&#160;Operator %(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int3"></a><p class="title"><b>Table&#160;1.51.&#160;Operator %(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator %(int)">
 <colgroup>
 <col>
@@ -2719,7 +2719,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_construct"></a><p class="title"><b>Table&#160;1.48.&#160;Operator construct</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_construct"></a><p class="title"><b>Table&#160;1.52.&#160;Operator construct</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct">
 <colgroup>
 <col>
@@ -2868,7 +2868,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_"></a><p class="title"><b>Table&#160;1.49.&#160;Operator construct(unsigned)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned"></a><p class="title"><b>Table&#160;1.53.&#160;Operator construct(unsigned)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
 <colgroup>
 <col>
@@ -3017,7 +3017,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table&#160;1.50.&#160;Operator construct(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table&#160;1.54.&#160;Operator construct(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
 <colgroup>
 <col>
@@ -3166,7 +3166,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_gcd"></a><p class="title"><b>Table&#160;1.51.&#160;Operator gcd</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_gcd"></a><p class="title"><b>Table&#160;1.55.&#160;Operator gcd</b></p>
 <div class="table-contents"><table class="table" summary="Operator gcd">
 <colgroup>
 <col>
@@ -3315,7 +3315,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_powm"></a><p class="title"><b>Table&#160;1.52.&#160;Operator powm</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_powm"></a><p class="title"><b>Table&#160;1.56.&#160;Operator powm</b></p>
 <div class="table-contents"><table class="table" summary="Operator powm">
 <colgroup>
 <col>
@@ -3464,7 +3464,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_str"></a><p class="title"><b>Table&#160;1.53.&#160;Operator str</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_str"></a><p class="title"><b>Table&#160;1.57.&#160;Operator str</b></p>
 <div class="table-contents"><table class="table" summary="Operator str">
 <colgroup>
 <col>
@@ -3613,7 +3613,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator4"></a><p class="title"><b>Table&#160;1.54.&#160;Operator |</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator4"></a><p class="title"><b>Table&#160;1.58.&#160;Operator |</b></p>
 <div class="table-contents"><table class="table" summary="Operator |">
 <colgroup>
 <col>
@@ -3762,7 +3762,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int4"></a><p class="title"><b>Table&#160;1.55.&#160;Operator |(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int4"></a><p class="title"><b>Table&#160;1.59.&#160;Operator |(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator |(int)">
 <colgroup>
 <col>
@@ -3911,7 +3911,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator5"></a><p class="title"><b>Table&#160;1.56.&#160;Operator ^</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator5"></a><p class="title"><b>Table&#160;1.60.&#160;Operator ^</b></p>
 <div class="table-contents"><table class="table" summary="Operator ^">
 <colgroup>
 <col>
@@ -4060,7 +4060,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int5"></a><p class="title"><b>Table&#160;1.57.&#160;Operator ^(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int5"></a><p class="title"><b>Table&#160;1.61.&#160;Operator ^(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator ^(int)">
 <colgroup>
 <col>
@@ -4209,7 +4209,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator6"></a><p class="title"><b>Table&#160;1.58.&#160;Operator &amp;</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator6"></a><p class="title"><b>Table&#160;1.62.&#160;Operator &amp;</b></p>
 <div class="table-contents"><table class="table" summary="Operator &amp;">
 <colgroup>
 <col>
@@ -4358,7 +4358,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int6"></a><p class="title"><b>Table&#160;1.59.&#160;Operator &amp;(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int6"></a><p class="title"><b>Table&#160;1.63.&#160;Operator &amp;(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator &amp;(int)">
 <colgroup>
 <col>
@@ -4507,7 +4507,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator___"></a><p class="title"><b>Table&#160;1.60.&#160;Operator &lt;&lt;</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator7"></a><p class="title"><b>Table&#160;1.64.&#160;Operator &lt;&lt;</b></p>
 <div class="table-contents"><table class="table" summary="Operator &lt;&lt;">
 <colgroup>
 <col>
@@ -4656,7 +4656,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator7"></a><p class="title"><b>Table&#160;1.61.&#160;Operator &gt;&gt;</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator8"></a><p class="title"><b>Table&#160;1.65.&#160;Operator &gt;&gt;</b></p>
 <div class="table-contents"><table class="table" summary="Operator &gt;&gt;">
 <colgroup>
 <col>
@@ -4816,7 +4816,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../perf.html" title="Performance Comparison">
 <link rel="prev" href="../perf.html" title="Performance Comparison">
-<link rel="next" href="realworld.html" title="Floating Point Real World Tests">
+<link rel="next" href="realworld.html" title="Floating-Point Real World Tests">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -186,7 +186,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -37,7 +37,7 @@
         for 500000 operations.
       </p>
 <div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator__"></a><p class="title"><b>Table&#160;1.62.&#160;Operator +</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator"></a><p class="title"><b>Table&#160;1.66.&#160;Operator +</b></p>
 <div class="table-contents"><table class="table" summary="Operator +">
 <colgroup>
 <col>
@@ -132,7 +132,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator___int_"></a><p class="title"><b>Table&#160;1.63.&#160;Operator +(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_int"></a><p class="title"><b>Table&#160;1.67.&#160;Operator +(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(int)">
 <colgroup>
 <col>
@@ -227,7 +227,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table&#160;1.64.&#160;Operator +(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long"></a><p class="title"><b>Table&#160;1.68.&#160;Operator +(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
 <colgroup>
 <col>
@@ -322,7 +322,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table&#160;1.65.&#160;Operator +=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.69.&#160;Operator +=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
 <colgroup>
 <col>
@@ -417,7 +417,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator0"></a><p class="title"><b>Table&#160;1.66.&#160;Operator -</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator0"></a><p class="title"><b>Table&#160;1.70.&#160;Operator -</b></p>
 <div class="table-contents"><table class="table" summary="Operator -">
 <colgroup>
 <col>
@@ -512,7 +512,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int0"></a><p class="title"><b>Table&#160;1.67.&#160;Operator -(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_int0"></a><p class="title"><b>Table&#160;1.71.&#160;Operator -(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(int)">
 <colgroup>
 <col>
@@ -607,7 +607,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table&#160;1.68.&#160;Operator -(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.72.&#160;Operator -(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
 <colgroup>
 <col>
@@ -702,7 +702,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table&#160;1.69.&#160;Operator -=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.73.&#160;Operator -=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
 <colgroup>
 <col>
@@ -797,7 +797,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator1"></a><p class="title"><b>Table&#160;1.70.&#160;Operator *</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator1"></a><p class="title"><b>Table&#160;1.74.&#160;Operator *</b></p>
 <div class="table-contents"><table class="table" summary="Operator *">
 <colgroup>
 <col>
@@ -892,7 +892,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int1"></a><p class="title"><b>Table&#160;1.71.&#160;Operator *(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_int1"></a><p class="title"><b>Table&#160;1.75.&#160;Operator *(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(int)">
 <colgroup>
 <col>
@@ -987,7 +987,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table&#160;1.72.&#160;Operator *(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.76.&#160;Operator *(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
 <colgroup>
 <col>
@@ -1082,7 +1082,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table&#160;1.73.&#160;Operator *=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.77.&#160;Operator *=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
 <colgroup>
 <col>
@@ -1177,7 +1177,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator2"></a><p class="title"><b>Table&#160;1.74.&#160;Operator /</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator2"></a><p class="title"><b>Table&#160;1.78.&#160;Operator /</b></p>
 <div class="table-contents"><table class="table" summary="Operator /">
 <colgroup>
 <col>
@@ -1272,7 +1272,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int2"></a><p class="title"><b>Table&#160;1.75.&#160;Operator /(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_int2"></a><p class="title"><b>Table&#160;1.79.&#160;Operator /(int)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(int)">
 <colgroup>
 <col>
@@ -1367,7 +1367,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table&#160;1.76.&#160;Operator /(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.80.&#160;Operator /(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
 <colgroup>
 <col>
@@ -1462,7 +1462,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table&#160;1.77.&#160;Operator /=(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table&#160;1.81.&#160;Operator /=(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
 <colgroup>
 <col>
@@ -1557,7 +1557,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_construct"></a><p class="title"><b>Table&#160;1.78.&#160;Operator construct</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_construct"></a><p class="title"><b>Table&#160;1.82.&#160;Operator construct</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct">
 <colgroup>
 <col>
@@ -1652,7 +1652,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_"></a><p class="title"><b>Table&#160;1.79.&#160;Operator construct(unsigned)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned"></a><p class="title"><b>Table&#160;1.83.&#160;Operator construct(unsigned)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
 <colgroup>
 <col>
@@ -1747,7 +1747,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table&#160;1.80.&#160;Operator construct(unsigned long long)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table&#160;1.84.&#160;Operator construct(unsigned long long)</b></p>
 <div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
 <colgroup>
 <col>
@@ -1842,7 +1842,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_str"></a><p class="title"><b>Table&#160;1.81.&#160;Operator str</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_str"></a><p class="title"><b>Table&#160;1.85.&#160;Operator str</b></p>
 <div class="table-contents"><table class="table" summary="Operator str">
 <colgroup>
 <col>
@@ -1944,7 +1944,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -1,7 +1,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Floating Point Real World Tests</title>
+<title>Floating-Point Real World Tests</title>
 <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
@@ -24,7 +24,7 @@
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="boost_multiprecision.perf.realworld"></a><a class="link" href="realworld.html" title="Floating Point Real World Tests">Floating Point Real
+<a name="boost_multiprecision.perf.realworld"></a><a class="link" href="realworld.html" title="Floating-Point Real World Tests">Floating-Point Real
       World Tests</a>
 </h3></div></div></div>
 <p>
@@ -37,7 +37,7 @@
         also shown.
       </p>
 <div class="table">
-<a name="boost_multiprecision.perf.realworld.bessel_function_performance"></a><p class="title"><b>Table&#160;1.8.&#160;Bessel Function Performance</b></p>
+<a name="boost_multiprecision.perf.realworld.bessel_function_performance"></a><p class="title"><b>Table&#160;1.12.&#160;Bessel Function Performance</b></p>
 <div class="table-contents"><table class="table" summary="Bessel Function Performance">
 <colgroup>
 <col>
@@ -168,7 +168,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.realworld.non_central_t_distribution_performance"></a><p class="title"><b>Table&#160;1.9.&#160;Non-Central T Distribution Performance</b></p>
+<a name="boost_multiprecision.perf.realworld.non_central_t_distribution_perfo"></a><p class="title"><b>Table&#160;1.13.&#160;Non-Central T Distribution Performance</b></p>
 <div class="table-contents"><table class="table" summary="Non-Central T Distribution Performance">
 <colgroup>
 <col>
@@ -270,7 +270,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
-<link rel="prev" href="tut/serial.html" title="Boost.Serialization Support">
+<link rel="prev" href="tut/input_output.html" title="Input Output">
 <link rel="next" href="ref/number.html" title="number">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="tut/serial.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="tut/input_output.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -33,6 +33,7 @@
 <dt><span class="section">tom_int</span></dt>
 <dt><span class="section">gmp_float</span></dt>
 <dt><span class="section">mpfr_float_backend</span></dt>
+<dt><span class="section">cpp_bin_float</span></dt>
 <dt><span class="section">cpp_dec_float</span></dt>
 <dt><span class="section"><a href="ref/internals.html">Internal Support
       Code</a></span></dt>
@@ -42,7 +43,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -50,7 +51,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="tut/serial.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="tut/input_output.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -67,7 +67,7 @@
         is a variable of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">fmtflags</span></code>.
       </p>
 <div class="table">
-<a name="boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_"></a><p class="title"><b>Table&#160;1.4.&#160;Compulsory Requirements on the Backend type.</b></p>
+<a name="boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b"></a><p class="title"><b>Table&#160;1.8.&#160;Compulsory Requirements on the Backend type.</b></p>
 <div class="table-contents"><table class="table" summary="Compulsory Requirements on the Backend type.">
 <colgroup>
 <col>
@@ -954,7 +954,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type"></a><p class="title"><b>Table&#160;1.5.&#160;Optional Requirements on the Backend Type</b></p>
+<a name="boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac"></a><p class="title"><b>Table&#160;1.9.&#160;Optional Requirements on the Backend Type</b></p>
 <div class="table-contents"><table class="table" summary="Optional Requirements on the Backend Type">
 <colgroup>
 <col>
@@ -3897,7 +3897,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,186 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_bin_float</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../ref.html" title="Reference">
+<link rel="prev" href="mpfr_ref.html" title="mpfr_float_backend">
+<link rel="next" href="cpp_dec_ref.html" title="cpp_dec_float">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_multiprecision.ref.cpp_bin_float_ref"></a><a class="link" href="cpp_bin_float_ref.html" title="cpp_bin_float">cpp_bin_float</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span>
+
+<span class="keyword">enum</span> <span class="identifier">digit_base_type</span>
+<span class="special">{</span>
+ <span class="identifier">digit_base_2</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span>
+ <span class="identifier">digit_base_10</span> <span class="special">=</span> <span class="number">10</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits</span><span class="special">,</span> <span class="identifier">digit_base_type</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Exponent</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">ExponentMin</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">ExponentMax</span> <span class="special">=</span> <span class="number">0</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_bin_float</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_bin_float_50</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_bin_float_100</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">24</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">126</span><span class="special">,</span> <span class="number">127</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_single</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">53</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">1022</span><span class="special">,</span> <span class="number">1023</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_double</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">64</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_double_extended</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">113</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_quad</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a>
+ type. Its members and non-member functions are deliberately not documented:
+ these are considered implementation details that are subject to change.
+ </p>
+<p>
+ The class takes six template parameters:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Digits</span></dt>
+<dd><p>
+ The number of digits precision the type should support. This is normally
+ expresed as base-10 digits, but that can be changed via the second
+ template parameter.
+ </p></dd>
+<dt><span class="term">base</span></dt>
+<dd><p>
+ An enumerated value (either <code class="computeroutput"><span class="identifier">digit_base_10</span></code>
+ or <code class="computeroutput"><span class="identifier">digit_base_2</span></code>) that
+ indicates whether <code class="computeroutput"><span class="identifier">Digits</span></code>
+ is base-10 or base-2
+ </p></dd>
+<dt><span class="term">Allocator</span></dt>
+<dd><p>
+ The allocator used: defaults to type <code class="computeroutput"><span class="keyword">void</span></code>,
+ meaning all storage is within the class, and no dynamic allocation
+ is performed, but can be set to a standard library allocator if dynamic
+ allocation makes more sense.
+ </p></dd>
+<dt><span class="term">Exponent</span></dt>
+<dd><p>
+ A signed integer type to use as the type of the exponent - defaults
+ to <code class="computeroutput"><span class="keyword">int</span></code>.
+ </p></dd>
+<dt><span class="term">ExponentMin</span></dt>
+<dd><p>
+ The smallest (most negative) permitted exponent, defaults to zero,
+ meaning "define as small as possible given the limitations of
+ the type and our internal requirements".
+ </p></dd>
+<dt><span class="term">ExponentMax</span></dt>
+<dd><p>
+ The largest (most positive) permitted exponent, defaults to zero, meaning
+ "define as large as possible given the limitations of the type
+ and our internal requirements".
+ </p></dd>
+</dl>
+</div>
+<p>
+ The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">...&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="identifier">number_kind_floating_point</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">tutorial</a>.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.cpp_bin_float_ref.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.cpp_bin_float_ref.implementation_notes"></a></span><a class="link" href="cpp_bin_float_ref.html#boost_multiprecision.ref.cpp_bin_float_ref.implementation_notes">Implementation
+ Notes</a>
+ </h5>
+<p>
+ Internally, an N-bit <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ is represented as an N-bit unsigned integer along with an exponent and a
+ sign. The integer part is normalized so that it's most significant bit is
+ always 1. The decimal point is assumed to be directly after the most significant
+ bit of the integer part. The special values zero, infinity and NaN all have
+ the integer part set to zero, and the exponent to one of 3 special values
+ above the maximum permitted exponent.
+ </p>
+<p>
+ Multiplication is trivial: multiply the two N-bit integer mantissa's to obtain
+ a 2N-bit number, then round and adjust the sign and exponent.
+ </p>
+<p>
+ Addition and subtraction proceed similarly - if the exponents are such that
+ there is overlap between the two values, then left shift the larger value
+ to produce a number with between N and 2N bits, then perform integer addition
+ or subtraction, round, and adjust the exponent.
+ </p>
+<p>
+ Division proceeds as follows: first scale the numerator by some power of
+ 2 so that integer division will produce either an N-bit or N+1 bit result
+ plus a remainder. If we get an N bit result then the size of twice the remainder
+ compared to the denominator gives us the rounding direction. Otherwise we
+ have one extra bit in the result which we can use to determine rounding (in
+ this case ties occur only if the remainder is zero and the extra bit is a
+ 1).
+ </p>
+<p>
+ Square root uses integer square root in a manner analogous to division.
+ </p>
+<p>
+ Decimal string to binary conversion proceeds as follows: first parse the
+ digits to produce an integer multiplied by a decimal exponent. Note that
+ we stop parsing digits once we have parsed as many as can possibly effect
+ the result - this stops the integer part growing too large when there are
+ a very large number of input digits provided. At this stage if the decimal
+ exponent is positive then the result is an integer and we can in principle
+ simply multiply by 10^N to get an exact integer result. In practice however,
+ that could produce some very large integers. We also need to be able to divide
+ by 10^N in the event that the exponent is negative. Therefore calculation
+ of the 10^N values plus the multiplication or division are performed using
+ limited precision integer arithmetic, plus an exponent, and a track of the
+ accumulated error. At the end of the calculation we will either be able to
+ round unambiguously, or the error will be such that we can't tell which way
+ to round. In the latter case we simply up the precision and try again until
+ we have an unambiguously rounded result.
+ </p>
+<p>
+ Binary to decimal conversion proceeds very similarly to the above, our aim
+ is to calculate <code class="computeroutput"><span class="identifier">mantissa</span> <span class="special">*</span> <span class="number">2</span><span class="special">^</span><span class="identifier">shift</span> <span class="special">*</span> <span class="number">10</span><span class="special">^</span><span class="identifier">E</span></code>
+ where <code class="computeroutput"><span class="identifier">E</span></code> is the decimal exponent
+ and <code class="computeroutput"><span class="identifier">shift</span></code> is calculated so
+ that the result is an N bit integer assuming we want N digits printed in
+ the result. As before we use limitted precision arithmetic to calculate the
+ result and up the precision as necessary until the result is unambiguously
+ correctly rounded. In addition our initial calculation of the decimal exponent
+ may be out by 1, so we have to correct that and loop as well in the that
+ case.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../ref.html" title="Reference">
-<link rel="prev" href="mpfr_ref.html" title="mpfr_float_backend">
+<link rel="prev" href="cpp_bin_float_ref.html" title="cpp_bin_float">
 <link rel="next" href="internals.html" title="Internal Support Code">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
@@ -70,7 +70,7 @@
 </dl>
 </div>
 <p>
- The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special">&lt;</span><span class="identifier">cpp_int</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">...&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="identifier">number_kind_floating_point</span><span class="special">&gt;</span></code>.
+ The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">...&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="identifier">number_kind_floating_point</span><span class="special">&gt;</span></code>.
       </p>
 <p>
         More information on this type can be found in the <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">tutorial</a>.
@@ -78,7 +78,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -86,7 +86,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -143,7 +143,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -49,7 +49,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -27,7 +27,7 @@
 <a name="boost_multiprecision.ref.headers"></a><a class="link" href="headers.html" title="Header File Structure">Header File Structure</a>
 </h3></div></div></div>
 <div class="table">
-<a name="boost_multiprecision.ref.headers.top_level_headers"></a><p class="title"><b>Table&#160;1.6.&#160;Top level headers</b></p>
+<a name="boost_multiprecision.ref.headers.top_level_headers"></a><p class="title"><b>Table&#160;1.10.&#160;Top level headers</b></p>
 <div class="table-contents"><table class="table" summary="Top level headers">
 <colgroup>
 <col>
@@ -176,8 +176,8 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="boost_multiprecision.ref.headers.implementation_headers_"></a><p class="title"><b>Table&#160;1.7.&#160;Implementation Headers]</b></p>
-<div class="table-contents"><table class="table" summary="Implementation Headers]">
+<a name="boost_multiprecision.ref.headers.implementation_headers"></a><p class="title"><b>Table&#160;1.11.&#160;Implementation Headers</b></p>
+<div class="table-contents"><table class="table" summary="Implementation Headers">
 <colgroup>
 <col>
 <col>
@@ -410,7 +410,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -100,7 +100,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -65,7 +65,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../ref.html" title="Reference">
 <link rel="prev" href="mpf_ref.html" title="gmp_float">
-<link rel="next" href="cpp_dec_ref.html" title="cpp_dec_float">
+<link rel="next" href="cpp_bin_float_ref.html" title="cpp_bin_float">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
@@ -65,7 +65,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -73,7 +73,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -477,11 +477,11 @@
 <li class="listitem">
             Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span>
             <span class="special">==</span> <span class="identifier">other</span></code>
- </li>
-</ul></div>
 <pre class="programlisting"><span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">backend</span><span class="special">();</span>
 <span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">backend</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
 </pre>
+ </li>
+</ul></div>
 <p>
         Returns the underlying back-end instance used by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
       </p>
@@ -589,7 +589,7 @@
       </p>
 <h5>
 <a name="boost_multiprecision.ref.number.h5"></a>
- <span class="phrase"><a name="boost_multiprecision.ref.number.arithmetic_with_a_higher_precision_result"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.arithmetic_with_a_higher_precision_result">Arithmetic
+ <span class="phrase"><a name="boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi">Arithmetic
         with a higher precision result</a>
       </h5>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">&gt;</span>
@@ -621,7 +621,7 @@
       </p>
 <h5>
 <a name="boost_multiprecision.ref.number.h6"></a>
- <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_standard_library_function_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_standard_library_function_support">Non-member
+ <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_standard_library_func"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_standard_library_func">Non-member
         standard library function support</a>
       </h5>
 <pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">abs</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
@@ -1255,7 +1255,7 @@
       </p>
 <h5>
 <a name="boost_multiprecision.ref.number.h10"></a>
- <span class="phrase"><a name="boost_multiprecision.ref.number.boost_math_interoperability_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.boost_math_interoperability_support">Boost.Math
+ <span class="phrase"><a name="boost_multiprecision.ref.number.boost_math_interoperability_supp"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.boost_math_interoperability_supp">Boost.Math
         Interoperability Support</a>
       </h5>
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span>
@@ -1278,7 +1278,7 @@
       </p>
 <h5>
 <a name="boost_multiprecision.ref.number.h11"></a>
- <span class="phrase"><a name="boost_multiprecision.ref.number.std__numeric_limits_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.std__numeric_limits_support">std::numeric_limits
+ <span class="phrase"><a name="boost_multiprecision.ref.number.std_numeric_limits_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.std_numeric_limits_support">std::numeric_limits
         support</a>
       </h5>
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span>
@@ -1301,7 +1301,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -49,7 +49,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -40,6 +40,7 @@
 </dl></dd>
 <dt><span class="section">Floating Point Numbers</span></dt>
 <dd><dl>
+<dt><span class="section">cpp_bin_float</span></dt>
 <dt><span class="section">cpp_dec_float</span></dt>
 <dt><span class="section">gmp_float</span></dt>
 <dt><span class="section">mpfr_float</span></dt>
@@ -86,6 +87,18 @@
 <dt><span class="section">Generic Integer Operations</span></dt>
 <dt><span class="section"><a href="tut/serial.html">Boost.Serialization
       Support</a></span></dt>
+<dt><span class="section">Numeric Limits</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/limits/constants.html">std::numeric_limits&lt;&gt;
+ constants</a></span></dt>
+<dt><span class="section"><a href="tut/limits/functions.html">std::numeric_limits&lt;&gt;
+ functions</a></span></dt>
+<dt><span class="section"><a href="tut/limits/limits32.html">Numeric limits
+ for 32-bit platform</a></span></dt>
+<dt><span class="section"><a href="tut/limits/how_to_tell.html">How to
+ Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section">Input Output</span></dt>
 </dl></div>
 <p>
       In order to use this library you need to make two choices:
@@ -104,7 +117,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -31,51 +31,53 @@
         All of the number types that are based on <code class="computeroutput"><span class="identifier">number</span></code>
         have certain conversion rules in common. In particular:
       </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
             Any number type can be constructed (or assigned) from any builtin arithmetic
             type, as long as the conversion isn't lossy (for example float to int
             conversion):
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="number">0.5</span><span class="special">);</span> <span class="comment">// OK construction from double</span>
 <span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">450</span><span class="special">);</span> <span class="comment">// OK constructs from signed int</span>
 <span class="identifier">cpp_int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, lossy conversion.</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             A number can be explicitly constructed from an arithmetic type, even
             when the conversion is lossy:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK explicit conversion</span>
 <span class="identifier">i</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">cpp_int</span><span class="special">&gt;(</span><span class="number">3.14</span><span class="special">)</span> <span class="comment">// OK explicit conversion</span>
 <span class="identifier">i</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK, explicit assign and avoid a temporary from the cast above</span>
 <span class="identifier">i</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no implicit assignment operator for lossy conversion.</span>
 <span class="identifier">cpp_int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no implicit constructor for lossy conversion.</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             A <code class="computeroutput"><span class="identifier">number</span></code> can be converted
             to any built in type, via the <code class="computeroutput"><span class="identifier">convert_to</span></code>
             member function:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
 <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">.</span><span class="keyword">template</span> <span class="identifier">convert_to</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;();</span> <span class="comment">// sets i to 2</span>
 </pre>
+ </li>
+</ul></div>
 <p>
         Additional conversions may be supported by particular backends.
       </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
             A <code class="computeroutput"><span class="identifier">number</span></code> can be converted
             to any built in type, via an explicit conversion operator: this functionality
             is only available on compilers supporting C++11's explicit conversion
             syntax.
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
 <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span> <span class="comment">// Error, implicit conversion not allowed.</span>
 <span class="keyword">int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="identifier">z</span><span class="special">);</span> <span class="comment">// OK explicit conversion.</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Any number type can be <span class="emphasis"><em>explicitly</em></span> constructed (or
             assigned) from a <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>
             or a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>:
- </li></ul></div>
 <pre class="programlisting"><span class="comment">// pi to 50 places from a string:</span>
 <span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">);</span>
 <span class="comment">// Integer type will automatically detect "0x" and "0" prefixes and parse the string accordingly:</span>
@@ -87,10 +89,10 @@
 <span class="comment">// assign member function, avoids having to create a temporary via a static_cast:</span>
 <span class="identifier">i</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="string">"23"</span><span class="special">);</span> <span class="comment">// OK</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Any number type will interoperate with the builtin types in arithmetic
             expressions as long as the conversions are not lossy:
- </li></ul></div>
 <pre class="programlisting"><span class="comment">// pi to 50 places from a string:</span>
 <span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span> <span class="special">=</span> <span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">;</span>
 <span class="comment">// Multiply by 2 - using an integer literal here is usually more efficient</span>
@@ -101,9 +103,9 @@
 <span class="identifier">cpp_int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
 <span class="identifier">i</span> <span class="special">*=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no *= operator will be found.</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Any number type can be streamed to and from the C++ iostreams:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span> <span class="special">=</span> <span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">;</span>
 <span class="comment">// Now print at full precision:</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">)</span>
@@ -113,11 +115,11 @@
 <span class="comment">// Now print in hex format with prefix:</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Interconversions between number types of the same family are allowed
             and are implicit conversions if no loss of precision is involved, and
             explicit if it is:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">int128_t</span> <span class="identifier">i128</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
 <span class="identifier">int266_t</span> <span class="identifier">i256</span> <span class="special">=</span> <span class="identifier">i128</span><span class="special">;</span> <span class="comment">// OK implicit widening conversion</span>
 <span class="identifier">i128_t</span> <span class="special">=</span> <span class="identifier">i256</span><span class="special">;</span> <span class="comment">// Error, no assignment operator found, narrowing conversion is explicit</span>
@@ -130,12 +132,12 @@
 <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">f50</span><span class="special">;</span> <span class="comment">// OK, conversion from fixed to variable precision, f will have 50 digits precision.</span>
 <span class="identifier">f50</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">;</span> <span class="comment">// Error, conversion from variable to fixed precision is potentially lossy, explicit cast required.</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Some interconversions between number types are completely generic, and
             are always available, albeit the conversions are always <span class="emphasis"><em>explicit</em></span>:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">cppi</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
-<span class="comment">// We can always convert between numbers of the same category - </span>
+<span class="comment">// We can always convert between numbers of the same category -</span>
 <span class="comment">// int to int, rational to rational, or float to float, so this is OK</span>
 <span class="comment">// as long as we use an explicit conversion:</span>
 <span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span>
@@ -146,14 +148,16 @@
 <span class="comment">// However narrowing and/or implicit conversions always fail:</span>
 <span class="identifier">cppi</span> <span class="special">=</span> <span class="identifier">df</span><span class="special">;</span> <span class="comment">// Compiler error, conversion not allowed</span>
 </pre>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ </li>
+<li class="listitem">
             Other interconversions may be allowed as special cases, whenever the
             backend allows it:
- </li></ul></div>
 <pre class="programlisting"><span class="identifier">mpf_t</span> <span class="identifier">m</span><span class="special">;</span> <span class="comment">// Native GMP type.</span>
 <span class="identifier">mpf_init_set_ui</span><span class="special">(</span><span class="identifier">m</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> <span class="comment">// set to a value;</span>
 <span class="identifier">mpf_float</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">m</span><span class="special">);</span> <span class="comment">// copies the value of the native type.</span>
 </pre>
+ </li>
+</ul></div>
 <p>
         More information on what additional types a backend supports conversions
         from are given in the tutorial for each backend. The converting constructor
@@ -163,7 +167,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../tut.html" title="Tutorial">
 <link rel="prev" href="ints/egs/bitops.html" title="Bit Operations">
-<link rel="next" href="floats/cpp_dec_float.html" title="cpp_dec_float">
+<link rel="next" href="floats/cpp_bin_float.html" title="cpp_bin_float">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,13 +20,14 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="floats/cpp_dec_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="floats/cpp_bin_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h3 class="title">
 <a name="boost_multiprecision.tut.floats"></a><a class="link" href="floats.html" title="Floating Point Numbers">Floating Point Numbers</a>
 </h3></div></div></div>
 <div class="toc"><dl class="toc">
+<dt><span class="section">cpp_bin_float</span></dt>
 <dt><span class="section">cpp_dec_float</span></dt>
 <dt><span class="section">gmp_float</span></dt>
 <dt><span class="section">mpfr_float</span></dt>
@@ -93,6 +94,39 @@
 <tr>
 <td>
                 <p>
+ <code class="computeroutput"><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/cpp_bin_float.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ Header only, all C++ implementation. Boost licence.
+ </p>
+ </td>
+<td>
+ <p>
+ Approximately 2x slower than the MPFR
+ or GMP libraries.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
                   <code class="computeroutput"><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span></code>
                 </p>
               </td>
@@ -229,7 +263,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -237,7 +271,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="floats/cpp_dec_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="floats/cpp_bin_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,192 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_bin_float</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../floats.html" title="Floating Point Numbers">
+<link rel="prev" href="../floats.html" title="Floating Point Numbers">
+<link rel="next" href="cpp_dec_float.html" title="cpp_dec_float">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.floats.cpp_bin_float"></a><a class="link" href="cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_bin_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span>
+
+<span class="keyword">enum</span> <span class="identifier">digit_base_type</span>
+<span class="special">{</span>
+ <span class="identifier">digit_base_2</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span>
+ <span class="identifier">digit_base_10</span> <span class="special">=</span> <span class="number">10</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits</span><span class="special">,</span> <span class="identifier">digit_base_type</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Exponent</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">ExponentMin</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">ExponentMax</span> <span class="special">=</span> <span class="number">0</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_bin_float</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_bin_float_50</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_bin_float_100</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">24</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">126</span><span class="special">,</span> <span class="number">127</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_single</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">53</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">1022</span><span class="special">,</span> <span class="number">1023</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_double</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">64</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_double_extended</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">113</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">cpp_bin_float_quad</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> back-end
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>:
+ It acts as an entirely C++ (header only and dependency free) floating-point
+ number type that is a drop-in replacement for the native C++ floating-point
+ types, but with much greater precision.
+ </p>
+<p>
+ Type <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> can
+ be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits</span></code>
+ template parameter. The typedefs <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code>
+ and <code class="computeroutput"><span class="identifier">cpp_bin_float_100</span></code> provide
+ arithmetic types at 50 and 100 decimal digits precision respectively.
+ </p>
+<p>
+ Optionally, you can specify whether the precision is specified in decimal
+ digits or binary bits - for example to declare a <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ with exactly the same precision as <code class="computeroutput"><span class="keyword">double</span></code>
+ one would use <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ The typedefs <code class="computeroutput"><span class="identifier">cpp_bin_float_single</span></code>,
+ <code class="computeroutput"><span class="identifier">cpp_bin_float_double</span></code>,
+ <code class="computeroutput"><span class="identifier">cpp_bin_float_quad</span></code> and
+ <code class="computeroutput"><span class="identifier">cpp_bin_float_double_extended</span></code>
+ provide software analogues of the IEEE single, double and quad float data
+ types, plus the Intel-extended-double type respectively. Note that while
+ these types are functionally equivalent to the native IEEE types, but they
+ do not have the same size or bit-layout as true IEEE compatible types.
+ </p>
+<p>
+ Normally <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ allocates no memory: all of the space required for its digits are allocated
+ directly within the class. As a result care should be taken not to use
+ the class with too high a digit count as stack space requirements can grow
+ out of control. If that represents a problem then providing an allocator
+ as a template parameter causes <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ to dynamically allocate the memory it needs: this significantly reduces
+ the size of <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>
+ and increases the viable upper limit on the number of digits at the expense
+ of performance. However, please bear in mind that arithmetic operations
+ rapidly become <span class="emphasis"><em>very</em></span> expensive as the digit count grows:
+ the current implementation really isn't optimized or designed for large
+ digit counts. Note that since the actual type of the objects allocated
+ is completely opaque, the suggestion would be to use an allocator with
+ <code class="computeroutput"><span class="keyword">void</span></code> <code class="computeroutput"><span class="identifier">value_type</span></code>,
+ for example: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">1000</span><span class="special">,</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ </p>
+<p>
+ The final template parameters determine the type and range of the exponent:
+ parameter <code class="computeroutput"><span class="identifier">Exponent</span></code> can
+ be any signed integer type, but note that <code class="computeroutput"><span class="identifier">MinExponent</span></code>
+ and <code class="computeroutput"><span class="identifier">MaxExponent</span></code> can not
+ go right up to the limits of the <code class="computeroutput"><span class="identifier">Exponent</span></code>
+ type as there has to be a little extra headroom for internal calculations.
+ You will get a compile time error if if this is the case. In addition if
+ MinExponent or MaxExponent are zero, then the library will choose suitable
+ values that are as large as possible given the constraints of the type
+ and need for extra headhoom for internal calculations.
+ </p>
+<p>
+ There is full standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support available for this type.
+ </p>
+<p>
+ Things you should know when using this type:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Default constructed <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>s
+ have a value of zero.
+ </li>
+<li class="listitem">
+ The radix of this type is 2, even when the precision is specified as
+ decimal digits.
+ </li>
+<li class="listitem">
+ The type supports both infinities and NaN's. An infinity is generated
+ whenever the result would overflow, and a NaN is generated for any
+ mathematically undefined operation.
+ </li>
+<li class="listitem">
+ There is a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> specialisation for
+ this type.
+ </li>
+<li class="listitem">
+ Any <code class="computeroutput"><span class="identifier">number</span></code> instantiated
+ on this type, is convertible to any other <code class="computeroutput"><span class="identifier">number</span></code>
+ instantiated on this type - for example you can convert from <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span></code> to <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="identifier">SomeOtherValue</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ Narrowing conversions round to nearest and are <code class="computeroutput"><span class="keyword">explicit</span></code>.
+ </li>
+<li class="listitem">
+ Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ being thrown if the string can not be interpreted as a valid floating
+ point number.
+ </li>
+<li class="listitem">
+ All arithmetic operations are correctly rounded to nearest. String
+ comversions and the <code class="computeroutput"><span class="identifier">sqrt</span></code>
+ function are also correctly rounded, but transcendental functions (sin,
+ cos, pow, exp etc) are not.
+ </li>
+</ul></div>
+<h6>
+<a name="boost_multiprecision.tut.floats.cpp_bin_float.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.floats.cpp_bin_float.cpp_bin_float_example"></a></span><a class="link" href="cpp_bin_float.html#boost_multiprecision.tut.floats.cpp_bin_float.cpp_bin_float_example">cpp_bin_float
+ example:</a>
+ </h6>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_bin_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
+
+<span class="comment">// Operations at fixed precision and full numeric_limits support:</span>
+<span class="identifier">cpp_bin_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_100</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_100</span><span class="special">&gt;::</span><span class="identifier">digits10</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// We can use any C++ std lib function, lets print all the digits as well:</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_100</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span>
+<span class="comment">// We can also use any function from Boost.Math:</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// These even work when the argument is an expression template:</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">b</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// And since we have an extended exponent range we can generate some really large </span>
+<span class="comment">// numbers here (4.0238726007709377354370243e+2564):</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">cpp_bin_float_100</span><span class="special">(</span><span class="number">1000</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../floats.html" title="Floating Point Numbers">
-<link rel="prev" href="../floats.html" title="Floating Point Numbers">
+<link rel="prev" href="cpp_bin_float.html" title="cpp_bin_float">
 <link rel="next" href="gmp_float.html" title="gmp_float">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="cpp_bin_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section">
 <div class="titlepage"><div><div><h4 class="title">
@@ -130,11 +130,9 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.floats.cpp_dec_float.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example_"></a></span><a class="link" href="cpp_dec_float.html#boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example_">cpp_dec_float
+ <span class="phrase"><a name="boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example"></a></span><a class="link" href="cpp_dec_float.html#boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example">cpp_dec_float
           example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -155,12 +153,10 @@
 <span class="comment">// numbers here (4.0238726007709377354370243e+2564):</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">1000</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>
@@ -168,7 +164,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="cpp_bin_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -109,11 +109,9 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.floats.float128.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.floats.float128.float128_example_"></a></span><a class="link" href="float128.html#boost_multiprecision.tut.floats.float128.float128_example_">float128
+ <span class="phrase"><a name="boost_multiprecision.tut.floats.float128.float128_example"></a></span><a class="link" href="float128.html#boost_multiprecision.tut.floats.float128.float128_example">float128
           example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">float128</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -138,8 +136,6 @@
 
 <span class="keyword">constexpr</span> <span class="identifier">float128</span> <span class="identifier">pi</span> <span class="special">=</span> <span class="number">3.1415926535897932384626433832795028841971693993751058</span><span class="identifier">Q</span><span class="special">;</span>
 </pre>
-<p>
- </p>
 <div class="footnotes">
 <br><hr style="width:100; text-align:left;margin-left: 0">
 <div id="ftn.boost_multiprecision.tut.floats.float128.f0" class="footnote"><p>[3]
@@ -149,7 +145,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -41,7 +41,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -39,8 +39,6 @@
             The area of a circle can be computed in generic programming using Boost.Math
             for the constant &#960; as shown below:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">constants</span><span class="special">/</span><span class="identifier">constants</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
@@ -51,8 +49,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             It is possible to use <code class="computeroutput"><span class="identifier">area_of_a_circle</span><span class="special">()</span></code> with built-in floating-point types
             as well as floating-point types from Boost.Multiprecision. In particular,
             consider a system with 4-byte single-precision float, 8-byte double-precision
@@ -64,8 +60,6 @@
             123/100 for <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>
             with the program below.
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -103,8 +97,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             In the next example we'll look at calling both standard library and Boost.Math
             functions from within generic code. We'll also show how to cope with
             template arguments which are expression-templates rather than number
@@ -113,7 +105,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -31,8 +31,6 @@
             Similar to the generic derivative example, we can calculate integrals
             in a similar manner:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">function_type</span><span class="special">&gt;</span>
 <span class="keyword">inline</span> <span class="identifier">value_type</span> <span class="identifier">integral</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">a</span><span class="special">,</span>
                            <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">b</span><span class="special">,</span>
@@ -73,14 +71,10 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             The following sample program shows how the function can be called, we
             begin by defining a function object, which when integrated should yield
             the Bessel J function:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">cyl_bessel_j_integral_rep</span>
 <span class="special">{</span>
@@ -99,10 +93,6 @@
    <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">x</span><span class="special">;</span>
 <span class="special">};</span>
 </pre>
-<p>
- </p>
-<p>
-</p>
 <pre class="programlisting"> <span class="comment">/* The function can now be called as follows: */</span>
 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span>
 <span class="special">{</span>
@@ -151,12 +141,10 @@
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cyl_bessel_j</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">mp_type</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -42,16 +42,12 @@
             If we were to implement this at double precision using Boost.Math's facilities
             for the Gamma and Bessel function calls it would look like this:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">JEL1</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">z</span><span class="special">)</span>
 <span class="special">{</span>
    <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</span> <span class="special">*</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span>
<span class="identifier">v</span><span class="special">);</span>
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             Calling this function as:
           </p>
 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">);</span>
@@ -66,8 +62,6 @@
             type <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>
             as the argument type:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span>
    <span class="identifier">JEL2</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span> <span class="identifier">z</span><span class="special">)</span>
 <span class="special">{</span>
@@ -75,8 +69,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             The implementation is almost the same as before, but with one key difference
             - we can no longer call <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>,
             instead we must call the version inside the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span></code>
@@ -107,8 +99,6 @@
             type (<code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code> etc), or with a multiprecision
             type:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Float</span><span class="special">&gt;</span>
 <span class="identifier">Float</span> <span class="identifier">JEL3</span><span class="special">(</span><span class="identifier">Float</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">Float</span> <span class="identifier">z</span><span class="special">)</span>
 <span class="special">{</span>
@@ -117,8 +107,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             Once again the code is almost the same as before, but the call to <code class="computeroutput"><span class="identifier">pow</span></code> has changed yet again. We need
             the call to resolve to either <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>
             (when the argument is a builtin type), or to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">pow</span></code>
@@ -165,8 +153,6 @@
             from Boost.Math which calculates the return type of mixed-argument functions,
             here's how the new code looks now:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Float1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Float2</span><span class="special">&gt;</span>
 <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">promote_args</span><span class="special">&lt;</span><span class="identifier">Float1</span><span class="special">,</span> <span class="identifier">Float2</span><span class="special">&gt;::</span><span class="identifier">type</span>
    <span class="identifier">JEL4</span><span class="special">(</span><span class="identifier">Float1</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">Float2</span> <span class="identifier">z</span><span class="special">)</span>
@@ -176,8 +162,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             As you can see the two arguments to the function are now separate template
             types, and the return type is computed using the <code class="computeroutput"><span class="identifier">promote_args</span></code>
             metafunction from Boost.Math.
@@ -217,7 +201,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -55,8 +55,6 @@
             float. Let's make a generic template subroutine using this three-point
             central difference rule. In particular:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">function_type</span><span class="special">&gt;</span>
    <span class="identifier">value_type</span> <span class="identifier">derivative</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx</span><span class="special">,</span> <span class="identifier">function_type</span> <span class="identifier">func</span><span class="special">)</span>
 <span class="special">{</span>
@@ -79,8 +77,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             The <code class="computeroutput"><span class="identifier">derivative</span><span class="special">()</span></code>
             template function can be used to compute the first derivative of any
             function to <span class="emphasis"><em>O(dx<sup>6</sup>)</em></span>. For example, consider the first
@@ -94,8 +90,6 @@
             The code below computes the derivative in Equation 3 for float, double
             and boost's multiple-precision type cpp_dec_float_50.
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -158,8 +152,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             The expected value of the derivative is 0.5. This central difference
             rule in this example is ill-conditioned, meaning it suffers from slight
             loss of precision. With that in mind, the results agree with the expected
@@ -174,8 +166,6 @@
             result obtained from a call to <span class="emphasis"><em>gamma_p_derivative</em></span>,
             the results agree to approximately 44 digits:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">gd</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span>
    <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">),</span>
    <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">1.0E-9</span><span class="special">),</span>
@@ -192,12 +182,10 @@
 <span class="comment">// 2.70670566473225383787998989944968806815253190143120e-01</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">gamma_p_derivative</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -38,8 +38,6 @@
             The following code evaluates <code class="computeroutput"><span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> as a polynomial, accurate to at least
             64 decimal places:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float</span><span class="special">;</span>
 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="number">64</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mp_type</span><span class="special">;</span>
 
@@ -127,8 +125,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             Calling the function like so:
           </p>
 <pre class="programlisting"><span class="identifier">mp_type</span> <span class="identifier">pid4</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">&lt;</span><span class="identifier">mp_type</span><span class="special">&gt;()</span> <span class="special">/</span> <span class="number">4</span><span class="special">;</span>
@@ -142,7 +138,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -143,11 +143,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.floats.gmp_float.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.floats.gmp_float.__ulink_url__http___gmplib_org__gmp__ulink__example_"></a></span><a class="link" href="gmp_float.html#boost_multiprecision.tut.floats.gmp_float.__ulink_url__http___gmplib_org__gmp__ulink__example_">
- GMP example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.floats.gmp_float.gmp_example"></a></span><a class="link" href="gmp_float.html#boost_multiprecision.tut.floats.gmp_float.gmp_example"> GMP example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -173,12 +170,10 @@
 <span class="identifier">mpf_init</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span>
 <span class="identifier">mpf_set</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -226,11 +226,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.floats.mpfr_float.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.floats.mpfr_float.__ulink_url__http___www_mpfr_org__mpfr__ulink__example_"></a></span><a class="link" href="mpfr_float.html#boost_multiprecision.tut.floats.mpfr_float.__ulink_url__http___www_mpfr_org__mpfr__ulink__example_">
- MPFR example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.floats.mpfr_float.mpfr_example"></a></span><a class="link" href="mpfr_float.html#boost_multiprecision.tut.floats.mpfr_float.mpfr_example"> MPFR example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">mpfr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -256,8 +253,6 @@
 <span class="identifier">mpfr_init</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
 <span class="identifier">mpfr_set</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">(),</span> <span class="identifier">GMP_RNDN</span><span class="special">);</span>
 </pre>
-<p>
- </p>
 <div class="footnotes">
 <br><hr style="width:100; text-align:left;margin-left: 0">
 <div id="ftn.boost_multiprecision.tut.floats.mpfr_float.f0" class="footnote"><p>[2]
@@ -267,7 +262,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -166,7 +166,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,185 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Input Output</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../tut.html" title="Tutorial">
+<link rel="prev" href="limits/how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits">
+<link rel="next" href="../ref.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="limits/how_to_tell.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_multiprecision.tut.input_output"></a><a class="link" href="input_output.html" title="Input Output">Input Output</a>
+</h3></div></div></div>
+<h5>
+<a name="boost_multiprecision.tut.input_output.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.input_output.loopback_testing"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.loopback_testing">Loopback
+ testing</a>
+ </h5>
+<p>
+ <span class="emphasis"><em>Loopback</em></span> or <span class="emphasis"><em>round-tripping</em></span> refers
+ to writing out a value as a decimal digit string using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iostream</span></code>,
+ usually to a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span></code>, and then reading the string
+ back in to another value, and confirming that the two values are identical.
+ A trivial example using <code class="computeroutput"><span class="keyword">float</span></code>
+ is:
+ </p>
+<pre class="programlisting"><span class="keyword">float</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Value to round-trip.</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span> <span class="comment">// Read and write std::stringstream.</span>
+<span class="identifier">ss</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span> <span class="comment">// Ensure all potentially significant bits are output.</span>
+<span class="identifier">ss</span><span class="special">.</span><span class="identifier">flags</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">fmtflags</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">scientific</span><span class="special">));</span> <span class="comment">// Use scientific format.</span>
+<span class="identifier">ss</span> <span class="special">&lt;&lt;</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Output to string.</span>
+<span class="keyword">float</span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Expected.</span>
+<span class="identifier">ss</span> <span class="special">&gt;&gt;</span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Read decimal digits string from stringstream.</span>
+<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">write</span><span class="special">,</span> <span class="identifier">read</span><span class="special">);</span> <span class="comment">// Should be the same.</span>
+</pre>
+<p>
+ and this can be run in a loop for all possible values of a 32-bit float.
+ For other floating-point types <code class="computeroutput"><span class="identifier">T</span></code>,
+ including built-in <code class="computeroutput"><span class="keyword">double</span></code>, it
+ takes far too long to test all values, so a reasonable test strategy is to
+ use a large number of random values.
+ </p>
+<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">write</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span>
+<span class="identifier">ss</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span> <span class="comment">// Ensure all potentially significant bits are output.</span>
+<span class="identifier">ss</span><span class="special">.</span><span class="identifier">flags</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span> <span class="comment">// Changed from default iostream format flags if desired.</span>
+<span class="identifier">ss</span> <span class="special">&lt;&lt;</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Output to stringstream.</span>
+
+<span class="identifier">T</span> <span class="identifier">read</span><span class="special">;</span>
+<span class="identifier">ss</span> <span class="special">&gt;&gt;</span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Get read using operator&gt;&gt; from stringstream.</span>
+<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span>
+
+<span class="identifier">read</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">());</span> <span class="comment">// Get read by converting from decimal digits string representation of write.</span>
+<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span>
+
+<span class="identifier">read</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">write</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">f</span><span class="special">));</span> <span class="comment">// Get read using format specified when written.</span>
+<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span>
+</pre>
+<p>
+ The test at test_cpp_bin_float_io.cpp
+ allows any floating-point type to be <span class="emphasis"><em>round_tripped</em></span> using
+ a wide range of fairly random values. It also includes tests compared a collection
+ of stringdata test cases
+ in a file.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.input_output.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.input_output.comparing_with_output_using_buil"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.comparing_with_output_using_buil">Comparing
+ with output using Built-in types</a>
+ </h5>
+<p>
+ One can make some comparisons with the output of
+ </p>
+<pre class="programlisting"><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_count_2</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+</pre>
+<p>
+ which has the same number of significant bits (53) as 64-bit double precision
+ floating-point.
+ </p>
+<p>
+ However, although most outputs are identical, there are differences on some
+ platforms caused by the implementation-dependent behaviours allowed by the
+ C99 specification <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf" target="_top">C99
+ ISO/IEC 9899:TC2</a>, incorporated by C++.
+ </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="emphasis"><em>"For e, E, f, F, g, and G conversions, if the number of
+ significant decimal digits is at most DECIMAL_DIG, then the result should
+ be correctly rounded. If the number of significant decimal digits is more
+ than DECIMAL_DIG but the source value is exactly representable with DECIMAL_DIG
+ digits, then the result should be an exact representation with trailing
+ zeros. Otherwise, the source value is bounded by two adjacent decimal strings
+ L &lt; U, both having DECIMAL_DIG significant digits; the value of the
+ resultant decimal string D should satisfy L&lt;= D &lt;= U, with the extra
+ stipulation that the error should have a correct sign for the current rounding
+ direction."</em></span>
+ </p></blockquote></div>
+<p>
+ So not only is correct rounding for the full number of digits not required,
+ but even if the <span class="bold"><strong>optional</strong></span> recomended practice
+ is followed, then the value of these last few digits is unspecified as long
+ as the value is within certain bounds.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Do not expect the output from different platforms to be <span class="bold"><strong>identical</strong></span>,
+ but <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>, <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> (and other backends) outputs
+ should be correctly rounded to the number of digits requested by the set
+ precision and format.
+ </p></td></tr>
+</table></div>
+<h5>
+<a name="boost_multiprecision.tut.input_output.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.input_output.macro_boost_mp_min_exponent_digi"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.macro_boost_mp_min_exponent_digi">Macro
+ BOOST_MP_MIN_EXPONENT_DIGITS</a>
+ </h5>
+<p>
+ <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf" target="_top">C99
+ Standard</a> for format specifiers, 7.19.6 Formatted input/output functions
+ requires:
+ </p>
+<p>
+ "The exponent always contains at least two digits, and only as many
+ more digits as necessary to represent the exponent."
+ </p>
+<p>
+ So to conform to the C99 standard (incorporated by C++)
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">2</span>
+</pre>
+<p>
+ Confusingly, Microsoft (and MinGW) do not conform to this standard and provide
+ <span class="bold"><strong>at least three digits</strong></span>, for example <code class="computeroutput"><span class="number">1e+001</span></code>. So if you want the output to match
+ that from built-in floating-point types on compilers that use Microsofts
+ runtime then use:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">3</span>
+</pre>
+<p>
+ Also useful to get the minimum exponent field width is
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">1</span>
+</pre>
+<p>
+ producing a compact output like <code class="computeroutput"><span class="number">2e+4</span></code>,
+ useful when conserving space is important.
+ </p>
+<p>
+ Larger values are also supported, for example, value 4 for <code class="computeroutput"><span class="number">2e+0004</span></code> which may be useful to ensure that
+ columns line up.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="limits/how_to_tell.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -33,7 +33,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -158,8 +158,8 @@
         </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
 <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="identifier">intersect</span><span class="special">(</span>
- <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span>
- <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span>
+ <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
 </pre>
 <p>
           Returns the interval which is the intersection of the <span class="emphasis"><em>a</em></span>
@@ -168,8 +168,8 @@
         </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
 <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="identifier">hull</span><span class="special">(</span>
- <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span>
- <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span>
+ <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
 </pre>
 <p>
           Returns the interval which is the union of <span class="emphasis"><em>a</em></span> and
@@ -231,12 +231,9 @@
         </p>
 <h6>
 <a name="boost_multiprecision.tut.interval.mpfi.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.interval.mpfi.__ulink_url__http___perso_ens_lyon_fr_nathalie_revol_software_html__mpfi__ulink__example_"></a></span><a class="link" href="mpfi.html#boost_multiprecision.tut.interval.mpfi.__ulink_url__http___perso_ens_lyon_fr_nathalie_revol_software_html__mpfi__ulink__example_">
- MPFI
+ <span class="phrase"><a name="boost_multiprecision.tut.interval.mpfi.mpfi_example"></a></span><a class="link" href="mpfi.html#boost_multiprecision.tut.interval.mpfi.mpfi_example"> MPFI
           example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -265,12 +262,10 @@
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">overlap</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">subset</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -186,7 +186,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -341,10 +341,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.ints.cpp_int.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.ints.cpp_int.example_"></a></span><a class="link" href="cpp_int.html#boost_multiprecision.tut.ints.cpp_int.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.ints.cpp_int.example"></a></span><a class="link" href="cpp_int.html#boost_multiprecision.tut.ints.cpp_int.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -364,12 +362,10 @@
 
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">u</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 100!</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -33,7 +33,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -31,8 +31,6 @@
             be manipulated, we'll start with an often needed calculation of <span class="emphasis"><em>2<sup>n</sup> -
             1</em></span>, which we could obviously implement like this:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_int</span><span class="special">;</span>
 
 <span class="identifier">cpp_int</span> <span class="identifier">b1</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">n</span><span class="special">)</span>
@@ -42,8 +40,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             Calling:
           </p>
 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special">&lt;&lt;</span> <span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
@@ -55,8 +51,6 @@
 <p>
             However, we could equally just set the n'th bit in the result, like this:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">b2</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">n</span><span class="special">)</span>
 <span class="special">{</span>
    <span class="identifier">cpp_int</span> <span class="identifier">r</span><span class="special">(</span><span class="number">0</span><span class="special">);</span>
@@ -64,8 +58,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             Note how the <code class="computeroutput"><span class="identifier">bit_set</span></code>
             function sets the specified bit in its argument and then returns a reference
             to the result - which we can then simply decrement. The result from a
@@ -89,7 +81,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -31,8 +31,6 @@
             factorials which will fit into a 128-bit integer. At the end of the routine
             we do some fancy iostream formatting of the results:
           </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
@@ -94,8 +92,6 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
             The output from this routine is:
           </p>
 <a name="fix%20for%20quickbook%20bug"></a><pre class="programlisting">
@@ -140,7 +136,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -106,10 +106,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.ints.gmp_int.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.ints.gmp_int.example_"></a></span><a class="link" href="gmp_int.html#boost_multiprecision.tut.ints.gmp_int.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.ints.gmp_int.example"></a></span><a class="link" href="gmp_int.html#boost_multiprecision.tut.ints.gmp_int.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -127,12 +125,10 @@
 <span class="identifier">mpz_init</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span>
 <span class="identifier">mpz_set</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -80,10 +80,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.ints.tom_int.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.ints.tom_int.example_"></a></span><a class="link" href="tom_int.html#boost_multiprecision.tut.ints.tom_int.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.ints.tom_int.example"></a></span><a class="link" href="tom_int.html#boost_multiprecision.tut.ints.tom_int.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">tom_int</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
@@ -113,12 +111,10 @@
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">what</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,100 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Numeric Limits</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../tut.html" title="Tutorial">
+<link rel="prev" href="serial.html" title="Boost.Serialization Support">
+<link rel="next" href="limits/constants.html" title="std::numeric_limits&lt;&gt; constants">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="serial.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits/constants.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_multiprecision.tut.limits"></a><a class="link" href="limits.html" title="Numeric Limits">Numeric Limits</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="limits/constants.html">std::numeric_limits&lt;&gt;
+ constants</a></span></dt>
+<dt><span class="section"><a href="limits/functions.html">std::numeric_limits&lt;&gt;
+ functions</a></span></dt>
+<dt><span class="section"><a href="limits/limits32.html">Numeric limits
+ for 32-bit platform</a></span></dt>
+<dt><span class="section"><a href="limits/how_to_tell.html">How to
+ Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt>
+</dl></div>
+<p>
+ Boost.Multiprecision tries hard to implement <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
+ for all types as far as possible and meaningful because experience with Boost.Math
+ has shown that this aids portability.
+ </p>
+<p>
+ The <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf" target="_top">C++
+ standard library</a> defines <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
+ in section 18.3.2.
+ </p>
+<p>
+ This in turn refers to the C standard <a href="http://www.open-std.org/jtc1/sc22/wg11/docs/n507.pdf" target="_top">SC22/WG11
+ N507 DRAFT INTERNATIONAL ISO/IEC STANDARD WD 10967-1</a> Information
+ technology Language independent arithmetic Part 1: Integer and Floating point
+ arithmetic.
+ </p>
+<p>
+ That C Standard in turn refers to
+ </p>
+<p>
+ <a href="http://754r.ucbtest.org/standards/754.pdf" target="_top">IEEE754 IEEE Standard
+ for Binary Floating-Point Arithmetic</a>
+ </p>
+<p>
+ There is a useful summary at <a href="http://www.cplusplus.com/reference/limits/numeric_limits/" target="_top">C++
+ reference</a>.
+ </p>
+<p>
+ The chosen backend often determines how completely <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
+ is available.
+ </p>
+<p>
+ Compiler options, processor type, and definition of macros or assembler instructions
+ to control denormal numbers will alter the values in the tables given below.
+ </p>
+<div class="warning"><table border="0" summary="Warning">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../doc/src/images/warning.png"></td>
+<th align="left">Warning</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ GMP's <code class="computeroutput"><span class="identifier">mpf_t</span></code> does not have
+ a concept of overflow: operations that lead to overflow eventually run
+ of out of resources and terminate with stack overflow (often after several
+ seconds).
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="serial.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits/constants.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,705 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>std::numeric_limits&lt;&gt; constants</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../limits.html" title="Numeric Limits">
+<link rel="prev" href="../limits.html" title="Numeric Limits">
+<link rel="next" href="functions.html" title="std::numeric_limits&lt;&gt; functions">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../limits.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.limits.constants"></a><a class="link" href="constants.html" title="std::numeric_limits&lt;&gt; constants">std::numeric_limits&lt;&gt;
+ constants</a>
+</h4></div></div></div>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_specialized"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_specialized">is_specialized</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="keyword">true</span></code> for all arithmetic types
+ (integer, floating and fixed-point) for which <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">numeric_limits</span></code>
+ is specialized.
+ </p>
+<p>
+ A typical test is
+ </p>
+<pre class="programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">false</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"type "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="string">" is not specialized for std::numeric_limits!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// ...</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Typically <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_specialized</span></code>
+ is <code class="computeroutput"><span class="keyword">true</span></code> for all <code class="computeroutput"><span class="identifier">T</span></code> where the compile-time constant members
+ of <code class="computeroutput"><span class="identifier">numeric_limits</span></code> are indeed
+ known at compile time, and don't vary at runtime. For example floating
+ point types with runtime-variable precision such as <code class="computeroutput"><span class="identifier">mpfr_float</span></code>
+ have no <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ specialization as it would be impossible to define all the members at compile
+ time. In contrast the precision of a type such as <code class="computeroutput"><span class="identifier">mpfr_float_50</span></code>
+ is known at compile time, and so it <span class="emphasis"><em>does</em></span> have a <code class="computeroutput"><span class="identifier">numeric_limits</span></code> specialization.
+ </p>
+<p>
+ Note that not all the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
+ member constants and functions are meaningful for all user-defined types
+ (UDT), such as the decimal and binary multiprecision types provided here.
+ More information on this is given in the sections below.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.infinity"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.infinity">infinity</a>
+ </h5>
+<p>
+ For floating-point types, &#8734; is defined wherever possible, but clearly infinity
+ is meaningless for __arbitrary_precision arithmetic backends, and there
+ is one floating point type (GMP's <code class="computeroutput"><span class="identifier">mpf_t</span></code>,
+ see <a class="link" href="../floats/gmp_float.html" title="gmp_float">gmp_float</a>)
+ which has no notion of infinity or NaN at all.
+ </p>
+<p>
+ A typical test whether infinity is implemented is
+ </p>
+<pre class="programlisting"><span class="keyword">if</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_infinity</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">infinity</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ and using tests like this is strongly recommended to improve portability.
+ </p>
+<p>
+ If the backend is switched to a type that does not support infinity then,
+ without checks like this, there will be trouble.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_signed"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_signed">is_signed</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_signed</span> <span class="special">==</span>
+ <span class="keyword">true</span></code> if the type <code class="computeroutput"><span class="identifier">T</span></code>
+ is signed.
+ </p>
+<p>
+ For built-in binary types, the sign is held in a single bit, but for other
+ types (cpp_dec_float and cpp_bin_float) it may be a separate storage element,
+ usually <code class="computeroutput"><span class="keyword">bool</span></code>.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h3"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_exact"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_exact">is_exact</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_exact</span> <span class="special">==</span>
+ <span class="keyword">true</span></code> if type T uses exact representations.
+ </p>
+<p>
+ This is defined as <code class="computeroutput"><span class="keyword">true</span></code> for
+ all integer types and <code class="computeroutput"><span class="keyword">false</span></code>
+ for floating-point types.
+ </p>
+<p>
+ <a href="http://stackoverflow.com/questions/14203654/stdnumeric-limitsis-exact-what-is-a-usable-definition" target="_top">A
+ usable definition</a> has been discussed.
+ </p>
+<p>
+ ISO/IEC 10967-1, Language independent arithmetic, noted by the C++ Standard
+ defines
+ </p>
+<pre class="programlisting"><span class="identifier">A</span> <span class="identifier">floating</span> <span class="identifier">point</span> <span class="identifier">type</span> <span class="identifier">F</span> <span class="identifier">shall</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">finite</span> <span class="identifier">subset</span> <span class="identifier">of</span> <span class="special">[</span><span class="identifier">real</span><span class="special">].</span>
+</pre>
+<p>
+ The important practical distinction is that all integers (up to <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code>)
+ can be stored exactly.
+ </p>
+<p>
+ Rational
+ types using two integer types are also exact.
+ </p>
+<p>
+ Floating-point types <span class="bold"><strong>cannot store all real values</strong></span>
+ (those in the set of &#8476;) <span class="bold"><strong>exactly</strong></span>. For example,
+ 0.5 can be stored exactly in a binary floating-point, but 0.1 cannot. What
+ is stored is the nearest representable real value, that is, rounded to
+ nearest.
+ </p>
+<p>
+ Fixed-point types (usually decimal) are also defined as exact, in that
+ they only store a <span class="bold"><strong>fixed precision</strong></span>, so
+ half cents or pennies (or less) cannot be stored. The results of computations
+ are rounded up or down, just like the result of integer division stored
+ as an integer result.
+ </p>
+<p>
+ There are number of proposals to <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3407.html" target="_top">add
+ Decimal Floating Point Support to C++</a>.
+ </p>
+<p>
+ <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2849.pdf" target="_top">Decimal
+ TR</a>.
+ </p>
+<p>
+ And also <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3352.html" target="_top">C++
+ Binary Fixed-Point Arithmetic</a>.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h4"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_bounded"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_bounded">is_bounded</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_bounded</span> <span class="special">==</span>
+ <span class="keyword">true</span></code> if the set of values represented
+ by the type <code class="computeroutput"><span class="identifier">T</span></code> is finite.
+ </p>
+<p>
+ This is <code class="computeroutput"><span class="keyword">true</span></code> for all built-in
+ integer, fixed and floating-point types, and most multi-precision types.
+ </p>
+<p>
+ It is only <code class="computeroutput"><span class="keyword">false</span></code> for a few
+ __arbitrary_precision types like <code class="computeroutput"><span class="identifier">cpp_int</span></code>.
+ </p>
+<p>
+ Rational and fixed-exponent representations are exact but not integer.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h5"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_modulo"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_modulo">is_modulo</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_modulo</span></code> is defined as <code class="computeroutput"><span class="keyword">true</span></code> if adding two positive values of type
+ T can yield a result less than either value.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">is_modulo</span> <span class="special">==</span>
+ <span class="keyword">true</span></code> means that the type does not
+ overflow, but, for example, 'wraps around' to zero, when adding one to
+ the <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code>
+ value.
+ </p>
+<p>
+ For most built-in integer types, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;::</span><span class="identifier">is_modulo</span></code>
+ is <code class="computeroutput"><span class="keyword">true</span></code>.
+ </p>
+<p>
+ <code class="computeroutput"><span class="keyword">bool</span></code> is the only exception.
+ </p>
+<p>
+ The modulo behaviour is sometimes useful, but also can be unexpected, and
+ sometimes undesired, behaviour.
+ </p>
+<p>
+ Overflow of signed integers can be especially unexpected, possibly causing
+ change of sign.
+ </p>
+<p>
+ Boost.Multiprecision integer type <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ is not modulo because as an __arbitrary_precision types, it expands to
+ hold any value that the machine resources permit.
+ </p>
+<p>
+ However fixed precision <a class="link" href="../ints/cpp_int.html" title="cpp_int">cpp_int</a>'s
+ may be modulo if they are unchecked (i.e. they behave just like built in
+ integers), but not if they are checked (overflow causes an exception to
+ be raised).
+ </p>
+<p>
+ Built-in and multi-precision floating-point types are normally not modulo.
+ </p>
+<p>
+ Where possible, overflow is to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;::</span><span class="identifier">infinity</span><span class="special">()</span></code>, provided <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h6"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.radix"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.radix">radix</a>
+ </h5>
+<p>
+ Constant <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">radix</span></code> returns either 2 (for built-in
+ and binary types) or 10 (for decimal types).
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h7"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.digits"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.digits">digits</a>
+ </h5>
+<p>
+ The number of <code class="computeroutput"><span class="identifier">radix</span></code> digits
+ that be represented without change:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ for integer types, the number of <span class="bold"><strong>non-sign bits</strong></span>
+ in the significand.
+ </li>
+<li class="listitem">
+ for floating types, the number of <span class="bold"><strong>radix digits</strong></span>
+ in the significand.
+ </li>
+</ul></div>
+<p>
+ The values include any implicit bit, so for example, for the ubiquious
+ <code class="computeroutput"><span class="keyword">double</span></code> using 64 bits (<a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_top">IEEE
+ binary64 </a>), <code class="computeroutput"><span class="identifier">digits</span></code>
+ == 53, even though there are only 52 actual bits of the significand stored
+ in the representation. The value of <code class="computeroutput"><span class="identifier">digits</span></code>
+ reflects the fact that there is one implicit bit which is always set to
+ 1.
+ </p>
+<p>
+ The Boost.Multiprecision binary types do not use an implicit bit, so the
+ <code class="computeroutput"><span class="identifier">digits</span></code> member reflects
+ exactly how many bits of precision were requested:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">float64</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float</span><span class="special">&lt;</span><span class="number">113</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">float128</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">float64</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">==</span> <span class="number">53.</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">float128</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">==</span> <span class="number">113.</span>
+</pre>
+<p>
+ For the most common case of <code class="computeroutput"><span class="identifier">radix</span>
+ <span class="special">==</span> <span class="number">2</span></code>,
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits</span></code> is the number of bits in the representation,
+ not counting any sign bit.
+ </p>
+<p>
+ For a decimal integer type, when <code class="computeroutput"><span class="identifier">radix</span>
+ <span class="special">==</span> <span class="number">10</span></code>,
+ it is the number of decimal digits.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h8"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.digits10"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.digits10">digits10</a>
+ </h5>
+<p>
+ Constant <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits10</span></code> returns the number of decimal
+ digits that can be represented without change or loss.
+ </p>
+<p>
+ For example, <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="keyword">char</span><span class="special">&gt;::</span><span class="identifier">digits10</span></code> is 2.
+ </p>
+<p>
+ This somewhat inscrutable definition means that an <code class="computeroutput"><span class="keyword">unsigned</span>
+ <span class="keyword">char</span></code> can hold decimal values <code class="computeroutput"><span class="number">0.</span><span class="special">.</span><span class="number">99</span></code>
+ without loss of precision or accuracy, usually from truncation.
+ </p>
+<p>
+ Had the definition been 3 then that would imply it could hold 0..999, but
+ as we all know, an 8-bit <code class="computeroutput"><span class="keyword">unsigned</span>
+ <span class="keyword">char</span></code> can only hold 0..255, and an
+ attempt to store 256 or more will involve loss or change.
+ </p>
+<p>
+ For bounded integers, it is thus <span class="bold"><strong>one less</strong></span>
+ than number of decimal digits you need to display the biggest integer
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span></code>.
+ This value can be used to predict the layout width required for
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpos</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">)()</span> <span class="comment">// +32767</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">)()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// -32767</span>
+</pre>
+<p>
+ For example, <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>
+ is often stored in 16 bits, so the maximum value is 0xFFFF or 65535.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpos</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">)()</span> <span class="comment">// 65535</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span>
+ <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="keyword">short</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">)()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0</span>
+</pre>
+<p>
+ For bounded floating-point types, if we create a <code class="computeroutput"><span class="keyword">double</span></code>
+ with a value with <code class="computeroutput"><span class="identifier">digits10</span></code>
+ (usually 15) decimal digits, <code class="computeroutput"><span class="number">1e15</span></code>
+ or <code class="computeroutput"><span class="number">1000000000000000</span></code> :
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1e15</span><span class="special">;</span>
+<span class="keyword">double</span> <span class="identifier">dp1</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="number">1</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="special">&lt;&lt;</span> <span class="identifier">dp1</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// 1000000000000000</span>
+<span class="comment">// 1000000000000001</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dp1</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1</span>
+</pre>
+<p>
+ and we can increment this value to <code class="computeroutput"><span class="number">1000000000000001</span></code>
+ as expected and show the difference too.
+ </p>
+<p>
+ But if we try to repeat this with more than <code class="computeroutput"><span class="identifier">digits10</span></code>
+ digits,
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1e16</span><span class="special">;</span>
+<span class="keyword">double</span> <span class="identifier">dp1</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="number">1</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="special">&lt;&lt;</span> <span class="identifier">dp1</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// 10000000000000000</span>
+<span class="comment">// 10000000000000000</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dp1</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0 !!!</span>
+</pre>
+<p>
+ then we find that when we add one it has no effect, and display show that
+ there is loss of precision. See <a href="http://en.wikipedia.org/wiki/Loss_of_significance" target="_top">Loss
+ of significance or cancellation error</a>.
+ </p>
+<p>
+ So <code class="computeroutput"><span class="identifier">digits10</span></code> is the number
+ of decimal digits <span class="bold"><strong>guaranteed</strong></span> to be correct.
+ </p>
+<p>
+ For example, 'round-tripping' for <code class="computeroutput"><span class="keyword">double</span></code>:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ If a decimal string with at most <code class="computeroutput"><span class="identifier">digits10</span></code>(
+ == 15) significant decimal digits is converted to <code class="computeroutput"><span class="keyword">double</span></code>
+ and then converted back to the same number of significant decimal digits,
+ then the final string will match the original 15 decimal digit string.
+ </li>
+<li class="listitem">
+ If a <code class="computeroutput"><span class="keyword">double</span></code> floating-point
+ number is converted to a decimal string with at least 17 decimal digits
+ and then converted back to <code class="computeroutput"><span class="keyword">double</span></code>,
+ then the result will be binary indentical to the original <code class="computeroutput"><span class="keyword">double</span></code> value.
+ </li>
+</ul></div>
+<p>
+ For most purposes, you will much more likely want <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;::</span><span class="identifier">max_digits10</span></code>,
+ the number of decimal digits that ensure that a change of one least significant
+ bit (ULP) produces a different decimal digits string.
+ </p>
+<p>
+ For nearly all floating-point types, <code class="computeroutput"><span class="identifier">max_digits10</span></code>
+ is <code class="computeroutput"><span class="identifier">digits10</span><span class="special">+</span><span class="number">2</span></code>, but you should use <code class="computeroutput"><span class="identifier">max_digits10</span></code>
+ where possible.
+ </p>
+<p>
+ If <code class="computeroutput"><span class="identifier">max_digits10</span></code> is not
+ available, you should using the <a href="http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF" target="_top">Kahan
+ formula for floating-point type T</a>
+ </p>
+<pre class="programlisting"><span class="identifier">max_digits10</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">;</span>
+</pre>
+<p>
+ The factor is log<sub>10</sub>(2) = 0.3010 but must be evaluated at compile time using
+ only integers.
+ </p>
+<p>
+ (See also <a href="http://www.loria.fr/~zimmerma/mca/mca-cup-0.5.9.pdf" target="_top">Richard
+ P. Brent and Paul Zimmerman, Modern Computer Arithmetic</a> Equation
+ 3.8 on page 116.).
+ </p>
+<p>
+ The extra two (or 3) least significant digits are 'noisy' and may be junk,
+ but if you want to 'round-trip' - printing a value out and reading it back
+ in - you must use <code class="computeroutput"><span class="identifier">os</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">)</span></code>.
+ For at least one popular compiler, you must also use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span></code>
+ format.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h9"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.max_digits10"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.max_digits10">max_digits10</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span></code> was added for floating-point
+ because <code class="computeroutput"><span class="identifier">digits10</span></code> decimal
+ digits are insufficient to show a least significant bit (ULP) change giving
+ puzzling displays like
+ </p>
+<pre class="programlisting"><span class="number">0.666666666666667</span> <span class="special">!=</span> <span class="number">0.666666666666667</span>
+</pre>
+<p>
+ from failure to 'round-trip', for example:
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">write</span> <span class="special">=</span> <span class="number">2.</span><span class="special">/</span><span class="number">3</span><span class="special">;</span> <span class="comment">// Any arbitrary value that cannot be represented exactly.</span>
+<span class="keyword">double</span> <span class="identifier">read</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">s</span><span class="special">;</span>
+<span class="identifier">s</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">);</span> <span class="comment">// or `float64_t` for 64-bit IEE754 double.</span>
+<span class="identifier">s</span> <span class="special">&lt;&lt;</span> <span class="identifier">write</span><span class="special">;</span>
+<span class="identifier">s</span> <span class="special">&gt;&gt;</span> <span class="identifier">read</span><span class="special">;</span>
+<span class="keyword">if</span><span class="special">(</span><span class="identifier">read</span> <span class="special">!=</span> <span class="identifier">write</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">read</span> <span class="special">&lt;&lt;</span> <span class="string">" != "</span> <span class="special">&lt;&lt;</span> <span class="identifier">write</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ If you wish to ensure that a change of one least significant bit (ULP)
+ produces a different decimal digits string, then <code class="computeroutput"><span class="identifier">max_digits10</span></code>
+ is the precision to use.
+ </p>
+<p>
+ For example:
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">pi</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">double_constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pi</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 3.1415926535897931</span>
+</pre>
+<p>
+ will display &#960; to the maximum possible precision using a <code class="computeroutput"><span class="keyword">double</span></code>.
+ </p>
+<p>
+ and similarly for a much higher precision type:
+ </p>
+<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> <span class="comment">// 50 decimal digits.</span>
+
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span><span class="special">;</span>
+
+<span class="identifier">cpp_dec_float_50</span> <span class="identifier">pi</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;();</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pi</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="comment">// 3.141592653589793238462643383279502884197169399375105820974944592307816406</span>
+</pre>
+<p>
+ For integer types, <code class="computeroutput"><span class="identifier">max_digits10</span></code>
+ is implementation-dependant, but is usually <code class="computeroutput"><span class="identifier">digits10</span>
+ <span class="special">+</span> <span class="number">2</span></code>.
+ This is the output field width required for the maximum value of the type
+ T <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span></code>
+ including a sign and a space.
+ </p>
+<p>
+ So this will produce neat columns.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">)</span> <span class="special">...</span>
+</pre>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ For Microsoft Visual Studio 2010, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span></code>
+ is wrongly defined as 8. It should be 9.
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top">
+<p>
+ For Microsoft Visual Studio, and default float format, a small range
+ of values approximately 0.0001 to 0.004, with exponent values of 3f2
+ to 3f6, are wrongly input by one least significant bit, probably every
+ third value of significand.
+ </p>
+<p>
+ A workaround is using scientific or exponential format <code class="computeroutput"><span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span></code>.
+ </p>
+</td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ BOOST_NO_CXX11_NUMERIC_LIMITS is a suitable feature-test macro to determine
+ if <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span></code> is implemented on any
+ platform. If <code class="computeroutput"><span class="identifier">max_digits10</span></code>
+ is not available, you should using the <a href="http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF" target="_top">Kahan
+ formula for floating-point type T</a>. See above.
+ </p></td></tr>
+</table></div>
+<p>
+ For example, to be portable, including older platforms:
+ </p>
+<pre class="programlisting"> <span class="keyword">typedef</span> <span class="keyword">float</span> <span class="identifier">T</span><span class="special">;</span> <span class="comment">// Any type: `double`, cpp_dec_float_50, bin_128bit_double_type ...</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span><span class="special">)</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">2</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">);</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"># if</span> <span class="special">(</span><span class="identifier">_MSC_VER</span> <span class="special">&lt;=</span> <span class="number">1600</span><span class="special">)</span> <span class="comment">// Correct wrong value for float.</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">2</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">);</span>
+<span class="preprocessor"># else</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="preprocessor"># endif</span>
+<span class="preprocessor">#endif</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"std::cout.precision = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1.2345678901234567889</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"x = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">x</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">//</span>
+</pre>
+<p>
+ which should output:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span> <span class="special">=</span> <span class="number">9</span>
+<span class="identifier">x</span> <span class="special">=</span> <span class="number">1.23456789</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h10"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.round_style"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.round_style">round_style</a>
+ </h5>
+<p>
+ The rounding style determines how the result of floating-point operations
+ is treated when the result cannot be <span class="bold"><strong>exactly represented</strong></span>
+ in the significand. Various rounding modes may be provided:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ round to nearest up or down (default for floating-point types).
+ </li>
+<li class="listitem">
+ round up (toward positive infinity).
+ </li>
+<li class="listitem">
+ round down (toward negative infinity).
+ </li>
+<li class="listitem">
+ round toward zero (integer types).
+ </li>
+<li class="listitem">
+ no rounding (if decimal radix).
+ </li>
+<li class="listitem">
+ rounding mode is not determinable.
+ </li>
+</ul></div>
+<p>
+ For integer types, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">round_style</span></code>
+ is always towards zero, so
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_to_zero</span><span class="special">;</span>
+</pre>
+<p>
+ A decimal type, <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ rounds in no particular direction, which is to say it doesn't round at
+ all. And since there are several guard digits, it's not really the same
+ as truncation (round toward zero) either.
+ </p>
+<p>
+ For floating-point types, it is normal to round to nearest.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_to_nearest</span><span class="special">;</span>
+</pre>
+<p>
+ See function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">round_error</span></code> for the maximum error (in
+ ULP) that rounding can cause.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h11"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.has_denorm_loss"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.has_denorm_loss">has_denorm_loss</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="keyword">true</span></code> if a loss of precision
+ is detected as a denormalization
+ loss, rather than an inexact result.
+ </p>
+<p>
+ Always <code class="computeroutput"><span class="keyword">false</span></code> for integer types.
+ </p>
+<p>
+ <code class="computeroutput"><span class="keyword">false</span></code> for all types which
+ do not have <code class="computeroutput"><span class="identifier">has_denorm</span></code>
+ == <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span></code>.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h12"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.denorm_style"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.denorm_style">denorm_style</a>
+ </h5>
+<p>
+ <a href="http://en.wikipedia.org/wiki/Denormal_number" target="_top">Denormalized
+ values</a> are representations with a variable number of exponent bits
+ that can permit gradual underflow, so that, if type T is <code class="computeroutput"><span class="keyword">double</span></code>.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">denorm_min</span><span class="special">()</span> <span class="special">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">()</span>
+</pre>
+<p>
+ A type may have any of the following <code class="computeroutput"><span class="keyword">enum</span>
+ <span class="identifier">float_denorm_style</span></code> values:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_absent</span></code>, if it does not allow
+ denormalized values. (Always used for all integer and exact types).
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span></code>, if the floating-point
+ type allows denormalized values.
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_indeterminate</span></code>, if indeterminate
+ at compile time.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.tut.limits.constants.h13"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.tinyness_before_rounding"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.tinyness_before_rounding">Tinyness
+ before rounding</a>
+ </h5>
+<p>
+ <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">tinyness_before</span></code>
+ </p>
+<p>
+ <code class="computeroutput"><span class="keyword">true</span></code> if a type can determine
+ that a value is too small to be represent as a normalized value before
+ rounding it.
+ </p>
+<p>
+ Generally true for <code class="computeroutput"><span class="identifier">is_iec559</span></code>
+ floating-point built-in types, but false for integer types.
+ </p>
+<p>
+ Standard-compliant IEEE 754 floating-point implementations may detect the
+ floating-point underflow at three predefined moments:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ After computation of a result with absolute value smaller than <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">()</span></code>,
+ such implementation detects <span class="emphasis"><em>tinyness before rounding</em></span>
+ (e.g. UltraSparc).
+ </li>
+<li class="listitem">
+ After rounding of the result to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">digits</span></code>
+ bits, if the result is tiny, such implementation detects <span class="emphasis"><em>tinyness
+ after rounding</em></span> (e.g. SuperSparc).
+ </li>
+<li class="listitem">
+ If the conversion of the rounded tiny result to subnormal form resulted
+ in the loss of precision, such implementation detects <span class="emphasis"><em>denorm
+ loss</em></span>.
+ </li>
+</ol></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../limits.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,546 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>std::numeric_limits&lt;&gt; functions</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../limits.html" title="Numeric Limits">
+<link rel="prev" href="constants.html" title="std::numeric_limits&lt;&gt; constants">
+<link rel="next" href="limits32.html" title="Numeric limits for 32-bit platform">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits32.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.limits.functions"></a><a class="link" href="functions.html" title="std::numeric_limits&lt;&gt; functions">std::numeric_limits&lt;&gt;
+ functions</a>
+</h4></div></div></div>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.max_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.max_function">max function</a>
+ </h5>
+<p>
+ Function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span></code>
+ returns the largest finite value that can be represented by the type T.
+ If there is no such value (and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">bounded</span></code>
+ is <code class="computeroutput"><span class="keyword">false</span></code>) then returns <code class="computeroutput"><span class="identifier">T</span><span class="special">()</span></code>.
+ </p>
+<p>
+ For built-in types there is usually a corresponding MACRO value TYPE_MAX,
+ where TYPE is CHAR, INT, FLOAT etc.
+ </p>
+<p>
+ Other types, including those provided by a typedef, for example <code class="computeroutput"><span class="identifier">INT64_T_MAX</span></code> for <code class="computeroutput"><span class="identifier">int64_t</span></code>,
+ may provide a macro definition.
+ </p>
+<p>
+ To cater for situations where no <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ specialization is available (for example because the precision of the type
+ varies at runtime), packaged versions of this (and other functions) are
+ provided using
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">T</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">max_value</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;();</span>
+</pre>
+<p>
+ Of course, these simply use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span></code> if available, but otherwise 'do something
+ sensible'.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.lowest_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.lowest_function">lowest
+ function</a>
+ </h5>
+<p>
+ Since C++11: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">lowest</span><span class="special">()</span></code>
+ is
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ For integral types, the same as function <code class="computeroutput"><span class="identifier">min</span><span class="special">()</span></code>.
+ </li>
+<li class="listitem">
+ For floating-point types, generally the negative of <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> (but implementation-dependent).
+ </li>
+</ul></div>
+<pre class="programlisting"><span class="special">-(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">)()</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">lowest</span><span class="special">();</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.min_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.min_function">min function</a>
+ </h5>
+<p>
+ Function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">()</span></code>
+ returns the minimum finite value that can be represented by the type T.
+ </p>
+<p>
+ For built-in types there is usually a corresponding MACRO value TYPE_MIN,
+ where TYPE is CHAR, INT, FLOAT etc.
+ </p>
+<p>
+ Other types, including those provided by a typedef, for example <code class="computeroutput"><span class="identifier">INT64_T_MIN</span></code> for <code class="computeroutput"><span class="identifier">int64_t</span></code>,
+ may provide a macro definition.
+ </p>
+<p>
+ For floating-point types, it is more fully defined as the <span class="emphasis"><em>minimum
+ positive normalized value</em></span>.
+ </p>
+<p>
+ See <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">denorm_min</span><span class="special">()</span></code>
+ for the smallest denormalized value, provided
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span>
+</pre>
+<p>
+ To cater for situations where no <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ specialization is available (for example because the precision of the type
+ varies at runtime), packaged versions of this (and other functions) are
+ provided using
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">T</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">min_value</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;();</span>
+</pre>
+<p>
+ Of course, these simply use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">()</span></code> if available.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h3"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.denorm_min_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.denorm_min_function">denorm_min
+ function</a>
+ </h5>
+<p>
+ Function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">denorm_min</span><span class="special">()</span></code>
+ returns the smallest <a href="http://en.wikipedia.org/wiki/Denormal_number" target="_top">denormalized
+ value</a>, provided
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span>
+</pre>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="keyword">if</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">denorm_min</span><span class="special">();</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 4.9406564584124654e-324</span>
+
+ <span class="keyword">int</span> <span class="identifier">exponent</span><span class="special">;</span>
+
+ <span class="keyword">double</span> <span class="identifier">significand</span> <span class="special">=</span> <span class="identifier">frexp</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">exponent</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"exponent = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special">&lt;&lt;</span> <span class="identifier">exponent</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// fffffbcf</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"significand = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special">&lt;&lt;</span> <span class="identifier">significand</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0.50000000000000000</span>
+<span class="special">}</span>
+<span class="keyword">else</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"No denormalization. "</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The exponent is effectively reduced from -308 to -324 (though it remains
+ encoded as zero and leading zeros appear in the significand, thereby losing
+ precision until the significand reaches zero).
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h4"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.round_error"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.round_error">round_error</a>
+ </h5>
+<p>
+ Function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">round_error</span><span class="special">()</span></code>
+ returns the maximum error (in units of ULP)
+ that can be caused by any basic arithmetic operation.
+ </p>
+<pre class="programlisting"><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_indeterminate</span><span class="special">;</span>
+</pre>
+<p>
+ The rounding style is indeterminable at compile time.
+ </p>
+<p>
+ For floating-point types, when rounding is to nearest, only half a bit
+ is lost by rounding, and <code class="computeroutput"><span class="identifier">round_error</span>
+ <span class="special">==</span> <span class="number">0.5</span></code>.
+ In contrast when rounding is towards zero, or plus/minus infinity, we can
+ loose up to one bit from rounding, and <code class="computeroutput"><span class="identifier">round_error</span>
+ <span class="special">==</span> <span class="number">1</span></code>.
+ </p>
+<p>
+ For integer types, rounding always to zero, so at worst almost one bit
+ can be rounded, so <code class="computeroutput"><span class="identifier">round_error</span>
+ <span class="special">==</span> <span class="number">1</span></code>.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">round_error</span><span class="special">()</span></code>
+ can be used with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">()</span></code>
+ to estimate the maximum potential error caused by rounding. For typical
+ floating-point types, <code class="computeroutput"><span class="identifier">round_error</span><span class="special">()</span> <span class="special">=</span> <span class="number">1</span><span class="special">/</span><span class="number">2</span></code>, so half
+ epsilon is the maximum potential error.
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">round_err</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">()</span> <span class="comment">// 2.2204460492503131e-016</span>
+ <span class="special">*</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">round_error</span><span class="special">();</span> <span class="comment">// 1/2</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">round_err</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1.1102230246251565e-016</span>
+</pre>
+<p>
+ There are, of course, many occasions when much bigger loss of precision
+ occurs, for exampe, caused by <a href="http://en.wikipedia.org/wiki/Loss_of_significance" target="_top">Loss
+ of significance or cancellation error</a> or very many iterations.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h5"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.epsilon"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.epsilon">epsilon</a>
+ </h5>
+<p>
+ Function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">()</span></code>
+ is meaningful only for non-integral types.
+ </p>
+<p>
+ It returns the difference between <code class="computeroutput"><span class="number">1.0</span></code>
+ and the next value representable by the floating-point type T. So it is
+ a one least-significant-bit change in this floating-point value.
+ </p>
+<p>
+ For <code class="computeroutput"><span class="keyword">double</span></code> (<code class="computeroutput"><span class="identifier">float_64t</span></code>) it is <code class="computeroutput"><span class="number">2.2204460492503131e-016</span></code>
+ showing all possibly significant 17 decimal digits.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span>
+<span class="keyword">double</span> <span class="identifier">eps</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+<span class="keyword">double</span> <span class="identifier">dpeps</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="identifier">eps</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpoint</span> <span class="comment">// Ensure all trailing zeros are shown.</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000000</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dpeps</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2.2204460492503131e-016</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dpeps</span> <span class="special">-</span> <span class="identifier">d</span> <span class="comment">// 1.0000000000000002</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ We can explicitly increment by one bit using the function <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">float_next</span><span class="special">()</span></code>
+ and the result is the same as adding <code class="computeroutput"><span class="identifier">epsilon</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">one</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span>
+<span class="keyword">double</span> <span class="identifier">nad</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">float_next</span><span class="special">(</span><span class="identifier">one</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">nad</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000002</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">nad</span> <span class="special">-</span> <span class="identifier">one</span> <span class="comment">// 2.2204460492503131e-016</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ Adding any smaller value, like half <code class="computeroutput"><span class="identifier">epsilon</span></code>,
+ will have no effect on this value.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">max_digits10</span><span class="special">);</span>
+<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span>
+<span class="keyword">double</span> <span class="identifier">eps</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+<span class="keyword">double</span> <span class="identifier">dpeps</span> <span class="special">=</span> <span class="identifier">d</span> <span class="special">+</span> <span class="identifier">eps</span><span class="special">/</span><span class="number">2</span><span class="special">;</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpoint</span> <span class="comment">// Ensure all trailing zeros are shown.</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dpeps</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000000</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">eps</span><span class="special">/</span><span class="number">2</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1.1102230246251565e-016</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dpeps</span> <span class="special">-</span> <span class="identifier">d</span> <span class="comment">// 0.00000000000000000</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ So this cancellation error leaves the values equal, despite adding half
+ <code class="computeroutput"><span class="identifier">epsilon</span></code>.
+ </p>
+<p>
+ To achieve greater portability over platform and floating-point type, Boost.Math
+ and Boost.Multiprecion provide a package of functions that 'do something
+ sensible' if the standard <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ is not available. To use these <code class="computeroutput"><span class="preprocessor">#include</span>
+ <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ A tolerance might be defined using this version of epsilon thus:
+ </p>
+<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">epsilon</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span> <span class="special">*</span> <span class="number">2</span><span class="special">;</span>
+</pre>
+<h6>
+<a name="boost_multiprecision.tut.limits.functions.h6"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.tolerance_for_floating_point_com"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.tolerance_for_floating_point_com">Tolerance
+ for Floating-point Comparisons</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="identifier">epsilon</span></code> is very useful
+ to compute a tolerance when comparing floating-point values, a much more
+ difficult task than is commonly imagined.
+ </p>
+<p>
+ For more information you probably want (but still need) see <a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html" target="_top">What
+ Every Computer Scientist Should Know About Floating-Point Arithmetic</a>
+ </p>
+<p>
+ The naive test comparing the absolute difference between two values and
+ a tolerance does not give useful results if the values are too large or
+ too small.
+ </p>
+<p>
+ So Boost.Test uses an algorithm first devised by Knuth for reliably checking
+ if floating-point values are close enough.
+ </p>
+<p>
+ See Donald. E. Knuth. The art of computer programming (vol II). Copyright
+ 1998 Addison-Wesley Longman, Inc., 0-201-89684-2. Addison-Wesley Professional;
+ 3rd edition.
+ </p>
+<p>
+ See also:
+ </p>
+<p>
+ <a href="http://adtmag.com/articles/2000/03/15/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx" target="_top">Alberto
+ Squassia, Comparing floats</a>
+ </p>
+<p>
+ <a href="http://adtmag.com/articles/2000/03/16/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx" target="_top">Alberto
+ Squassia, Comparing floats code</a>
+ </p>
+<p>
+ <a href="../../../../../../../libs/test/doc/html/utf/testing-tools/floating_point_comparison.html" target="_top">floating-point
+ comparison</a>.
+ </p>
+<p>
+ For example, if we want a tolerance that might suit about 9 arithmetical
+ operations, say sqrt(9) = 3, we could define:
+ </p>
+<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</span> <span class="special">*</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+</pre>
+<p>
+ This is very widely used in Boost.Math testing with Boost.Test's macro
+ <code class="computeroutput"><span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span></code>
+ </p>
+<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">expected</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
+<span class="identifier">T</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">1.0</span> <span class="special">+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">check_is_close</span><span class="special">;</span>
+
+<span class="keyword">bool</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">check_is_close</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span> <span class="special">&lt;&lt;</span> <span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// true</span>
+</pre>
+<p>
+ If using Boost.Test, then call the macro version:
+ </p>
+<pre class="programlisting"><span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span></pre>
+<p>
+ used thus:
+ </p>
+<pre class="programlisting"><span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span>
+</pre>
+<p>
+ (There is also a version using tolerance as a percentage rather than a
+ fraction).
+ </p>
+<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number</span><span class="special">;</span>
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float</span><span class="special">;</span>
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">et_off</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;,</span> <span class="identifier">et_off</span> <span class="special">&gt;</span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> <span class="comment">// 50 decimal digits.</span>
+</pre>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ that Boost.Test does not yet allow floating-point comparisons with expression
+ templates on, so the default expression template parameter has been replaced
+ by <code class="computeroutput"><span class="identifier">et_off</span></code>.
+ </p></td></tr>
+</table></div>
+<pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</span> <span class="special">*</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+<span class="identifier">cpp_dec_float_50</span> <span class="identifier">expected</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">two_pi</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;();</span>
+<span class="identifier">cpp_dec_float_50</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">2</span> <span class="special">*</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;();</span>
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">check_is_close</span><span class="special">;</span>
+
+<span class="keyword">bool</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">check_is_close</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span> <span class="special">&lt;&lt;</span> <span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// true</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h7"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.infinity_positive_and_negative"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.infinity_positive_and_negative">Infinity
+ - positive and negative</a>
+ </h5>
+<p>
+ For floating-point types only, for which <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>,
+ function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">infinity</span><span class="special">()</span></code>
+ provides an implementation-defined representation for &#8734;.
+ </p>
+<p>
+ The 'representation' is a particular bit pattern reserved for infinity.
+ For IEEE754 system (for which <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_iec559</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>)
+ <a href="http://en.wikipedia.org/wiki/IEEE_754-1985#Positive_and_negative_infinity" target="_top">positive
+ and negative infinity</a> are assigned bit patterns for all defined
+ floating-point types.
+ </p>
+<p>
+ Confusingly, the string resulting from outputting this representation,
+ is also implementation-defined. And the string that can be input to generate
+ the representation is also implementation-defined.
+ </p>
+<p>
+ For example, the output is <code class="computeroutput"><span class="number">1.</span><span class="special">#</span><span class="identifier">INF</span></code>
+ on Microsoft systems, but <code class="computeroutput"><span class="identifier">inf</span></code>
+ on most *nix platforms.
+ </p>
+<p>
+ This implementation-defined-ness has hampered use of infinity (and NaNs)
+ but Boost.Math and Boost.Multiprecision work hard to provide a sensible
+ representation for <span class="bold"><strong>all</strong></span> floating-point
+ types, not just the built-in types, which with the use of suitable facets
+ to define the input and output strings, makes it possible to use these
+ useful features portably and including Boost.Serialization.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.functions.h8"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.not_a_number_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.not_a_number_nan">Not-A-Number
+ NaN</a>
+ </h5>
+<h6>
+<a name="boost_multiprecision.tut.limits.functions.h9"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.quiet_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.quiet_nan">Quiet_NaN</a>
+ </h6>
+<p>
+ For floating-point types only, for which <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_quiet_NaN</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>,
+ function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code>
+ provides an implementation-defined representation for NaN.
+ </p>
+<p>
+ NaNs are values to
+ indicate that the result of an assignment or computation is meaningless.
+ A typical example is <code class="computeroutput"><span class="number">0</span><span class="special">/</span><span class="number">0</span></code> but there are many others.
+ </p>
+<p>
+ NaNs may also be used, to represent missing values: for example, these
+ could, by convention, be ignored in calculations of statistics like means.
+ </p>
+<p>
+ Many of the problems with a representation for Not-A-Number
+ has hampered portable use, similar to those with infinity.
+ </p>
+<p>
+ NaN can be used with binary multiprecision types like <code class="computeroutput"><span class="identifier">cpp_bin_float_quad</span></code>:
+ </p>
+<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_float_quad</span><span class="special">;</span>
+
+<span class="keyword">if</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_quad</span><span class="special">&gt;::</span><span class="identifier">has_quiet_NaN</span> <span class="special">==</span> <span class="keyword">true</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</span> <span class="special">*</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_quad</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">();</span>
+
+ <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">NaN</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_quad</span><span class="special">&gt;::</span><span class="identifier">quiet_NaN</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"cpp_bin_float_quad NaN is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">NaN</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// cpp_bin_float_quad NaN is nan</span>
+
+ <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">expected</span> <span class="special">=</span> <span class="identifier">NaN</span><span class="special">;</span>
+ <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">2</span> <span class="special">*</span> <span class="identifier">NaN</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">check_is_close</span><span class="special">;</span>
+
+ <span class="keyword">bool</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">check_is_close</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span> <span class="special">&lt;&lt;</span> <span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// false, as expected because all comparisons with NaNs are false.</span>
+
+ <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">check_is_close</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span> <span class="special">&lt;&lt;</span> <span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// false, as expected because all comparisons with NaNs are false.</span>
+<span class="special">}</span>
+<span class="keyword">else</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Type "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">cpp_bin_float_quad</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="string">" does not have NaNs!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ But using Boost.Math and suitable facets can permit portable use of both
+ NaNs and positive and negative infinity.
+ </p>
+<p>
+ See boost:/libs/math/example/nonfinite_facet_sstream.cpp
+ and we also need
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">nonfinite_num_facets</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+<p>
+ Then we can equally well use a multiprecision type cpp_bin_float_quad:
+ </p>
+<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_float_quad</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">T</span><span class="special">;</span>
+
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">nonfinite_num_put</span><span class="special">;</span>
+<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">nonfinite_num_get</span><span class="special">;</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">old_locale</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">tmp_locale</span><span class="special">(</span><span class="identifier">old_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_put</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">new_locale</span><span class="special">(</span><span class="identifier">tmp_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_get</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span>
+ <span class="identifier">ss</span><span class="special">.</span><span class="identifier">imbue</span><span class="special">(</span><span class="identifier">new_locale</span><span class="special">);</span>
+ <span class="identifier">T</span> <span class="identifier">inf</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">infinity</span><span class="special">();</span>
+ <span class="identifier">ss</span> <span class="special">&lt;&lt;</span> <span class="identifier">inf</span><span class="special">;</span> <span class="comment">// Write out.</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">==</span> <span class="string">"inf"</span><span class="special">);</span>
+ <span class="identifier">T</span> <span class="identifier">r</span><span class="special">;</span>
+ <span class="identifier">ss</span> <span class="special">&gt;&gt;</span> <span class="identifier">r</span><span class="special">;</span> <span class="comment">// Read back in.</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">inf</span> <span class="special">==</span> <span class="identifier">r</span><span class="special">);</span> <span class="comment">// Confirms that the floating-point values really are identical.</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"infinity output was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"infinity input was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<pre class="programlisting"><span class="identifier">infinity</span> <span class="identifier">output</span> <span class="identifier">was</span> <span class="identifier">inf</span>
+<span class="identifier">infinity</span> <span class="identifier">input</span> <span class="identifier">was</span> <span class="identifier">inf</span>
+</pre>
+<p>
+ Similarly we can do the same with NaN (except that we cannot use <code class="computeroutput"><span class="identifier">assert</span></code>)
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">old_locale</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">tmp_locale</span><span class="special">(</span><span class="identifier">old_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_put</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">new_locale</span><span class="special">(</span><span class="identifier">tmp_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_get</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span>
+ <span class="identifier">ss</span><span class="special">.</span><span class="identifier">imbue</span><span class="special">(</span><span class="identifier">new_locale</span><span class="special">);</span>
+ <span class="identifier">T</span> <span class="identifier">n</span><span class="special">;</span>
+ <span class="identifier">T</span> <span class="identifier">NaN</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">quiet_NaN</span><span class="special">();</span>
+ <span class="identifier">ss</span> <span class="special">&lt;&lt;</span> <span class="identifier">NaN</span><span class="special">;</span> <span class="comment">// Write out.</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">==</span> <span class="string">"nan"</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"NaN output was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">ss</span> <span class="special">&gt;&gt;</span> <span class="identifier">n</span><span class="special">;</span> <span class="comment">// Read back in.</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">NaN</span> <span class="special">==</span> <span class="identifier">n</span><span class="special">);</span> <span class="comment">// Confirms that the floating-point values really are identical.</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"NaN input was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">n</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ NaN output was nan NaN input was nan
+ </p>
+<h6>
+<a name="boost_multiprecision.tut.limits.functions.h10"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.signaling_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.signaling_nan">Signaling
+ NaN</a>
+ </h6>
+<p>
+ For floating-point types only, for which <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">has_signaling_NaN</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>,
+ function <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">signaling_NaN</span><span class="special">()</span></code>
+ provides an implementation-defined representation for NaN that causes a
+ hardware trap. It should be noted however, that at least one implementation
+ of this function causes a hardware trap to be triggered simply by calling
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">signaling_NaN</span><span class="special">()</span></code>,
+ and not only by using the value returned.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits32.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>How to Determine the Kind of a Number From std::numeric_limits</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../limits.html" title="Numeric Limits">
+<link rel="prev" href="limits32.html" title="Numeric limits for 32-bit platform">
+<link rel="next" href="../input_output.html" title="Input Output">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="limits32.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../input_output.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.limits.how_to_tell"></a><a class="link" href="how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits">How to
+ Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a>
+</h4></div></div></div>
+<p>
+ Based on the information above, one can see that different kinds of numbers
+ can be differentiated based on the information stored in <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. This is in addition to
+ the traits class <a class="link" href="../../ref/number.html#boost_multiprecision.ref.number.traits_class_support">number_category</a>
+ provided by this library.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.integer_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.integer_types">Integer
+ Types</a>
+ </h5>
+<p>
+ For an integer type T, all of the following conditions hold:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">true</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">true</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">true</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min_exponent</span> <span class="special">==</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_exponent</span> <span class="special">==</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min_exponent10</span> <span class="special">==</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_exponent10</span> <span class="special">==</span> <span class="number">0</span>
+</pre>
+<p>
+ In addition the type is <span class="emphasis"><em>signed</em></span> if:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_signed</span> <span class="special">==</span> <span class="keyword">true</span>
+</pre>
+<p>
+ If the type is arbitrary precision then:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_bounded</span> <span class="special">==</span> <span class="keyword">false</span>
+</pre>
+<p>
+ Otherwise the type is bounded, and returns a non zero value from:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span>
+</pre>
+<p>
+ and has:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_modulo</span> <span class="special">==</span> <span class="keyword">true</span>
+</pre>
+<p>
+ if the type implements modulo arithmetic on overflow.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.rational_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.rational_types">Rational
+ Types</a>
+ </h5>
+<p>
+ Rational types are just like integers except that:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">false</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.fixed_precision_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.fixed_precision_types">Fixed
+ Precision Types</a>
+ </h5>
+<p>
+ There appears to be no way to tell these apart from rational types, unless
+ they set:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">false</span>
+</pre>
+<p>
+ This is because these types are in essense a rational type with a fixed
+ denominator.
+ </p>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h3"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.floating_point_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.floating_point_types">Floating
+ Point Types</a>
+ </h5>
+<p>
+ For a floating point type T, all of the following conditions hold:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">true</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">false</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">false</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min_exponent</span> <span class="special">!=</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_exponent</span> <span class="special">!=</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min_exponent10</span> <span class="special">!=</span> <span class="number">0</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">max_exponent10</span> <span class="special">!=</span> <span class="number">0</span>
+</pre>
+<p>
+ In addition the type is <span class="emphasis"><em>signed</em></span> if:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_signed</span> <span class="special">==</span> <span class="keyword">true</span>
+</pre>
+<p>
+ And the type may be decimal or binary depending on the value of:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">radix</span>
+</pre>
+<p>
+ In general, there are no arbitrary precision floating point types, and
+ so:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_bounded</span> <span class="special">==</span> <span class="keyword">false</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h4"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.exact_floating_point_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.exact_floating_point_types">Exact
+ Floating Point Types</a>
+ </h5>
+<p>
+ Exact floating point types are a field
+ composed of an arbitrary precision integer scaled by an exponent. Such
+ types have no division operator and are the same as floating point types
+ except:
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">true</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.limits.how_to_tell.h5"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.complex_numbers"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.complex_numbers">Complex
+ Numbers</a>
+ </h5>
+<p>
+ For historical reasons, complex numbers do not specialize <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>, instead you must inspect
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">&gt;</span></code>.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="limits32.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../input_output.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,2049 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Numeric limits for 32-bit platform</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../limits.html" title="Numeric Limits">
+<link rel="prev" href="functions.html" title="std::numeric_limits&lt;&gt; functions">
+<link rel="next" href="how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="how_to_tell.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.limits.limits32"></a><a class="link" href="limits32.html" title="Numeric limits for 32-bit platform">Numeric limits
+ for 32-bit platform</a>
+</h4></div></div></div>
+<p>
+ These tables were generated using the following program and options:
+ </p>
+<pre class="programlisting">
+Program:
+ numeric_limits_qbk.cpp
+Mon Nov 4 18:09:06 2013
+BuildInfo:
+ Platform Win32
+ Compiler Microsoft Visual C++ version 10.0
+ MSVC version 160040219.
+ STL Dinkumware standard library version 520
+ Boost version 1.55.0
+</pre>
+<div class="table">
+<a name="boost_multiprecision.tut.limits.limits32.integral_constants"></a><p class="title"><b>Table&#160;1.4.&#160;Integer types constants (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span>
+ <span class="special">==</span> <span class="keyword">true</span></code>
+ &amp;&amp; is_exact == true)</b></p>
+<div class="table-contents"><table class="table" summary="Integer types constants (std::numeric_limits&lt;T&gt;::is_integer
+ == true
+ &amp;&amp; is_exact == true)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ type
+ </p>
+ </th>
+<th>
+ <p>
+ signed
+ </p>
+ </th>
+<th>
+ <p>
+ bound
+ </p>
+ </th>
+<th>
+ <p>
+ modulo
+ </p>
+ </th>
+<th>
+ <p>
+ round
+ </p>
+ </th>
+<th>
+ <p>
+ radix
+ </p>
+ </th>
+<th>
+ <p>
+ digits
+ </p>
+ </th>
+<th>
+ <p>
+ digits10
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ bool
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 1
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 7
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned char
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 8
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char16_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 16
+ </p>
+ </td>
+<td>
+ <p>
+ 4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char32_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 32
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ short
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 15
+ </p>
+ </td>
+<td>
+ <p>
+ 4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned short
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 16
+ </p>
+ </td>
+<td>
+ <p>
+ 4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 31
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 32
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ long
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 31
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned long
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 32
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ long long
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 63
+ </p>
+ </td>
+<td>
+ <p>
+ 18
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned long long
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 64
+ </p>
+ </td>
+<td>
+ <p>
+ 19
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int32_t
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 31
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ uint32_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 32
+ </p>
+ </td>
+<td>
+ <p>
+ 9
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int64_t
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 63
+ </p>
+ </td>
+<td>
+ <p>
+ 18
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ uint64_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 64
+ </p>
+ </td>
+<td>
+ <p>
+ 19
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int128_t
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 128
+ </p>
+ </td>
+<td>
+ <p>
+ 38
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ uint128_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 128
+ </p>
+ </td>
+<td>
+ <p>
+ 38
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int256_t
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 256
+ </p>
+ </td>
+<td>
+ <p>
+ 77
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ uint256_t
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned
+ </p>
+ </td>
+<td>
+ <p>
+ bound
+ </p>
+ </td>
+<td>
+ <p>
+ modulo
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 256
+ </p>
+ </td>
+<td>
+ <p>
+ 77
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ signed
+ </p>
+ </td>
+<td>
+ <p>
+ unbounded
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ to zero
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 2147483647
+ </p>
+ </td>
+<td>
+ <p>
+ 646392383
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.tut.limits.limits32.integral_functions"></a><p class="title"><b>Table&#160;1.5.&#160;Integer types functions (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span>
+ <span class="special">==</span> <span class="keyword">true</span>
+ <span class="special">&amp;&amp;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">min</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">lowest</span><span class="special">()</span></code> )</b></p>
+<div class="table-contents"><table class="table" summary="Integer types functions (std::numeric_limits&lt;T&gt;::is_integer
+ == true
+ &amp;&amp; std::numeric_limits&lt;T&gt;::min() == std::numeric_limits&lt;T&gt;::lowest() )">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ function
+ </p>
+ </th>
+<th>
+ <p>
+ max
+ </p>
+ </th>
+<th>
+ <p>
+ min
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ bool
+ </p>
+ </td>
+<td>
+ <p>
+ 1
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char
+ </p>
+ </td>
+<td>
+ <p>
+ 127
+ </p>
+ </td>
+<td>
+ <p>
+ -128
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned char
+ </p>
+ </td>
+<td>
+ <p>
+ 255
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char16_t
+ </p>
+ </td>
+<td>
+ <p>
+ 65535
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ char32_t
+ </p>
+ </td>
+<td>
+ <p>
+ 4294967295
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ short
+ </p>
+ </td>
+<td>
+ <p>
+ 32767
+ </p>
+ </td>
+<td>
+ <p>
+ -32768
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned short
+ </p>
+ </td>
+<td>
+ <p>
+ 65535
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int
+ </p>
+ </td>
+<td>
+ <p>
+ 2147483647
+ </p>
+ </td>
+<td>
+ <p>
+ -2147483648
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned int
+ </p>
+ </td>
+<td>
+ <p>
+ 4294967295
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ long
+ </p>
+ </td>
+<td>
+ <p>
+ 2147483647
+ </p>
+ </td>
+<td>
+ <p>
+ -2147483648
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned long
+ </p>
+ </td>
+<td>
+ <p>
+ 4294967295
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ long long
+ </p>
+ </td>
+<td>
+ <p>
+ 9223372036854775807
+ </p>
+ </td>
+<td>
+ <p>
+ -9223372036854775808
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ unsigned long long
+ </p>
+ </td>
+<td>
+ <p>
+ 18446744073709551615
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int32_t
+ </p>
+ </td>
+<td>
+ <p>
+ 2147483647
+ </p>
+ </td>
+<td>
+ <p>
+ -2147483648
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int64_t
+ </p>
+ </td>
+<td>
+ <p>
+ 9223372036854775807
+ </p>
+ </td>
+<td>
+ <p>
+ -9223372036854775808
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int128_t
+ </p>
+ </td>
+<td>
+ <p>
+ 340282366920938463463374607431768211455
+ </p>
+ </td>
+<td>
+ <p>
+ -340282366920938463463374607431768211455
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.tut.limits.limits32.float_functions"></a><p class="title"><b>Table&#160;1.6.&#160;Floating-point types constants (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&amp;&amp;</span> <span class="identifier">is_signed</span><span class="special">==</span><span class="keyword">true</span> <span class="special">&amp;&amp;</span> <span class="identifier">is_modulo</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&amp;&amp;</span> <span class="identifier">is_exact</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&amp;&amp;</span> <span class="identifier">is_bound</span><span cla
ss="special">==</span><span class="keyword">true</span></code>)</b></p>
+<div class="table-contents"><table class="table" summary="Floating-point types constants (std::numeric_limits&lt;T&gt;::is_integer==false &amp;&amp; is_signed==true &amp;&amp; is_modulo==false &amp;&amp; is_exact==false &amp;&amp; is_bound==true)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ type
+ </p>
+ </th>
+<th>
+ <p>
+ round
+ </p>
+ </th>
+<th>
+ <p>
+ radix
+ </p>
+ </th>
+<th>
+ <p>
+ digits
+ </p>
+ </th>
+<th>
+ <p>
+ digits10
+ </p>
+ </th>
+<th>
+ <p>
+ max_digits10
+ </p>
+ </th>
+<th>
+ <p>
+ min_exp
+ </p>
+ </th>
+<th>
+ <p>
+ min_exp10
+ </p>
+ </th>
+<th>
+ <p>
+ max_exp
+ </p>
+ </th>
+<th>
+ <p>
+ max_exp10
+ </p>
+ </th>
+<th>
+ <p>
+ tiny
+ </p>
+ </th>
+<th>
+ <p>
+ trap
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ float
+ </p>
+ </td>
+<td>
+ <p>
+ to nearest
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 24
+ </p>
+ </td>
+<td>
+ <p>
+ 6
+ </p>
+ </td>
+<td>
+ <p>
+ 8
+ </p>
+ </td>
+<td>
+ <p>
+ -125
+ </p>
+ </td>
+<td>
+ <p>
+ -37
+ </p>
+ </td>
+<td>
+ <p>
+ 128
+ </p>
+ </td>
+<td>
+ <p>
+ 38
+ </p>
+ </td>
+<td>
+ <p>
+ tiny
+ </p>
+ </td>
+<td>
+ <p>
+ traps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ double
+ </p>
+ </td>
+<td>
+ <p>
+ to nearest
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 53
+ </p>
+ </td>
+<td>
+ <p>
+ 15
+ </p>
+ </td>
+<td>
+ <p>
+ 17
+ </p>
+ </td>
+<td>
+ <p>
+ -1021
+ </p>
+ </td>
+<td>
+ <p>
+ -307
+ </p>
+ </td>
+<td>
+ <p>
+ 1024
+ </p>
+ </td>
+<td>
+ <p>
+ 308
+ </p>
+ </td>
+<td>
+ <p>
+ tiny
+ </p>
+ </td>
+<td>
+ <p>
+ traps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ long double
+ </p>
+ </td>
+<td>
+ <p>
+ to nearest
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 53
+ </p>
+ </td>
+<td>
+ <p>
+ 15
+ </p>
+ </td>
+<td>
+ <p>
+ 17
+ </p>
+ </td>
+<td>
+ <p>
+ -1021
+ </p>
+ </td>
+<td>
+ <p>
+ -307
+ </p>
+ </td>
+<td>
+ <p>
+ 1024
+ </p>
+ </td>
+<td>
+ <p>
+ 308
+ </p>
+ </td>
+<td>
+ <p>
+ tiny
+ </p>
+ </td>
+<td>
+ <p>
+ traps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_dec_float_50
+ </p>
+ </td>
+<td>
+ <p>
+ indeterminate
+ </p>
+ </td>
+<td>
+ <p>
+ 10
+ </p>
+ </td>
+<td>
+ <p>
+ 50
+ </p>
+ </td>
+<td>
+ <p>
+ 50
+ </p>
+ </td>
+<td>
+ <p>
+ 80
+ </p>
+ </td>
+<td>
+ <p>
+ -222953000
+ </p>
+ </td>
+<td>
+ <p>
+ -67108864
+ </p>
+ </td>
+<td>
+ <p>
+ 222953000
+ </p>
+ </td>
+<td>
+ <p>
+ 67108864
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bin_128bit_double_type
+ </p>
+ </td>
+<td>
+ <p>
+ to nearest
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ 377
+ </p>
+ </td>
+<td>
+ <p>
+ 113
+ </p>
+ </td>
+<td>
+ <p>
+ 115
+ </p>
+ </td>
+<td>
+ <p>
+ -2147482894
+ </p>
+ </td>
+<td>
+ <p>
+ -646392082
+ </p>
+ </td>
+<td>
+ <p>
+ 2147482893
+ </p>
+ </td>
+<td>
+ <p>
+ 646392082
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ traps
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.tut.limits.limits32.float_functions0"></a><p class="title"><b>Table&#160;1.7.&#160;Floating-point types functions (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">is_integer</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>)</b></p>
+<div class="table-contents"><table class="table" summary="Floating-point types functions (std::numeric_limits&lt;T&gt;::is_integer
+ == false)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ function
+ </p>
+ </th>
+<th>
+ <p>
+ float
+ </p>
+ </th>
+<th>
+ <p>
+ double
+ </p>
+ </th>
+<th>
+ <p>
+ long double
+ </p>
+ </th>
+<th>
+ <p>
+ cpp_dec_50
+ </p>
+ </th>
+<th>
+ <p>
+ cpp_bin_128
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ max
+ </p>
+ </td>
+<td>
+ <p>
+ 3.40282e+038
+ </p>
+ </td>
+<td>
+ <p>
+ 1.79769e+308
+ </p>
+ </td>
+<td>
+ <p>
+ 1.79769e+308
+ </p>
+ </td>
+<td>
+ <p>
+ 1e+67108865
+ </p>
+ </td>
+<td>
+ <p>
+ 1.85906e+646456766
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ min
+ </p>
+ </td>
+<td>
+ <p>
+ 1.17549e-038
+ </p>
+ </td>
+<td>
+ <p>
+ 2.22507e-308
+ </p>
+ </td>
+<td>
+ <p>
+ 2.22507e-308
+ </p>
+ </td>
+<td>
+ <p>
+ 1e-67108864
+ </p>
+ </td>
+<td>
+ <p>
+ 5.37906e-646456767
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ epsilon
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19209e-007
+ </p>
+ </td>
+<td>
+ <p>
+ 2.22045e-016
+ </p>
+ </td>
+<td>
+ <p>
+ 2.22045e-016
+ </p>
+ </td>
+<td>
+ <p>
+ 1e-49
+ </p>
+ </td>
+<td>
+ <p>
+ 6.49713e-114
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ round_error
+ </p>
+ </td>
+<td>
+ <p>
+ 0.5
+ </p>
+ </td>
+<td>
+ <p>
+ 0.5
+ </p>
+ </td>
+<td>
+ <p>
+ 0.5
+ </p>
+ </td>
+<td>
+ <p>
+ 0.5
+ </p>
+ </td>
+<td>
+ <p>
+ 0.5
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ infinity
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#INF
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#INF
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#INF
+ </p>
+ </td>
+<td>
+ <p>
+ inf
+ </p>
+ </td>
+<td>
+ <p>
+ inf
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ quiet_NaN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ nan
+ </p>
+ </td>
+<td>
+ <p>
+ nan
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ signaling_NaN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ 1.#QNAN
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ denorm_min
+ </p>
+ </td>
+<td>
+ <p>
+ 1.4013e-045
+ </p>
+ </td>
+<td>
+ <p>
+ 4.94066e-324
+ </p>
+ </td>
+<td>
+ <p>
+ 4.94066e-324
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+<td>
+ <p>
+ 0
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="how_to_tell.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -196,7 +196,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -38,7 +38,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -65,14 +65,14 @@
           <span class="special">&gt;</span></code>:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger1.png" alt="debugger1"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger1.png"></span>
         </p>
 <p>
           Otherwise you will need to expand out the view and look at the "debug_value"
           member:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger2.png" alt="debugger2"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger2.png"></span>
         </p>
 <p>
           It works for all the backend types equally too, here it is inspecting a
@@ -80,12 +80,12 @@
           <span class="special">&gt;</span></code>:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger3.png" alt="debugger3"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger3.png"></span>
         </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -89,8 +89,6 @@
           The following example demonstrates this technique in a trivial algorithm
           that deliberately introduces cancellation error:
         </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">logged_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
@@ -140,13 +138,9 @@
 <span class="special">}</span>
 </pre>
 <p>
- </p>
-<p>
           When we examine program output we can clearly see that the diameter of
           the interval increases after each subtraction:
         </p>
-<p>
-</p>
 <pre class="programlisting"><span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span>
 <span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Assignment</span> <span class="identifier">from</span> <span class="identifier">arithmetic</span> <span class="identifier">type</span>
 <span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.33681e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
@@ -204,12 +198,10 @@
 <span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.296861</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
 <span class="identifier">Final</span> <span class="identifier">value</span> <span class="identifier">was</span><span class="special">:</span> <span class="special">{</span><span class="number">8.51569e-15</span><span class="special">,</span><span class="number">1.14843e-14</span><span class="special">}</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -33,7 +33,7 @@
           partial solution in the shape of "visualizers" which provide
           improved views of complex data structures, these visualizers need to be
           added to the <code class="computeroutput"><span class="special">[</span><span class="identifier">Visualizer</span><span class="special">]</span></code> section of <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code>
- located in the <code class="computeroutput"><span class="identifier">Common7</span><span class="special">\</span><span class="identifier">Packages</span><span class="special">\</span><span class="identifier">Debugger</span></code>
+ located in the <code class="computeroutput"><span class="identifier">Common7</span><span class="special">/</span><span class="identifier">Packages</span><span class="special">/</span><span class="identifier">Debugger</span></code>
           directory of your Visual Studio installation. The actual visualizer code
           is in the sandbox here
           - just cut and paste the code into your <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code>
@@ -54,7 +54,7 @@
           The first visualizer provides improved views of <code class="computeroutput"><span class="identifier">debug_adaptor</span></code>:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger1.png" alt="debugger1"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger1.png"></span>
         </p>
 <p>
           The next visualizer provides improved views of cpp_int: small numbers are
@@ -65,20 +65,20 @@
           Here's what it looks like for small values:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger4.png" alt="debugger4"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger4.png"></span>
         </p>
 <p>
           And for larger values:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger5.png" alt="debugger5"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger5.png"></span>
         </p>
 <p>
           There is also a <code class="computeroutput"><span class="special">~</span><span class="identifier">raw</span></code>
           child member that lets you see the actual members of the class:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger6.png" alt="debugger6"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger6.png"></span>
         </p>
 <p>
           The visualizer for <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
@@ -87,12 +87,12 @@
           data members:
         </p>
 <p>
- <span class="inlinemediaobject"><img src="../../../../debugger7.png" alt="debugger7"></span>
+ <span class="inlinemediaobject"><img src="../../../../debugger7.png"></span>
         </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -43,7 +43,7 @@
 </ul></div>
 <h5>
 <a name="boost_multiprecision.tut.mixed.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.mixed.mixing_operands_of_differing_precision"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.mixing_operands_of_differing_precision">Mixing
+ <span class="phrase"><a name="boost_multiprecision.tut.mixed.mixing_operands_of_differing_pre"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.mixing_operands_of_differing_pre">Mixing
         Operands of Differing Precision</a>
       </h5>
 <p>
@@ -109,8 +109,6 @@
 <p>
         For example:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -133,22 +131,16 @@
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special">&lt;&lt;</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ui256</span><span class="special">,</span> <span class="identifier">ui128</span><span class="special">,</span> <span class="identifier">ui128</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
 <p>
- </p>
-<p>
         Produces the output:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="number">0</span><span class="identifier">xffffffffffffffff</span>
 <span class="number">0</span><span class="identifier">x10000000000000000</span>
 <span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFE0000000000000001</span>
 <span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00000000000000000000000000000001</span>
 </pre>
-<p>
- </p>
 <h5>
 <a name="boost_multiprecision.tut.mixed.h2"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.mixed.backends_with_optimized_mixed_precision_arithmetic"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.backends_with_optimized_mixed_precision_arithmetic">Backends
+ <span class="phrase"><a name="boost_multiprecision.tut.mixed.backends_with_optimized_mixed_pr"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.backends_with_optimized_mixed_pr">Backends
         With Optimized Mixed Precision Arithmetic</a>
       </h5>
 <p>
@@ -166,7 +158,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -60,8 +60,6 @@
         The following example searches for a prime <code class="computeroutput"><span class="identifier">p</span></code>
         for which <code class="computeroutput"><span class="special">(</span><span class="identifier">p</span><span class="special">-</span><span class="number">1</span><span class="special">)/</span><span class="number">2</span></code> is also probably prime:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">miller_rabin</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
@@ -99,12 +97,10 @@
    <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -39,8 +39,6 @@
 <p>
         Integers with <span class="emphasis"><em>N</em></span> random bits are generated using <code class="computeroutput"><span class="identifier">independent_bits_engine</span></code>:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
@@ -61,14 +59,10 @@
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">gen</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
 <p>
- </p>
-<p>
         Alternatively we can generate integers in a given range using <code class="computeroutput"><span class="identifier">uniform_int_distribution</span></code>, this will invoke
         the underlying engine multiple times to build up the required number of bits
         in the result:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
@@ -90,16 +84,12 @@
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ui</span><span class="special">(</span><span class="identifier">mt</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
 <p>
- </p>
-<p>
         Floating point values in [0,1) are generated using <code class="computeroutput"><span class="identifier">uniform_01</span></code>,
         the trick here is to ensure that the underlying generator produces as many
         random bits as there are digits in the floating point type. As above <code class="computeroutput"><span class="identifier">independent_bits_engine</span></code> can be used for
         this purpose, note that we also have to convert decimal digits (in the floating
         point type) to bits (in the random number generator):
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
@@ -120,13 +110,9 @@
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">uf</span><span class="special">(</span><span class="identifier">gen</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
 <p>
- </p>
-<p>
         Finally, we can modify the above example to produce numbers distributed according
         to some distribution:
       </p>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
@@ -147,12 +133,10 @@
 <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="number">20</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">gd</span><span class="special">(</span><span class="identifier">gen</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -247,7 +247,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -37,7 +37,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -81,10 +81,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.rational.cpp_rational.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.rational.cpp_rational.example_"></a></span><a class="link" href="cpp_rational.html#boost_multiprecision.tut.rational.cpp_rational.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.rational.cpp_rational.example"></a></span><a class="link" href="cpp_rational.html#boost_multiprecision.tut.rational.cpp_rational.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -103,12 +101,10 @@
 <span class="identifier">cpp_rational</span> <span class="identifier">w</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// component wise constructor</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">w</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 2/3</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -107,10 +107,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.rational.gmp_rational.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.rational.gmp_rational.example_"></a></span><a class="link" href="gmp_rational.html#boost_multiprecision.tut.rational.gmp_rational.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.rational.gmp_rational.example"></a></span><a class="link" href="gmp_rational.html#boost_multiprecision.tut.rational.gmp_rational.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -134,12 +132,10 @@
 <span class="identifier">mpq_init</span><span class="special">(</span><span class="identifier">q</span><span class="special">);</span>
 <span class="identifier">mpq_set</span><span class="special">(</span><span class="identifier">q</span><span class="special">,</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -53,7 +53,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -87,10 +87,8 @@
 </ul></div>
 <h6>
 <a name="boost_multiprecision.tut.rational.tommath_rational.h0"></a>
- <span class="phrase"><a name="boost_multiprecision.tut.rational.tommath_rational.example_"></a></span><a class="link" href="tommath_rational.html#boost_multiprecision.tut.rational.tommath_rational.example_">Example:</a>
+ <span class="phrase"><a name="boost_multiprecision.tut.rational.tommath_rational.example"></a></span><a class="link" href="tommath_rational.html#boost_multiprecision.tut.rational.tommath_rational.example">Example:</a>
         </h6>
-<p>
-</p>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
@@ -109,12 +107,10 @@
 <span class="identifier">tom_rational</span> <span class="identifier">w</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// Component wise constructor</span>
 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">w</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 2/3</span>
 </pre>
-<p>
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -177,7 +177,7 @@
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
         Distributed under 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)
       </p>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,63 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Serialization Support</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../tut.html" title="Tutorial">
+<link rel="prev" href="gen_int.html" title="Generic Integer Operations">
+<link rel="next" href="limits.html" title="Numeric Limits">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gen_int.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_multiprecision.tut.serial"></a><a class="link" href="serial.html" title="Boost.Serialization Support">Boost.Serialization
+ Support</a>
+</h3></div></div></div>
+<p>
+ Support for serialization comes in two forms:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Classes <a class="link" href="../ref/number.html" title="number">number</a>,
+ <a class="link" href="misc/debug_adaptor.html" title="debug_adaptor">debug_adaptor</a>,
+ <a class="link" href="misc/logged_adaptor.html" title="logged_adaptor">logged_adaptor</a>
+ and <a class="link" href="rational/rational_adaptor.html" title="rational_adaptor">rational_adaptor</a>
+ have "pass through" serialization support which requires the
+ underlying backend to be serializable.
+ </li>
+<li class="listitem">
+ Backends <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>,
+ <a class="link" href="floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a>
+ and <a class="link" href="floats/float128.html" title="float128">float128</a>
+ have full support for Boost.Serialization.
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos<p>
+ Distributed under 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gen_int.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="limits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/index.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/index.html Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/html/index.html 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -28,7 +28,7 @@
 <div><div class="author"><h3 class="author">
 <span class="firstname">Christopher</span> <span class="surname">Kormanyos</span>
 </h3></div></div>
-<div><p class="copyright">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos</p></div>
+<div><p class="copyright">Copyright &#169; 2002-2013 John Maddock and Christopher Kormanyos</p></div>
 <div><div class="legalnotice">
 <a name="boost_multiprecision.legal"></a><p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
@@ -55,6 +55,7 @@
 </dl></dd>
 <dt><span class="section">Floating Point Numbers</span></dt>
 <dd><dl>
+<dt><span class="section">cpp_bin_float</span></dt>
 <dt><span class="section">cpp_dec_float</span></dt>
 <dt><span class="section">gmp_float</span></dt>
 <dt><span class="section">mpfr_float</span></dt>
@@ -101,6 +102,18 @@
 <dt><span class="section">Generic Integer Operations</span></dt>
 <dt><span class="section"><a href="boost_multiprecision/tut/serial.html">Boost.Serialization
       Support</a></span></dt>
+<dt><span class="section">Numeric Limits</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/limits/constants.html">std::numeric_limits&lt;&gt;
+ constants</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/limits/functions.html">std::numeric_limits&lt;&gt;
+ functions</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/limits/limits32.html">Numeric limits
+ for 32-bit platform</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/limits/how_to_tell.html">How to
+ Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section">Input Output</span></dt>
 </dl></dd>
 <dt><span class="section">Reference</span></dt>
 <dd><dl>
@@ -110,6 +123,7 @@
 <dt><span class="section">tom_int</span></dt>
 <dt><span class="section">gmp_float</span></dt>
 <dt><span class="section">mpfr_float_backend</span></dt>
+<dt><span class="section">cpp_bin_float</span></dt>
 <dt><span class="section">cpp_dec_float</span></dt>
 <dt><span class="section"><a href="boost_multiprecision/ref/internals.html">Internal Support
       Code</a></span></dt>
@@ -120,7 +134,7 @@
 <dd><dl>
 <dt><span class="section"><a href="boost_multiprecision/perf/overhead.html">The Overhead in the
       Number Class Wrapper</a></span></dt>
-<dt><span class="section"><a href="boost_multiprecision/perf/realworld.html">Floating Point Real
+<dt><span class="section"><a href="boost_multiprecision/perf/realworld.html">Floating-Point Real
       World Tests</a></span></dt>
 <dt><span class="section"><a href="boost_multiprecision/perf/int_real_world.html">Integer Real
       World Tests</a></span></dt>
@@ -139,17 +153,11 @@
 <dt><span class="section">Acknowledgements</span></dt>
 </dl></dd>
 <dt><span class="section">Indexes</span></dt>
-<dd><dl>
-<dt><span class="section">Function Index</span></dt>
-<dt><span class="section">Class Index</span></dt>
-<dt><span class="section">Typedef Index</span></dt>
-<dt><span class="section">Index</span></dt>
-</dl></dd>
 </dl>
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: September 30, 2013 at 17:51:19 GMT</small></p></td>
+<td align="left"><p><small>Last revised: November 21, 2013 at 18:50:39 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: trunk/libs/multiprecision/doc/multiprecision.qbk
==============================================================================
--- trunk/libs/multiprecision/doc/multiprecision.qbk Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/doc/multiprecision.qbk 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -1,13 +1,16 @@
-[/
- Copyright 2011 John Maddock.
+[/
+ Copyright 2011, 2013 John Maddock.
+ Copyright 2013 Paul A. Bristow.
+ Copyright 2013 Christopher Kormanyos.
+
   Distributed under 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).
 ]
 
 [library Boost.Multiprecision
- [quickbook 1.5]
- [copyright 2002-2012 John Maddock and Christopher Kormanyos]
+ [quickbook 1.7]
+ [copyright 2002-2013 John Maddock and Christopher Kormanyos]
     [purpose Multiprecision Number library]
     [license
          Distributed under the Boost Software License, Version 1.0.
@@ -18,18 +21,21 @@
     [/last-revision $Date: 2011-07-08 18:51:46 +0100 (Fri, 08 Jul 2011) $]
 ]
 
-[include html4_symbols.qbk]
+[import html4_symbols.qbk]
+
 [import ../example/gmp_snips.cpp]
 [import ../example/mpfr_snips.cpp]
 [import ../example/mpfi_snips.cpp]
 [import ../example/float128_snips.cpp]
 [import ../example/cpp_dec_float_snips.cpp]
+[import ../example/cpp_bin_float_snips.cpp]
 [import ../example/tommath_snips.cpp]
 [import ../example/cpp_int_snips.cpp]
 [import ../example/random_snips.cpp]
 [import ../example/safe_prime.cpp]
 [import ../example/mixed_integer_arithmetic.cpp]
 [import ../example/logged_adaptor.cpp]
+[import ../example/numeric_limits_snips.cpp]
 
 [template mpfr[] [@http://www.mpfr.org MPFR]]
 [template mpfi[] [@http://perso.ens-lyon.fr/nathalie.revol/software.html MPFI]]
@@ -59,6 +65,7 @@
 [def __gmp_float [link boost_multiprecision.tut.floats.gmp_float gmp_float]]
 [def __mpf_float [link boost_multiprecision.tut.floats.gmp_float gmp_float]]
 [def __mpfr_float_backend [link boost_multiprecision.tut.floats.mpfr_float mpfr_float]]
+[def __cpp_bin_float [link boost_multiprecision.tut.floats.cpp_bin_float cpp_bin_float]]
 [def __cpp_dec_float [link boost_multiprecision.tut.floats.cpp_dec_float cpp_dec_float]]
 [def __gmp_rational [link boost_multiprecision.tut.rational.gmp_rational gmp_rational]]
 [def __cpp_rational [link boost_multiprecision.tut.rational.cpp_rational cpp_rational]]
@@ -94,7 +101,7 @@
 its own collection of Boost-licensed, header-only back ends for
 integers, rationals and floats. In addition, user-defined back ends
 can be created and used with the interface of Multiprecision,
-provided the class implementation adheres to the necessary
+provided the class implementation adheres to the necessary
 [link boost_multiprecision.ref.backendconc concepts].
 
 Depending upon the number type, precision may be arbitrarily large
@@ -119,7 +126,8 @@
 __cpp_int for multiprecision integers, __cpp_dec_float for multiprecision floating point types
 and __cpp_rational for rational types.
 
-The library is often used via one of the predefined typedefs: for example if you wanted an [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision]
+The library is often used via one of the predefined typedefs: for example if you wanted an
+[@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision]
 integer type using [gmp] as the underlying implementation then you could use:
 
    #include <boost/multiprecision/gmp.hpp> // Defines the wrappers around the GMP library's types
@@ -184,7 +192,7 @@
 
 On compilers that support rvalue-references, class `number` is move-enabled if the underlying backend is.
 
-In addition the non-expression template operator overloads (see below) are move aware and have overloads
+In addition the non-expression template operator overloads (see below) are move aware and have overloads
 that look something like:
 
    template <class B>
@@ -201,7 +209,7 @@
 Which don't noticeably benefit from move support. Therefore, optimal performance comes from having both
 move-support, and expression templates enabled.
 
-Note that while "moved-from" objects are left in a sane state, they have an unspecified value, and the only permitted
+Note that while "moved-from" objects are left in a sane state, they have an unspecified value, and the only permitted
 operations on them are destruction or the assignment of a new value. Any other operation should be considered
 a programming error and all of our backends will trigger an assertion if any other operation is attempted. This behavior
 allows for optimal performance on move-construction (i.e. no allocation required, we just take ownership of the existing
@@ -231,8 +239,8 @@
 is.
 
 The great advantage of this method is the ['elimination of temporaries]: for example the "naive" implementation
-of `operator*` above, requires one temporary for computing the result, and at least another one to return it. It's true
-that sometimes this overhead can be reduced by using move-semantics, but it can't be eliminated completely. For example,
+of `operator*` above, requires one temporary for computing the result, and at least another one to return it. It's true
+that sometimes this overhead can be reduced by using move-semantics, but it can't be eliminated completely. For example,
 lets suppose we're evaluating a polynomial via Horner's method, something like this:
 
     T a[7] = { /* some values */ };
@@ -243,8 +251,8 @@
 if we were using the [mpfr_class] C++ wrapper for [mpfr] - then this expression would result in no less than 11
 temporaries (this is true even though [mpfr_class] does use expression templates to reduce the number of temporaries somewhat). Had
 we used an even simpler wrapper around [mpfr] like [mpreal] things would have been even worse and no less that 24 temporaries
-are created for this simple expression (note - we actually measure the number of memory allocations performed rather than
-the number of temporaries directly, note also that the [mpf_class] wrapper that will be supplied with GMP-5.1 reduces the number of
+are created for this simple expression (note - we actually measure the number of memory allocations performed rather than
+the number of temporaries directly, note also that the [mpf_class] wrapper that will be supplied with GMP-5.1 reduces the number of
 temporaries to pretty much zero). Note that if we compile with expression templates disabled and rvalue-reference support
 on, then actually still have no wasted memory allocations as even though temporaries are created, their contents are moved
 rather than copied.
@@ -318,7 +326,7 @@
 unless you're absolutely sure that the lifetimes of `a`, `b` and `c` will outlive that of `my_expression`.
 
 And finally... the performance improvements from an expression template library like this are often not as
-dramatic as the reduction in number of temporaries would suggest. For example if we compare this library with
+dramatic as the reduction in number of temporaries would suggest. For example if we compare this library with
 [mpfr_class] and [mpreal], with all three using the underlying [mpfr] library at 50 decimal digits precision then
 we see the following typical results for polynomial execution:
 
@@ -329,7 +337,7 @@
 [[[mpreal]] [1.6 (0.0151s)] [9.3 (27947 total)]]
 ]
 
-As you can see, the execution time increases a lot more slowly than the number of memory allocations. There are
+As you can see, the execution time increases a lot more slowly than the number of memory allocations. There are
 a number of reasons for this:
 
 * The cost of extended-precision multiplication and division is so great, that the times taken for these tend to
@@ -351,7 +359,7 @@
 [table Evaluation of Boost.Math's Bessel function test data
 [[Library] [Relative Time] [Relative Number of Memory Allocations]]
 [[mpfr_float_50] [1.0 (5.78s)] [1.0 (1611963)]]
-[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
+[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
                                             [1.1 (6.29s)] [2.64 (4260868)]]
 [[[mpfr_class]] [1.1 (6.28s)] [2.45 (3948316)]]
 [[[mpreal]] [1.65 (9.54s)] [8.21 (13226029)]]
@@ -360,7 +368,7 @@
 [table Evaluation of Boost.Math's Non-Central T distribution test data
 [[Library][Relative Time][Relative Number of Memory Allocations]]
 [[number] [1.0 (263s)][1.0 (127710873)]]
-[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
+[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
                                             [1.0 (260s)][1.2 (156797871)]]
 [[[mpfr_class]] [1.1 (287s)][2.1 (268336640)]]
 [[[mpreal]] [1.5 (389s)][3.6 (466960653)]]
@@ -373,9 +381,9 @@
 
 [section:tut Tutorial]
 
-In order to use this library you need to make two choices:
+In order to use this library you need to make two choices:
 
-* What kind of number do I want ([link boost_multiprecision.tut.ints integer],
+* What kind of number do I want ([link boost_multiprecision.tut.ints integer],
 [link boost_multiprecision.tut.floats floating point] or [link boost_multiprecision.tut.rational rational]).
 * Which back-end do I want to perform the actual arithmetic (Boost-supplied, GMP, MPFR, Tommath etc)?
 
@@ -402,10 +410,10 @@
    enum cpp_integer_type { signed_magnitude, unsigned_magnitude };
    enum cpp_int_check_type { checked, unchecked };
 
- template <unsigned MinDigits = 0,
- unsigned MaxDits = 0,
- cpp_integer_type SignType = signed_magnitude,
- cpp_int_check_type Checked = unchecked,
+ template <unsigned MinDigits = 0,
+ unsigned MaxDits = 0,
+ cpp_integer_type SignType = signed_magnitude,
+ cpp_int_check_type Checked = unchecked,
              class Allocator = std::allocator<limb_type> >
    class cpp_int_backend;
    //
@@ -450,9 +458,9 @@
 
    }} // namespaces
 
-The `cpp_int_backend` type is normally used via one of the convenience typedefs given above.
+The `cpp_int_backend` type is normally used via one of the convenience typedefs given above.
 
-This back-end is the "Swiss Army Knife" of integer types as it can represent both fixed and
+This back-end is the "Swiss Army Knife" of integer types as it can represent both fixed and
 [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision]
 integer types, and both signed and unsigned types. There are five template arguments:
 
@@ -467,7 +475,7 @@
            type `void`. Note that this parameter should not be used simply to prevent large memory
            allocations, not only is that role better performed by the allocator, but fixed precision
            integers have a tendency to allocate all of MaxBits of storage more often than one would expect.]]
-[[SignType][Determines whether the resulting type is signed or not. Note that for
+[[SignType][Determines whether the resulting type is signed or not. Note that for
 [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision] types
           this parameter must be `signed_magnitude`. For fixed precision
           types then this type may be either `signed_magnitude` or `unsigned_magnitude`.]]
@@ -475,7 +483,7 @@
 [[Allocator][The allocator to use for dynamic memory allocation, or type `void` if MaxBits == MinBits.]]
 ]
 
-When the template parameter Checked is set to `checked` then the result is a ['checked-integer], checked
+When the template parameter Checked is set to `checked` then the result is a ['checked-integer], checked
 and unchecked integers have the following properties:
 
 [table
@@ -495,7 +503,7 @@
 * Default constructed `cpp_int_backend`s have the value zero.
 * Division by zero results in a `std::overflow_error` being thrown.
 * Construction from a string that contains invalid non-numeric characters results in a `std::runtime_error` being thrown.
-* Since the precision of `cpp_int_backend` is necessarily limited when the allocator parameter is void,
+* Since the precision of `cpp_int_backend` is necessarily limited when the allocator parameter is void,
 care should be taken to avoid numeric overflow when using this type
 unless you actually want modulo-arithmetic behavior.
 * The type uses a sign-magnitude representation internally, so type `int128_t` has 128-bits of precision plus an extra sign bit.
@@ -506,10 +514,10 @@
 is the most common format by far.
 * Attempting to print negative values as either an Octal or Hexadecimal string results in a `std::runtime_error` being thrown,
 this is a direct consequence of the sign-magnitude representation.
-* The fixed precision types `[checked_][u]intXXX_t` have expression template support turned off - it seems to make little
+* The fixed precision types `[checked_][u]intXXX_t` have expression template support turned off - it seems to make little
 difference to the performance of these types either way - so we may as well have the faster compile times by turning
 the feature off.
-* Unsigned types support subtraction - the result is "as if" a 2's complement operation had been performed as long as they are not
+* Unsigned types support subtraction - the result is "as if" a 2's complement operation had been performed as long as they are not
  ['checked-integers] (see above).
  In other words they behave pretty much as a built in integer type would in this situation. So for example if we were using
  `uint128_t` then `uint128_t(1)-4` would result in the value `0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD`
@@ -517,8 +525,8 @@
  been thrown.
 * Unary negation of unsigned types results in a compiler error (static assertion).
 * This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
-* When used at fixed precision, the size of this type is always one machine word larger than you would expect for an N-bit integer:
-the extra word stores both the sign, and how many machine words in the integer are actually in use.
+* When used at fixed precision, the size of this type is always one machine word larger than you would expect for an N-bit integer:
+the extra word stores both the sign, and how many machine words in the integer are actually in use.
 The latter is an optimisation for larger fixed precision integers, so that a 1024-bit integer has almost the same performance
 characteristics as a 128-bit integer, rather than being 4 times slower for addition and 16 times slower for multiplication
  (assuming the values involved would always fit in 128 bits).
@@ -527,7 +535,7 @@
 the arithmetic could in fact be done with a narrower type.
 * When used at fixed precision and MaxBits is smaller than the number of bits in the largest native integer type, then
 internally `cpp_int_backend` switches to a "trivial" implementation where it is just a thin wrapper around a single
-integer. Note that it will still be slightly slower than a bare native integer, as it emulates a
+integer. Note that it will still be slightly slower than a bare native integer, as it emulates a
 signed-magnitude representation rather than simply using the platforms native sign representation: this ensures
 there is no step change in behavior as a cpp_int grows in size.
 * Fixed precision `cpp_int`'s have some support for `constexpr` values and user-defined literals, see
@@ -568,10 +576,10 @@
 * No changes are made to the GMP library's global settings - so you can safely mix this type with
 existing code that uses [gmp].
 * Default constructed `gmp_int`s have the value zero (this is GMP's default behavior).
-* Formatted IO for this type does not support octal or hexadecimal notation for negative values,
+* Formatted IO for this type does not support octal or hexadecimal notation for negative values,
 as a result performing formatted output on this type when the argument is negative and either of the flags
 `std::ios_base::oct` or `std::ios_base::hex` are set, will result in a `std::runtime_error` will be thrown.
-* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid integer.
 * Division by zero results in a `std::overflow_error` being thrown.
 * Although this type is a wrapper around [gmp] it will work equally well with [mpir]. Indeed use of [mpir]
@@ -606,10 +614,10 @@
 rather strange beast as it's a signed type that is not a 2's complement type. As a result the bitwise operations
 `| & ^` will throw a `std::runtime_error` exception if either of the arguments is negative. Similarly the complement
 operator`~` is deliberately not implemented for this type.
-* Formatted IO for this type does not support octal or hexadecimal notation for negative values,
+* Formatted IO for this type does not support octal or hexadecimal notation for negative values,
 as a result performing formatted output on this type when the argument is negative and either of the flags
 `std::ios_base::oct` or `std::ios_base::hex` are set, will result in a `std::runtime_error` will be thrown.
-* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid integer.
 * Division by zero results in a `std::overflow_error` being thrown.
 
@@ -641,12 +649,95 @@
 
 [table
 [[Backend Type][Header][Radix][Dependencies][Pros][Cons]]
+[[`cpp_bin_float<N>`][boost/multiprecision/cpp_bin_float.hpp][2][None][Header only, all C++ implementation. Boost licence.][Approximately 2x slower than the [mpfr] or [gmp] libraries.]]
 [[`cpp_dec_float<N>`][boost/multiprecision/cpp_dec_float.hpp][10][None][Header only, all C++ implementation. Boost licence.][Approximately 2x slower than the [mpfr] or [gmp] libraries.]]
 [[`mpf_float<N>`][boost/multiprecision/gmp.hpp][2][[gmp]][Very fast and efficient back-end.][Dependency on GNU licensed [gmp] library.]]
 [[`mpfr_float<N>`][boost/multiprecision/mpfr.hpp][2][[gmp] and [mpfr]][Very fast and efficient back-end, with its own standard library implementation.][Dependency on GNU licensed [gmp] and [mpfr] libraries.]]
 [[`float128`][boost/multiprecision/float128.hpp][2][Either [quadmath] or the Intel C++ Math library.][Very fast and efficient back-end for 128-bit floating point values (113-bit mantissa, equivalent to FORTRAN's QUAD real)][Depends on the compiler being either recent GCC or Intel C++ versions.]]
 ]
 
+[section:cpp_bin_float cpp_bin_float]
+
+`#include <boost/multiprecision/cpp_bin_float.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ enum digit_base_type
+ {
+ digit_base_2 = 2,
+ digit_base_10 = 10
+ };
+
+ template <unsigned Digits, digit_base_type base = digit_base_10, class Allocator = void, class Exponent = int, ExponentMin = 0, ExponentMax = 0>
+ class cpp_bin_float;
+
+ typedef number<cpp_bin_float<50> > cpp_bin_float_50;
+ typedef number<cpp_bin_float<100> > cpp_bin_float_100;
+
+ typedef number<backends::cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127>, et_off> cpp_bin_float_single;
+ typedef number<backends::cpp_bin_float<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023>, et_off> cpp_bin_float_double;
+ typedef number<backends::cpp_bin_float<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_double_extended;
+ typedef number<backends::cpp_bin_float<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_quad;
+
+ }} // namespaces
+
+The `cpp_bin_float` back-end is used in conjunction with `number`: It acts as an entirely C++ (header only and dependency free)
+floating-point number type that is a drop-in replacement for the native C++ floating-point types, but with
+much greater precision.
+
+Type `cpp_bin_float` can be used at fixed precision by specifying a non-zero `Digits` template parameter.
+The typedefs `cpp_bin_float_50` and `cpp_bin_float_100` provide arithmetic types at 50 and 100 decimal digits precision
+respectively.
+
+Optionally, you can specify whether the precision is specified in decimal digits or binary bits - for example
+to declare a `cpp_bin_float` with exactly the same precision as `double` one would use
+`number<cpp_bin_float<53, digit_base_2> >`. The typedefs `cpp_bin_float_single`, `cpp_bin_float_double`,
+`cpp_bin_float_quad` and `cpp_bin_float_double_extended` provide
+software analogues of the IEEE single, double and quad float data types, plus the Intel-extended-double type respectively.
+Note that while these types are functionally equivalent to the native IEEE types, but they do not have the same size
+or bit-layout as true IEEE compatible types.
+
+Normally `cpp_bin_float` allocates no memory: all of the space required for its digits are allocated
+directly within the class. As a result care should be taken not to use the class with too high a digit count
+as stack space requirements can grow out of control. If that represents a problem then providing an allocator
+as a template parameter causes `cpp_bin_float` to dynamically allocate the memory it needs: this
+significantly reduces the size of `cpp_bin_float` and increases the viable upper limit on the number of digits
+at the expense of performance. However, please bear in mind that arithmetic operations rapidly become ['very] expensive
+as the digit count grows: the current implementation really isn't optimized or designed for large digit counts.
+Note that since the actual type of the objects allocated
+is completely opaque, the suggestion would be to use an allocator with `void` `value_type`, for example:
+`number<cpp_bin_float<1000, digit_base_10, std::allocator<void> > >`.
+
+The final template parameters determine the type and range of the exponent: parameter `Exponent` can be
+any signed integer type, but note that `MinExponent` and `MaxExponent` can not go right up to the limits
+of the `Exponent` type as there has to be a little extra headroom for internal calculations. You will
+get a compile time error if if this is the case. In addition if MinExponent or MaxExponent are zero, then
+the library will choose suitable values that are as large as possible given the constraints of the type
+and need for extra headhoom for internal calculations.
+
+There is full standard library and `numeric_limits` support available for this type.
+
+Things you should know when using this type:
+
+* Default constructed `cpp_bin_float`s have a value of zero.
+* The radix of this type is 2, even when the precision is specified as decimal digits.
+* The type supports both infinities and NaN's. An infinity is generated whenever the result would overflow,
+and a NaN is generated for any mathematically undefined operation.
+* There is a `std::numeric_limits` specialisation for this type.
+* Any `number` instantiated on this type, is convertible to any other `number` instantiated on this type -
+for example you can convert from `number<cpp_bin_float<50> >` to `number<cpp_bin_float<SomeOtherValue> >`.
+Narrowing conversions round to nearest and are `explicit`.
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+as a valid floating point number.
+* All arithmetic operations are correctly rounded to nearest. String comversions and the `sqrt` function
+are also correctly rounded, but transcendental functions (sin, cos, pow, exp etc) are not.
+
+[h5 cpp_bin_float example:]
+
+[cpp_bin_float_eg]
+
+[endsect]
+
 [section:cpp_dec_float cpp_dec_float]
 
 `#include <boost/multiprecision/cpp_dec_float.hpp>`
@@ -662,14 +753,14 @@
    }} // namespaces
 
 The `cpp_dec_float` back-end is used in conjunction with `number`: It acts as an entirely C++ (header only and dependency free)
-floating-point number type that is a drop-in replacement for the native C++ floating-point types, but with
+floating-point number type that is a drop-in replacement for the native C++ floating-point types, but with
 much greater precision.
 
-Type `cpp_dec_float` can be used at fixed precision by specifying a non-zero `Digits10` template parameter.
+Type `cpp_dec_float` can be used at fixed precision by specifying a non-zero `Digits10` template parameter.
 The typedefs `cpp_dec_float_50` and `cpp_dec_float_100` provide arithmetic types at 50 and 100 decimal digits precision
 respectively. Optionally, you can specify an integer type to use for the exponent, this defaults to a 32-bit integer type
 which is more than large enough for the vast majority of use cases, but larger types such as `long long` can also be specified
-if you need a truly huge exponent range. In any case the ExponentType must be a built in signed integer type at least 2 bytes
+if you need a truly huge exponent range. In any case the ExponentType must be a built in signed integer type at least 2 bytes
 and 16-bits wide.
 
 Normally `cpp_dec_float` allocates no memory: all of the space required for its digits are allocated
@@ -691,15 +782,15 @@
 * The type supports both infinities and NaN's. An infinity is generated whenever the result would overflow,
 and a NaN is generated for any mathematically undefined operation.
 * There is a `std::numeric_limits` specialisation for this type.
-* Any `number` instantiated on this type, is convertible to any other `number` instantiated on this type -
+* Any `number` instantiated on this type, is convertible to any other `number` instantiated on this type -
 for example you can convert from `number<cpp_dec_float<50> >` to `number<cpp_dec_float<SomeOtherValue> >`.
 Narrowing conversions are truncating and `explicit`.
 * Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid floating point number.
 * The actual precision of a `cpp_dec_float` is always slightly higher than the number of digits specified in
-the template parameter, actually how much higher is an implementation detail but is always at least 8 decimal
+the template parameter, actually how much higher is an implementation detail but is always at least 8 decimal
 digits.
-* Operations involving `cpp_dec_float` are always truncating. However, note that since their are guard digits
+* Operations involving `cpp_dec_float` are always truncating. However, note that since their are guard digits
 in effect, in practice this has no real impact on accuracy for most use cases.
 
 [h5 cpp_dec_float example:]
@@ -726,7 +817,7 @@
    }} // namespaces
 
 The `gmp_float` back-end is used in conjunction with `number` : it acts as a thin wrapper around the [gmp] `mpf_t`
-to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
+to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
 much greater precision.
 
 Type `gmp_float` can be used at fixed precision by specifying a non-zero `Digits10` template parameter, or
@@ -754,13 +845,13 @@
 * It is not possible to round-trip objects of this type to and from a string and get back
 exactly the same value. This appears to be a limitation of [gmp].
 * Since the underlying [gmp] types have no notion of infinities or NaN's, care should be taken
-to avoid numeric overflow or division by zero. That latter will result in a std::overflow_error being thrown,
+to avoid numeric overflow or division by zero. That latter will result in a std::overflow_error being thrown,
 while generating excessively large exponents may result in instability of the underlying [gmp]
-library (in testing, converting a number with an excessively large or small exponent
+library (in testing, converting a number with an excessively large or small exponent
 to a string caused [gmp] to segfault).
 * This type can equally be used with [mpir] as the underlying implementation - indeed that is
 the recommended option on Win32.
-* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid floating point number.
 * Division by zero results in a `std::overflow_error` being thrown.
 
@@ -797,7 +888,7 @@
    }} // namespaces
 
 The `mpfr_float_backend` type is used in conjunction with `number`: It acts as a thin wrapper around the [mpfr] `mpfr_t`
-to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
+to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
 much greater precision.
 
 Type `mpfr_float_backend` can be used at fixed precision by specifying a non-zero `Digits10` template parameter, or
@@ -813,7 +904,7 @@
 expense of growing the size of `mpfr_float_backend`. It can only be used at fixed precision, and
 should only be used for lower digit counts. Note that we can not guarantee that using `allocate_stack`
 won't cause any calls to mpfr's allocation routines, as mpfr may call these inside it's own code.
-The following table gives an idea of the performance tradeoff's at 50 decimal digits
+The following table gives an idea of the performance tradeoff's at 50 decimal digits
 precision[footnote Compiled with VC++10 and /Ox, with MPFR-3.0.0 and MPIR-2.3.0]:
 
 [table
@@ -843,7 +934,7 @@
 [mpfr] or [gmp] code.
 * The code can equally use [mpir] in place of [gmp] - indeed that is the preferred option on Win32.
 * This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
-* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid floating point number.
 * Division by zero results in an infinity.
 
@@ -866,17 +957,17 @@
    }} // namespaces
 
 The `float128` number type is a very thin wrapper around GCC's `__float128` or Intel's `_Quad` data types
-and provides an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
+and provides an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
 a 113 bit mantissa, and compatible with FORTRAN's 128-bit QUAD real.
 
 All the usual standard library and `numeric_limits` support are available, performance should be equivalent
-to the underlying native types: for example the LINPACK benchmarks for GCC's `__float128` and
+to the underlying native types: for example the LINPACK benchmarks for GCC's `__float128` and
 `boost::multiprecision::float128` both achieved 5.6 MFLOPS[footnote On 64-bit Ubuntu 11.10, GCC-4.8.0, Intel Core 2 Duo T5800.].
 
 As well as the usual conversions from arithmetic and string types, instances of `float128` are
 copy constructible and assignable from GCC's `__float128` and Intel's `_Quad` data types.
 
-It's also possible to access the underlying `__float128` or `_Quad` type via the `data()` member
+It's also possible to access the underlying `__float128` or `_Quad` type via the `data()` member
 function of `float128_backend`.
 
 Things you should know when using this type:
@@ -965,7 +1056,7 @@
    }} // namespaces
 
 The `mpfi_float_backend` type is used in conjunction with `number`: It acts as a thin wrapper around the [mpfi] `mpfi_t`
-to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
+to provide an real-number type that is a drop-in replacement for the native C++ floating-point types, but with
 much greater precision and implementing interval arithmetic.
 
 Type `mpfi_float_backend` can be used at fixed precision by specifying a non-zero `Digits10` template parameter, or
@@ -992,83 +1083,83 @@
 [mpfr] or [gmp] code.
 * The code can equally use [mpir] in place of [gmp] - indeed that is the preferred option on Win32.
 * This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
-* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted
 as a valid floating point number.
 * Division by zero results in an infinity.
 
 There are some additional non member functions for working on intervals:
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfr_float_backend<Digits10>, ExpressionTemplates> lower(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfr_float_backend<Digits10>, ExpressionTemplates> lower(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
 
 Returns the lower end of the interval.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfr_float_backend<Digits10>, ExpressionTemplates> upper(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfr_float_backend<Digits10>, ExpressionTemplates> upper(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
 
 Returns the upper end of the interval.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfr_float_backend<Digits10>, ExpressionTemplates> median(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfr_float_backend<Digits10>, ExpressionTemplates> median(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
 
 Returns the mid point of the interval.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfr_float_backend<Digits10>, ExpressionTemplates> width(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfr_float_backend<Digits10>, ExpressionTemplates> width(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);
 
 Returns the absolute width of the interval.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfi_float_backend<Digits10>, ExpressionTemplates> intersect(
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfi_float_backend<Digits10>, ExpressionTemplates> intersect(
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
 
-Returns the interval which is the intersection of the ['a] and ['b]. Returns an
+Returns the interval which is the intersection of the ['a] and ['b]. Returns an
 unspecified empty interval if there is no such intersection.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- number<mpfi_float_backend<Digits10>, ExpressionTemplates> hull(
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ number<mpfi_float_backend<Digits10>, ExpressionTemplates> hull(
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
 
 Returns the interval which is the union of ['a] and ['b].
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool overlap(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool overlap(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
 
 Returns `true` only if the intervals ['a] and ['b] overlap.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates1, expression_template_option ExpressionTemplates2>
- bool in(const number<mpfr_float_backend<Digits10>, ExpressionTemplates1>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates2>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates1, expression_template_option ExpressionTemplates2>
+ bool in(const number<mpfr_float_backend<Digits10>, ExpressionTemplates1>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates2>& b);
 
 Returns `true` only if point ['a] is contained within the interval ['b].
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool zero_in(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool zero_in(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
 
 Returns `true` only if the interval ['a] contains the value zero.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
 
 Returns `true` only if ['a] is a subset of ['b].
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool proper_subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
- const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool proper_subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
+ const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);
 
 Returns `true` only if ['a] is a proper subset of ['b].
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool empty(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool empty(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
 
 Returns `true` only if ['a] is an empty interval, equivalent to `upper(a) < lower(a)`.
 
- template <unsigned Digits10, expression_template_option ExpressionTemplates>
- bool singleton(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
+ template <unsigned Digits10, expression_template_option ExpressionTemplates>
+ bool singleton(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);
 
 Returns `true` if `lower(a) == upper(a)`.
 
@@ -1192,7 +1283,7 @@
 
    }} // namespaces
 
-The `tommath_rational` back-end is used via the typedef `boost::multiprecision::tom_rational`. It acts as a thin wrapper around
+The `tommath_rational` back-end is used via the typedef `boost::multiprecision::tom_rational`. It acts as a thin wrapper around
 `boost::rational<tom_int>`
 to provide a rational number type that is a drop-in replacement for the native C++ number types, but with unlimited precision.
 
@@ -1234,7 +1325,7 @@
 
    namespace boost{ namespace multiprecision{
 
- template <class IntBackend>
+ template <class IntBackend>
    class rational_adpater;
 
    }}
@@ -1285,7 +1376,7 @@
 
    }} // namespaces
 
-The `logged_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around
+The `logged_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around
 some other backend to class `number` and logs all the events that take place on that object. Before any number operation takes
 place, it calls `log_prefix_event` with the arguments to the operation (up to 4), plus a string describing the operation.
 Then after the operation it calls `log_postfix_event` with the result of the operation, plus a string describing the operation.
@@ -1323,7 +1414,7 @@
 
    }} // namespaces
 
-The `debug_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around
+The `debug_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around
 some other backend to class `number` and intercepts all operations on that object storing the result as a string within itself.
 
 This type provides `numeric_limits` support whenever the template argument Backend does so.
@@ -1354,8 +1445,8 @@
 
 Let's face it debugger multiprecision numbers is hard - simply because we can't easily inspect the value of the numbers.
 Visual C++ provides a partial solution in the shape of "visualizers" which provide improved views of complex data structures,
-these visualizers need to be added to the `[Visualizer]` section of `autoexp.dat` located in the `Common7\Packages\Debugger`
-directory of your Visual Studio installation. The actual visualizer code is in the sandbox
+these visualizers need to be added to the `[Visualizer]` section of `autoexp.dat` located in the `Common7/Packages/Debugger`
+directory of your Visual Studio installation. The actual visualizer code is in the sandbox
 [@https://svn.boost.org/svn/boost/sandbox/boost_docs/subprojects/DebuggerVisualizers/multiprecision.vis.txt here] - just cut and paste the code
 into your `autoexp.dat` file.
 
@@ -1367,7 +1458,7 @@
 [$../debugger1.png]
 
 The next visualizer provides improved views of cpp_int: small numbers are displayed as actual values, while larger numbers are
-displayed as an array of hexadecimal parts, with the most significant part first.
+displayed as an array of hexadecimal parts, with the most significant part first.
 
 Here's what it looks like for small values:
 
@@ -1418,7 +1509,7 @@
 
 Additional conversions may be supported by particular backends.
 
-* A `number` can be converted to any built in type, via an explicit conversion operator:
+* A `number` can be converted to any built in type, via an explicit conversion operator:
 this functionality is only available on compilers supporting C++11's explicit conversion syntax.
 
    mpz_int z(2);
@@ -1452,7 +1543,7 @@
    i *= 3.14; // Error, no *= operator will be found.
 
 * Any number type can be streamed to and from the C++ iostreams:
-
+
 
    cpp_dec_float_50 df = "3.14159265358979323846264338327950288419716939937510";
    // Now print at full precision:
@@ -1473,7 +1564,7 @@
 
    mpz_int z = 0;
    mpf_float f = z; // OK, GMP handles this conversion natively, and it's not lossy and therefore implicit
-
+
    mpf_float_50 f50 = 2;
    f = f50; // OK, conversion from fixed to variable precision, f will have 50 digits precision.
    f50 = f; // Error, conversion from variable to fixed precision is potentially lossy, explicit cast required.
@@ -1481,7 +1572,7 @@
 * Some interconversions between number types are completely generic, and are always available, albeit the conversions are always ['explicit]:
 
    cpp_int cppi(2);
- // We can always convert between numbers of the same category -
+ // We can always convert between numbers of the same category -
    // int to int, rational to rational, or float to float, so this is OK
    // as long as we use an explicit conversion:
    mpz_int z(cppi);
@@ -1554,8 +1645,8 @@
 Knuth Vol 2, which recommends 25 trials for a pretty strong likelihood that /n/ is prime.
 
 The third optional argument is for a Uniform Random Number Generator from Boost.Random. When not provided the `mt19937`
-generator is used. Note that when producing random primes then you should probably use a different random number generator
-to produce candidate prime numbers for testing, than is used internally by `miller_rabin_test` for determining
+generator is used. Note that when producing random primes then you should probably use a different random number generator
+to produce candidate prime numbers for testing, than is used internally by `miller_rabin_test` for determining
 whether the value is prime. It also helps of course to seed the generators with some source of randomness.
 
 The following example searches for a prime `p` for which `(p-1)/2` is also probably prime:
@@ -1566,19 +1657,19 @@
 
 [section:lits Literal Types and `constexpr` Support]
 
-[note The features described in this section make heavy use of C++11 language features, currently
+[note The features described in this section make heavy use of C++11 language features, currently
 (as of May 2013) only
 GCC-4.7 and later, and Clang 3.3 and later have the support required to make these features work.]
 
-There is limited support for `constexpr` and user-defined literals in the library, currently the
+There is limited support for `constexpr` and user-defined literals in the library, currently the
 `number` front end supports `constexpr`
-on default construction and all forwarding constructors, but not on any of the non-member operators. So if
-some type `B` is a literal type, then `number<B>` is also a literal type, and you will be able to
+on default construction and all forwarding constructors, but not on any of the non-member operators. So if
+some type `B` is a literal type, then `number<B>` is also a literal type, and you will be able to
 compile-time-construct such a type from any literal that `B` is compile-time-constructible from.
 However, you will not be able to perform compile-time arithmetic on such types.
 
 Currently the only backend type provided by the library that is also a literal type are instantiations
-of `cpp_int_backend` where the Allocator parameter is type `void`, and the Checked parameter is
+of `cpp_int_backend` where the Allocator parameter is type `void`, and the Checked parameter is
 `boost::multiprecision::unchecked`.
 
 For example:
@@ -1681,7 +1772,7 @@
 
 [section:mixed Mixed Precision Arithmetic]
 
-Mixed precision arithmetic is fully supported by the library.
+Mixed precision arithmetic is fully supported by the library.
 
 There are two different forms:
 
@@ -1710,7 +1801,7 @@
 
 [h4 Operands of the Same Precision]
 
-Sometimes you want to apply an operator to two arguments of the same precision in
+Sometimes you want to apply an operator to two arguments of the same precision in
 such a way as to obtain a result of higher precision. The most common situation
 occurs with fixed precision integers, where you want to multiply two N-bit numbers
 to obtain a 2N-bit result. This is supported in this library by the following
@@ -1726,7 +1817,7 @@
    ResultType& multiply(ResultType& result, const Source1& a, const Source2& b);
 
 These functions apply the named operator to the arguments ['a] and ['b] and store the
-result in ['result], returning ['result]. In all cases they behave "as if"
+result in ['result], returning ['result]. In all cases they behave "as if"
 arguments ['a] and ['b] were first promoted to type `ResultType` before applying the
 operator, though particular backends may well avoid that step by way of an optimization.
 
@@ -1744,9 +1835,9 @@
 
 [h4 Backends With Optimized Mixed Precision Arithmetic]
 
-The following backends have at least some direct support for mixed precision arithmetic,
+The following backends have at least some direct support for mixed precision arithmetic,
 and therefore avoid creating unnecessary temporaries when using the interfaces above.
-Therefore when using these types it's more efficient to use mixed precision arithmetic,
+Therefore when using these types it's more efficient to use mixed precision arithmetic,
 than it is to explicitly cast the operands to the result type:
 
 __mpfr_float_backend, __mpf_float, __cpp_int.
@@ -1755,7 +1846,7 @@
 
 [section:gen_int Generic Integer Operations]
 
-All of the [link boost_multiprecision.ref.number.integer_functions non-member integer operations] are overloaded for the
+All of the [link boost_multiprecision.ref.number.integer_functions non-member integer operations] are overloaded for the
 built in integer types in
 `<boost/multiprecision/integer.hpp>`.
 Where these operations require a temporary increase in precision (such as for powm), then
@@ -1862,6 +1953,861 @@
 
 [endsect]
 
+[section:limits Numeric Limits]
+
+Boost.Multiprecision tries hard to implement `std::numeric_limits` for all types
+as far as possible and meaningful because experience with Boost.Math
+has shown that this aids portability.
+
+The [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf C++ standard library]
+defines `std::numeric_limits` in section 18.3.2.
+
+This in turn refers to the C standard
+[@http://www.open-std.org/jtc1/sc22/wg11/docs/n507.pdf SC22/WG11 N507 DRAFT INTERNATIONAL ISO/IEC STANDARD
+ WD 10967-1]
+Information technology Language independent arithmetic Part 1: Integer and Floating point arithmetic.
+
+That C Standard in turn refers to
+
+[@http://754r.ucbtest.org/standards/754.pdf IEEE754 IEEE Standard for Binary
+Floating-Point Arithmetic]
+
+There is a useful summary at
+[@http://www.cplusplus.com/reference/limits/numeric_limits/ C++ reference].
+
+The chosen backend often determines how completely `std::numeric_limits` is available.
+
+Compiler options, processor type, and definition of macros or assembler instructions to control denormal numbers will alter
+the values in the tables given below.
+
+[warning GMP's `mpf_t` does not have a concept of overflow:
+operations that lead to overflow eventually run of out of resources
+and terminate with stack overflow (often after several seconds).]
+
+[section:constants std::numeric_limits<> constants]
+
+
+[h4 is_specialized]
+
+`true` for all arithmetic types (integer, floating and fixed-point)
+for which `std::numeric_limits<T>::numeric_limits` is specialized.
+
+A typical test is
+
+ if (std::numeric_limits<T>::is_specialized == false)
+ {
+ std::cout << "type " << typeid(T).name() << " is not specialized for std::numeric_limits!" << std::endl;
+ // ...
+ }
+
+Typically `numeric_limits<T>::is_specialized` is `true` for all `T` where the compile-time constant
+members of `numeric_limits` are indeed known at compile time, and don't vary at runtime. For example
+floating point types with runtime-variable precision such as `mpfr_float` have no `numeric_limits`
+specialization as it would be impossible to define all the members at compile time. In contrast
+the precision of a type such as `mpfr_float_50` is known at compile time, and so it ['does] have a
+`numeric_limits` specialization.
+
+Note that not all the `std::numeric_limits` member constants and functions are meaningful for all user-defined types (UDT),
+such as the decimal and binary multiprecision types provided here. More information on this is given in the sections below.
+
+[h4 infinity]
+
+For floating-point types, [infin] is defined wherever possible,
+but clearly infinity is meaningless for __arbitrary_precision arithmetic backends,
+and there is one floating point type (GMP's `mpf_t`, see __mpf_float) which has no notion
+of infinity or NaN at all.
+
+A typical test whether infinity is implemented is
+
+ if(std::numeric_limits<T>::has_infinity)
+ {
+ std::cout << std::numeric_limits<T>::infinity() << std::endl;
+ }
+
+and using tests like this is strongly recommended to improve portability.
+
+If the backend is switched to a type that does not support infinity then,
+without checks like this, there will be trouble.
+
+[h4 is_signed]
+
+`std::numeric_limits<T>::is_signed == true` if the type `T` is signed.
+
+For built-in binary types, the sign is held in a single bit,
+but for other types (cpp_dec_float and cpp_bin_float)
+it may be a separate storage element, usually `bool`.
+
+[h4 is_exact]
+
+`std::numeric_limits<T>::is_exact == true` if type T uses exact representations.
+
+This is defined as `true` for all integer types and `false` for floating-point types.
+
+[@http://stackoverflow.com/questions/14203654/stdnumeric-limitsis-exact-what-is-a-usable-definition A usable definition]
+has been discussed.
+
+ISO/IEC 10967-1, Language independent arithmetic, noted by the C++ Standard defines
+
+ A floating point type F shall be a finite subset of [real].
+
+The important practical distinction is that all integers (up to `max()`) can be stored exactly.
+
+[@http://en.wikipedia.org/wiki/Rational_number Rational]
+types using two integer types are also exact.
+
+Floating-point types [*cannot store all real values]
+(those in the set of [real]) [*exactly].
+For example, 0.5 can be stored exactly in a binary floating-point, but 0.1 cannot.
+What is stored is the nearest representable real value, that is, rounded to nearest.
+
+Fixed-point types (usually decimal) are also defined as exact, in that they only
+store a [*fixed precision], so half cents or pennies (or less) cannot be stored.
+The results of computations are rounded up or down,
+just like the result of integer division stored as an integer result.
+
+There are number of proposals to
+[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3407.html
+add Decimal Floating Point Support to C++].
+
+[@http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2849.pdf Decimal TR].
+
+And also
+[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3352.html
+C++ Binary Fixed-Point Arithmetic].
+
+[h4 is_bounded]
+
+`std::numeric_limits<T>::is_bounded == true` if the set of values represented by the type `T` is finite.
+
+This is `true` for all built-in integer, fixed and floating-point types,
+and most multi-precision types.
+
+It is only `false` for a few __arbitrary_precision types like `cpp_int`.
+
+Rational and fixed-exponent representations are exact but not integer.
+
+[h4 is_modulo]
+
+`std::numeric_limits<T>::is_modulo` is defined as `true` if adding two positive values of type T
+can yield a result less than either value.
+
+`is_modulo == true` means that the type does not overflow, but, for example,
+'wraps around' to zero, when adding one to the `max()` value.
+
+For most built-in integer types, `std::numeric_limits<>::is_modulo` is `true`.
+
+`bool` is the only exception.
+
+The modulo behaviour is sometimes useful,
+but also can be unexpected, and sometimes undesired, behaviour.
+
+Overflow of signed integers can be especially unexpected,
+possibly causing change of sign.
+
+Boost.Multiprecision integer type `cpp_int` is not modulo
+because as an __arbitrary_precision types,
+it expands to hold any value that the machine resources permit.
+
+However fixed precision __cpp_int's may be modulo if they are unchecked
+(i.e. they behave just like built in integers), but not if they are checked
+(overflow causes an exception to be raised).
+
+Built-in and multi-precision floating-point types are normally not modulo.
+
+Where possible, overflow is to `std::numeric_limits<>::infinity()`,
+provided `std::numeric_limits<>::has_infinity == true`.
+
+[h4 radix]
+
+Constant `std::numeric_limits<T>::radix` returns either 2 (for built-in and binary types)
+or 10 (for decimal types).
+
+[h4 digits]
+
+The number of `radix` digits that be represented without change:
+
+* for integer types, the number of [*non-sign bits] in the significand.
+* for floating types, the number of [*radix digits] in the significand.
+
+The values include any implicit bit, so for example, for the ubiquious
+`double` using 64 bits
+([@http://en.wikipedia.org/wiki/Double_precision_floating-point_format IEEE binary64 ]),
+`digits` == 53, even though there are only 52 actual bits of the significand stored in the representation.
+The value of `digits` reflects the fact that there is one implicit bit which is always set to 1.
+
+The Boost.Multiprecision binary types do not use an implicit bit, so the
+`digits` member reflects exactly how many bits of precision were requested:
+
+ typedef number<cpp_bin_float<53, digit_base_2> > float64;
+ typedef number<cpp_bin_float<113, digit_base_2> > float128;
+ std::numeric_limits<float64>::digits == 53.
+ std::numeric_limits<float128>::digits == 113.
+
+For the most common case of `radix == 2`,
+`std::numeric_limits<T>::digits` is the number of bits in the representation,
+not counting any sign bit.
+
+For a decimal integer type, when `radix == 10`, it is the number of decimal digits.
+
+[h4 digits10]
+
+Constant `std::numeric_limits<T>::digits10` returns the number of
+decimal digits that can be represented without change or loss.
+
+For example, `numeric_limits<unsigned char>::digits10` is 2.
+
+This somewhat inscrutable definition means that an `unsigned char`
+can hold decimal values `0..99`
+without loss of precision or accuracy, usually from truncation.
+
+Had the definition been 3 then that would imply it could hold 0..999,
+but as we all know, an 8-bit `unsigned char` can only hold 0..255,
+and an attempt to store 256 or more will involve loss or change.
+
+For bounded integers, it is thus [*one less] than number of decimal digits
+you need to display the biggest integer `std::numeric_limits<T>::max()`.
+This value can be used to predict the layout width required for
+
+[digits10_1]
+
+For example, `unsigned short` is often stored in 16 bits,
+so the maximum value is 0xFFFF or 65535.
+
+[digits10_2]
+
+
+For bounded floating-point types,
+if we create a `double` with a value with `digits10` (usually 15) decimal digits,
+`1e15` or `1000000000000000` :
+
+[digits10_3]
+
+and we can increment this value to `1000000000000001`
+as expected and show the difference too.
+
+But if we try to repeat this with more than `digits10` digits,
+
+[digits10_4]
+
+then we find that when we add one it has no effect,
+and display show that there is loss of precision. See
+[@http://en.wikipedia.org/wiki/Loss_of_significance Loss of significance or cancellation error].
+
+So `digits10` is the number of decimal digits [*guaranteed] to be correct.
+
+For example, 'round-tripping' for `double`:
+
+* If a decimal string with at most `digits10`( == 15) significant decimal digits
+is converted to `double` and then converted back to the
+same number of significant decimal digits,
+then the final string will match the original 15 decimal digit string.
+* If a `double` floating-point number is converted to a decimal string
+with at least 17 decimal digits
+and then converted back to `double`,
+then the result will be binary indentical to the original `double` value.
+
+For most purposes, you will much more likely want
+`std::numeric_limits<>::max_digits10`,
+the number of decimal digits that ensure that a change of one least significant bit (ULP)
+produces a different decimal digits string.
+
+For nearly all floating-point types, `max_digits10` is `digits10+2`,
+but you should use `max_digits10` where possible.
+
+If `max_digits10` is not available, you should using the
+[@http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF Kahan formula for floating-point type T]
+
+ max_digits10 = std::numeric_limits<T>::digits * 3010U/10000U;
+
+The factor is log[sub 10](2) = 0.3010
+but must be evaluated at compile time using only integers.
+
+(See also
+[@http://www.loria.fr/~zimmerma/mca/mca-cup-0.5.9.pdf Richard P. Brent and Paul Zimmerman, Modern Computer Arithmetic]
+Equation 3.8 on page 116.).
+
+The extra two (or 3) least significant digits are 'noisy' and may be junk,
+but if you want to 'round-trip' - printing a value out and reading it back in -
+you must use `os.precision(std::numeric_limits<T>::max_digits10)`.
+For at least one popular compiler, you must also use `std::scientific` format.
+
+[h4 max_digits10]
+
+`std::numeric_limits<T>::max_digits10` was added for floating-point
+because `digits10` decimal digits are insufficient to show
+a least significant bit (ULP) change giving puzzling displays like
+
+ 0.666666666666667 != 0.666666666666667
+
+from failure to 'round-trip', for example:
+
+[max_digits10_2]
+
+If you wish to ensure that a change of one least significant bit (ULP)
+produces a different decimal digits string,
+then `max_digits10` is the precision to use.
+
+For example:
+
+[max_digits10_3]
+
+will display [pi] to the maximum possible precision using a `double`.
+
+[max_digits10_4]
+
+For integer types, `max_digits10` is implementation-dependant,
+but is usually `digits10 + 2`.
+This is the output field width required for the maximum value of the type T
+`std::numeric_limits<T>::max()` including a sign and a space.
+
+So this will produce neat columns.
+
+ std::cout << std::setw(std::numeric_limits<int>::max_digits10) ...
+
+[note For Microsoft Visual Studio 2010,
+`std::numeric_limits<float>::max_digits10` is wrongly defined as 8. It should be 9.]
+
+[note For Microsoft Visual Studio, and default float format, a small range of values
+approximately 0.0001 to 0.004, with exponent values of 3f2 to 3f6,
+are wrongly input by one least significant bit,
+probably every third value of significand.
+
+A workaround is using scientific or exponential format `<< std::scientific`.]
+
+[note BOOST_NO_CXX11_NUMERIC_LIMITS is a suitable feature-test macro to determine if
+`std::numeric_limits<float>::max_digits10` is implemented on any platform.
+If `max_digits10` is not available, you should using the
+[@http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF Kahan formula for floating-point type T].
+See above.]
+
+[max_digits10_1] [/ example for using max_digits10]
+
+[h4 round_style]
+
+The rounding style determines how the result of floating-point operations
+is treated when the result cannot be [*exactly represented] in the significand.
+Various rounding modes may be provided:
+
+* round to nearest up or down (default for floating-point types).
+* round up (toward positive infinity).
+* round down (toward negative infinity).
+* round toward zero (integer types).
+* no rounding (if decimal radix).
+* rounding mode is not determinable.
+
+For integer types, `std::numeric_limits<T>::round_style` is always towards zero, so
+
+ std::numeric_limits<T>::round_style == std::round_to_zero;
+
+A decimal type, `cpp_dec_float` rounds in no particular direction,
+which is to say it doesn't round at all.
+And since there are several guard digits,
+it's not really the same as truncation (round toward zero) either.
+
+For floating-point types, it is normal to round to nearest.
+
+ std::numeric_limits<T>::round_style == std::round_to_nearest;
+
+See function `std::numeric_limits<T>::round_error` for the maximum error (in ULP)
+that rounding can cause.
+
+[h4 has_denorm_loss]
+
+`true` if a loss of precision is detected as a
+[@http://en.wikipedia.org/wiki/Denormalization denormalization] loss,
+rather than an inexact result.
+
+Always `false` for integer types.
+
+`false` for all types which do not have `has_denorm` == `std::denorm_present`.
+
+[h4 denorm_style]
+
+[@http://en.wikipedia.org/wiki/Denormal_number Denormalized values] are
+representations with a variable number of exponent bits that can permit
+gradual underflow, so that, if type T is `double`.
+
+ std::numeric_limits<T>::denorm_min() < std::numeric_limits<T>::min()
+
+A type may have any of the following `enum float_denorm_style` values:
+
+* `std::denorm_absent`, if it does not allow denormalized values.
+(Always used for all integer and exact types).
+* `std::denorm_present`, if the floating-point type allows denormalized values.
+*`std::denorm_indeterminate`, if indeterminate at compile time.
+
+[h4 Tinyness before rounding]
+
+`bool std::numeric_limits<T>::tinyness_before`
+
+`true` if a type can determine that a value is too small
+to be represent as a normalized value before rounding it.
+
+Generally true for `is_iec559` floating-point built-in types,
+but false for integer types.
+
+Standard-compliant IEEE 754 floating-point implementations may detect the floating-point underflow at three predefined moments:
+
+# After computation of a result with absolute value smaller than
+`std::numeric_limits<T>::min()`,
+such implementation detects ['tinyness before rounding] (e.g. UltraSparc).
+
+# After rounding of the result to `std::numeric_limits<T>::digits` bits,
+if the result is tiny, such implementation detects ['tinyness after rounding]
+(e.g. SuperSparc).
+
+# If the conversion of the rounded tiny result to subnormal form
+resulted in the loss of precision, such implementation detects ['denorm loss].
+
+[endsect] [/section:constants std::numeric_limits<> Constants]
+
+[section:functions std::numeric_limits<> functions]
+
+[h4 max function]
+
+Function `std::numeric_limits<T>::max()` returns the largest finite value
+that can be represented by the type T. If there is no such value (and
+`numeric_limits<T>::bounded` is `false`) then returns `T()`.
+
+For built-in types there is usually a corresponding MACRO value TYPE_MAX,
+where TYPE is CHAR, INT, FLOAT etc.
+
+Other types, including those provided by a typedef,
+for example `INT64_T_MAX` for `int64_t`, may provide a macro definition.
+
+To cater for situations where no `numeric_limits` specialization is available
+(for example because the precision of the type varies at runtime),
+packaged versions of this (and other functions) are provided using
+
+ #include <boost/math/tools/precision.hpp>
+
+ T = boost::math::tools::max_value<T>();
+
+Of course, these simply use `std::numeric_limits<T>::max()` if available,
+but otherwise 'do something sensible'.
+
+[h4 lowest function]
+
+Since C++11: `std::numeric_limits<T>::lowest()` is
+
+* For integral types, the same as function `min()`.
+* For floating-point types, generally the negative of `max()`
+(but implementation-dependent).
+
+[digits10_5]
+
+[h4 min function]
+
+Function `std::numeric_limits<T>::min()` returns the minimum finite value
+that can be represented by the type T.
+
+For built-in types there is usually a corresponding MACRO value TYPE_MIN,
+where TYPE is CHAR, INT, FLOAT etc.
+
+Other types, including those provided by a typedef,
+for example `INT64_T_MIN` for `int64_t`, may provide a macro definition.
+
+For floating-point types,
+it is more fully defined as the ['minimum positive normalized value].
+
+See `std::numeric_limits<T>::denorm_min()` for the smallest denormalized value, provided
+
+ std::numeric_limits<T>::has_denorm == std::denorm_present
+
+
+To cater for situations where no `numeric_limits` specialization is available
+(for example because the precision of the type varies at runtime),
+packaged versions of this (and other functions) are provided using
+
+ #include <boost/math/tools/precision.hpp>
+
+ T = boost::math::tools::min_value<T>();
+
+Of course, these simply use `std::numeric_limits<T>::min()` if available.
+
+[h4 denorm_min function]
+
+Function `std::numeric_limits<T>::denorm_min()`
+returns the smallest
+[@http://en.wikipedia.org/wiki/Denormal_number denormalized value],
+provided
+
+ std::numeric_limits<T>::has_denorm == std::denorm_present
+
+[denorm_min_1]
+
+The exponent is effectively reduced from -308 to -324
+(though it remains encoded as zero and leading zeros appear in the significand,
+thereby losing precision until the significand reaches zero).
+
+[h4 round_error]
+
+Function `std::numeric_limits<T>::round_error()` returns the maximum error
+(in units of [@http://en.wikipedia.org/wiki/Unit_in_the_last_place ULP])
+that can be caused by any basic arithmetic operation.
+
+ round_style == std::round_indeterminate;
+
+The rounding style is indeterminable at compile time.
+
+For floating-point types, when rounding is to nearest,
+only half a bit is lost by rounding, and `round_error == 0.5`.
+In contrast when rounding is towards zero, or plus/minus infinity,
+we can loose up to one bit from rounding, and `round_error == 1`.
+
+For integer types, rounding always to zero, so at worst almost one bit can be rounded,
+so `round_error == 1`.
+
+`round_error()` can be used with `std::numeric_limits<T>::epsilon()` to estimate
+the maximum potential error caused by rounding. For typical floating-point types,
+`round_error() = 1/2`, so half epsilon is the maximum potential error.
+
+[round_error_1]
+
+There are, of course, many occasions when much bigger loss of precision occurs,
+for exampe, caused by
+[@http://en.wikipedia.org/wiki/Loss_of_significance Loss of significance or cancellation error]
+or very many iterations.
+
+[h4 epsilon]
+
+Function `std::numeric_limits<T>::epsilon()` is meaningful only for non-integral types.
+
+It returns the difference between `1.0` and the next value representable
+by the floating-point type T.
+So it is a one least-significant-bit change in this floating-point value.
+
+For `double` (`float_64t`) it is `2.2204460492503131e-016`
+showing all possibly significant 17 decimal digits.
+
+[epsilon_1]
+
+We can explicitly increment by one bit using the function `boost::math::float_next()`
+and the result is the same as adding `epsilon`.
+
+[epsilon_2]
+
+Adding any smaller value, like half `epsilon`, will have no effect on this value.
+
+[epsilon_3]
+
+So this cancellation error leaves the values equal, despite adding half `epsilon`.
+
+To achieve greater portability over platform and floating-point type,
+Boost.Math and Boost.Multiprecion provide a package of functions that
+'do something sensible' if the standard `numeric_limits` is not available.
+To use these `#include <boost/math/tools/precision.hpp>`.
+
+[epsilon_4]
+
+[h5 Tolerance for Floating-point Comparisons]
+
+`epsilon` is very useful to compute a tolerance when comparing floating-point values,
+a much more difficult task than is commonly imagined.
+
+For more information you probably want (but still need) see
+[@http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html What Every Computer Scientist Should Know About Floating-Point Arithmetic]
+
+The naive test comparing the absolute difference between two values and a tolerance
+does not give useful results if the values are too large or too small.
+
+So Boost.Test uses an algorithm first devised by Knuth
+for reliably checking if floating-point values are close enough.
+
+See Donald. E. Knuth. The art of computer programming (vol II).
+Copyright 1998 Addison-Wesley Longman, Inc., 0-201-89684-2.
+Addison-Wesley Professional; 3rd edition.
+
+See also:
+
+[@http://adtmag.com/articles/2000/03/15/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx Alberto Squassia, Comparing floats]
+
+[@http://adtmag.com/articles/2000/03/16/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx Alberto Squassia, Comparing floats code]
+
+[@boost:/libs/test/doc/html/utf/testing-tools/floating_point_comparison.html floating-point comparison].
+
+[tolerance_1]
+
+used thus:
+
+ BOOST_CHECK_CLOSE_FRACTION(expected, calculated, tolerance);
+
+(There is also a version using tolerance as a percentage rather than a fraction).
+
+[tolerance_2]
+
+[h4 Infinity - positive and negative]
+
+For floating-point types only, for which
+`std::numeric_limits<T>::has_infinity == true`,
+function `std::numeric_limits<T>::infinity()`
+provides an implementation-defined representation for [infin].
+
+The 'representation' is a particular bit pattern reserved for infinity.
+For IEEE754 system (for which `std::numeric_limits<T>::is_iec559 == true`)
+[@http://en.wikipedia.org/wiki/IEEE_754-1985#Positive_and_negative_infinity positive and negative infinity]
+are assigned bit patterns for all defined floating-point types.
+
+Confusingly, the string resulting from outputting this representation, is also
+implementation-defined. And the string that can be input to generate the representation is also implementation-defined.
+
+For example, the output is `1.#INF` on Microsoft systems, but `inf` on most *nix platforms.
+
+This implementation-defined-ness has hampered use of infinity (and NaNs)
+but Boost.Math and Boost.Multiprecision work hard to provide a sensible representation
+for [*all] floating-point types, not just the built-in types,
+which with the use of suitable facets to define the input and output strings, makes it possible
+to use these useful features portably and including Boost.Serialization.
+
+[h4 Not-A-Number NaN]
+
+[h5 Quiet_NaN]
+
+For floating-point types only, for which
+`std::numeric_limits<T>::has_quiet_NaN == true`,
+function `std::numeric_limits<T>::quiet_NaN()`
+provides an implementation-defined representation for NaN.
+
+[@http://en.wikipedia.org/wiki/NaN NaNs] are values to indicate that the
+result of an assignment or computation is meaningless.
+A typical example is `0/0` but there are many others.
+
+NaNs may also be used, to represent missing values: for example,
+these could, by convention, be ignored in calculations of statistics like means.
+
+Many of the problems with a representation for
+[@http://en.wikipedia.org/wiki/NaN Not-A-Number] has hampered portable use,
+similar to those with infinity.
+
+[nan_1]
+
+But using Boost.Math and suitable facets can permit portable use
+of both NaNs and positive and negative infinity.
+
+[facet_1]
+
+[h5 Signaling NaN]
+
+For floating-point types only, for which
+`std::numeric_limits<T>::has_signaling_NaN == true`,
+function `std::numeric_limits<T>::signaling_NaN()`
+provides an implementation-defined representation for NaN that causes a hardware trap.
+It should be noted however, that at least one implementation of this function causes a hardware
+trap to be triggered simply by calling `std::numeric_limits<T>::signaling_NaN()`, and not only
+by using the value returned.
+
+[endsect] [/section:functions std::numeric_limits<> functions]
+
+[/ Tables of values for numeric_limits for various built-in and cpp_bin_float types]
+[include numeric_limits_32_tables.qbk]
+[/include numeric_limits_64_tables.qbk]
+
+[section:how_to_tell How to Determine the Kind of a Number From `std::numeric_limits`]
+
+Based on the information above, one can see that different kinds of numbers can be
+differentiated based on the information stored in `std::numeric_limits`. This is
+in addition to the traits class [link boost_multiprecision.ref.number.traits_class_support
+number_category] provided by this library.
+
+[h4 Integer Types]
+
+For an integer type T, all of the following conditions hold:
+
+ std::numeric_limits<T>::is_specialized == true
+ std::numeric_limits<T>::is_integer == true
+ std::numeric_limits<T>::is_exact == true
+ std::numeric_limits<T>::min_exponent == 0
+ std::numeric_limits<T>::max_exponent == 0
+ std::numeric_limits<T>::min_exponent10 == 0
+ std::numeric_limits<T>::max_exponent10 == 0
+
+In addition the type is /signed/ if:
+
+ std::numeric_limits<T>::is_signed == true
+
+If the type is arbitrary precision then:
+
+ std::numeric_limits<T>::is_bounded == false
+
+Otherwise the type is bounded, and returns a non zero value
+from:
+
+ std::numeric_limits<T>::max()
+
+and has:
+
+ std::numeric_limits<T>::is_modulo == true
+
+if the type implements modulo arithmetic on overflow.
+
+[h4 Rational Types]
+
+Rational types are just like integers except that:
+
+ std::numeric_limits<T>::is_integer == false
+
+[h4 Fixed Precision Types]
+
+There appears to be no way to tell these apart from rational types, unless they set:
+
+ std::numeric_limits<T>::is_exact == false
+
+This is because these types are in essense a rational type with a fixed denominator.
+
+[h4 Floating Point Types]
+
+For a floating point type T, all of the following conditions hold:
+
+ std::numeric_limits<T>::is_specialized == true
+ std::numeric_limits<T>::is_integer == false
+ std::numeric_limits<T>::is_exact == false
+ std::numeric_limits<T>::min_exponent != 0
+ std::numeric_limits<T>::max_exponent != 0
+ std::numeric_limits<T>::min_exponent10 != 0
+ std::numeric_limits<T>::max_exponent10 != 0
+
+In addition the type is /signed/ if:
+
+ std::numeric_limits<T>::is_signed == true
+
+And the type may be decimal or binary depending on the value of:
+
+ std::numeric_limits<T>::radix
+
+In general, there are no arbitrary precision floating point types, and so:
+
+ std::numeric_limits<T>::is_bounded == false
+
+[h4 Exact Floating Point Types]
+
+Exact floating point types are a [@http://en.wikipedia.org/wiki/Field_%28mathematics%29 field]
+composed of an arbitrary precision integer scaled by an exponent. Such types
+have no division operator and are the same as floating point types except:
+
+ std::numeric_limits<T>::is_exact == true
+
+[h4 Complex Numbers]
+
+For historical reasons, complex numbers do not specialize `std::numeric_limits`, instead you must
+inspect `std::numeric_limits<T::value_type>`.
+
+[endsect]
+
+[endsect] [/section:limits Numeric Limits]
+
+
+[section:input_output Input Output]
+
+
+[h4 Loopback testing]
+
+['Loopback] or ['round-tripping] refers to writing out a value as a decimal digit string using `std::iostream`,
+usually to a `std::stringstream`, and then reading the string back in to another value,
+and confirming that the two values are identical. A trivial example using `float` is:
+
+ float write; // Value to round-trip.
+ std::stringstream ss; // Read and write std::stringstream.
+ ss.precision(std::numeric_limits<T>::max_digits10); // Ensure all potentially significant bits are output.
+ ss.flags(std::ios_base::fmtflags(std::ios_base::scientific)); // Use scientific format.
+ ss << write; // Output to string.
+ float read; // Expected.
+ ss >> read; // Read decimal digits string from stringstream.
+ BOOST_CHECK_EQUAL(write, read); // Should be the same.
+
+and this can be run in a loop for all possible values of a 32-bit float.
+For other floating-point types `T`, including built-in `double`,
+it takes far too long to test all values,
+so a reasonable test strategy is to use a large number of random values.
+
+ T write;
+ std::stringstream ss;
+ ss.precision(std::numeric_limits<T>::max_digits10); // Ensure all potentially significant bits are output.
+ ss.flags(f); // Changed from default iostream format flags if desired.
+ ss << write; // Output to stringstream.
+
+ T read;
+ ss >> read; // Get read using operator>> from stringstream.
+ BOOST_CHECK_EQUAL(read, write);
+
+ read = static_cast<T>(ss.str()); // Get read by converting from decimal digits string representation of write.
+ BOOST_CHECK_EQUAL(read, write);
+
+ read = static_cast<T>(write.str(0, f)); // Get read using format specified when written.
+ BOOST_CHECK_EQUAL(read, write);
+
+
+The test at
+[@../../test/test_cpp_bin_float_io.cpp test_cpp_bin_float_io.cpp]
+allows any floating-point type to be ['round_tripped] using a wide range of fairly random values.
+It also includes tests compared a collection of
+[@../../test/string_data.ipp stringdata] test cases in a file.
+
+[h4 Comparing with output using Built-in types]
+
+One can make some comparisons with the output of
+
+ <number<cpp_bin_float<53, digit_count_2> >
+
+which has the same number of significant bits (53) as 64-bit double precision floating-point.
+
+However, although most outputs are identical, there are differences on some platforms
+caused by the implementation-dependent behaviours allowed by the C99 specification
+[@http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf C99 ISO/IEC 9899:TC2],
+incorporated by C++.
+
+[:['"For e, E, f, F, g, and G conversions, if the number of significant decimal digits
+is at most DECIMAL_DIG, then the result should be correctly rounded.
+If the number of significant decimal digits is more than DECIMAL_DIG
+but the source value is exactly representable with DECIMAL_DIG digits,
+then the result should be an exact representation with trailing zeros.
+Otherwise, the source value is bounded by two adjacent decimal strings L < U,
+both having DECIMAL_DIG significant digits;
+the value of the resultant decimal string D should satisfy L<= D <= U,
+with the extra stipulation that the error should have a correct sign
+for the current rounding direction."]]
+
+So not only is correct rounding for the full number of digits not required,
+but even if the *optional* recomended practice is followed,
+then the value of these last few digits is unspecified
+as long as the value is within certain bounds.
+
+[note Do not expect the output from different platforms
+to be [*identical], but `cpp_dec_float`, `cpp_bin_float` (and other backends) outputs should be
+correctly rounded to the number of digits requested by the set precision and format.]
+
+
+[h4 Macro BOOST_MP_MIN_EXPONENT_DIGITS]
+
+[@http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf C99 Standard]
+for [/e and E] format specifiers, 7.19.6 Formatted input/output functions requires:
+
+\"The exponent always contains at least two digits,
+and only as many more digits as necessary to represent the exponent.\"
+
+So to conform to the C99 standard (incorporated by C++)
+
+ #define BOOST_MP_MIN_EXPONENT_DIGITS 2
+
+Confusingly, Microsoft (and MinGW) do not conform to this standard and provide
+[*at least three digits], for example `1e+001`.
+So if you want the output to match that from
+built-in floating-point types on compilers that use Microsofts runtime then use:
+
+ #define BOOST_MP_MIN_EXPONENT_DIGITS 3
+
+Also useful to get the minimum exponent field width is
+
+ #define BOOST_MP_MIN_EXPONENT_DIGITS 1
+
+producing a compact output like `2e+4`,
+useful when conserving space is important.
+
+Larger values are also supported, for example, value 4 for `2e+0004`
+which may be useful to ensure that columns line up.
+
+[endsect] [/section:input_output Input Output]
+
+
 [endsect]
 
 [section:ref Reference]
@@ -1874,7 +2820,7 @@
 
    enum expression_template_option { et_on = 1, et_off = 0 };
 
- template <class Backend> struct expression_template_default
+ template <class Backend> struct expression_template_default
    { static const expression_template_option value = et_on; };
 
    template <class Backend, expression_template_option ExpressionTemplates = expression_template_default<Backend>::value>
@@ -1924,7 +2870,7 @@
       // Comparison:
       int compare(const number<Backend>& o)const;
       template <class V>
- typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
+ typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
          compare(const V& o)const;
       // Access to the underlying implementation:
       Backend& backend();
@@ -2076,7 +3022,7 @@
 
 This enumerated type is used to specify whether expression templates are turned on (et_on) or turned off (et_off).
 
- template <class Backend> struct expression_template_default
+ template <class Backend> struct expression_template_default
    { static const expression_template_option value = et_on; };
 
 This traits class specifies the default expression template option to be used with a particular Backend type.
@@ -2211,7 +3157,7 @@
 
       int compare(const number<Backend, ExpressionTemplates>& o)const;
       template <class V>
- typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
+ typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
          compare(const V& other)const;
 
 Returns:
@@ -2263,7 +3209,7 @@
 * Type `number<Backend, et_off>` when `ExpressionTemplates` is `false`.
 * Type `bool` if the operator is a comparison operator.
 
-Finally note that the second argument to the left and right shift operations must be a builtin integer type,
+Finally note that the second argument to the left and right shift operations must be a builtin integer type,
 and that the argument must be positive (negative arguments result in a `std::runtime_error` being thrown).
 
 [h4 swap]
@@ -2299,7 +3245,7 @@
    ResultType& multiply(ResultType& result, const Source1& a, const Source2& b);
 
 These functions apply the named operator to the arguments ['a] and ['b] and store the
-result in ['result], returning ['result]. In all cases they behave "as if"
+result in ['result], returning ['result]. In all cases they behave "as if"
 arguments ['a] and ['b] were first promoted to type `ResultType` before applying the
 operator, though particular backends may well avoid that step by way of an optimization.
 
@@ -2347,7 +3293,7 @@
 
 These functions are normally implemented by the Backend type. However, default versions are provided for Backend types that
 don't have native support for these functions. Please note however, that this default support requires the precision of the type
-to be a compile time constant - this means for example that the [gmp] MPF Backend will not work with these functions when that type is
+to be a compile time constant - this means for example that the [gmp] MPF Backend will not work with these functions when that type is
 used at variable precision.
 
 Also note that with the exception of `abs` that these functions can only be used with floating-point Backend types (if any other types
@@ -2414,7 +3360,7 @@
 In addition to functioning with types from this library, these functions are also overloaded for built in integer
 types if you include `<boost/multiprecision/integer.hpp>`. Further, when used with fixed precision types (whether
 built in integers or multiprecision ones), the functions will promote to a wider type internally when the algorithm
-requires it. Versions overloaded for built in integer types return that integer type rather than an expression
+requires it. Versions overloaded for built in integer types return that integer type rather than an expression
 template.
 
    ``['unmentionable-expression-template-type]`` gcd(const ``['number-or-expression-template-type]``& a, const ``['number-or-expression-template-type]``& b);
@@ -2427,7 +3373,7 @@
 
    ``['unmentionable-expression-template-type]`` pow(const ``['number-or-expression-template-type]``& b, unsigned p);
 
-Returns ['b[super p]] as an expression template. Note that this function should be used with extreme care as the result can grow so
+Returns ['b[super p]] as an expression template. Note that this function should be used with extreme care as the result can grow so
 large as to take "effectively forever" to compute, or else simply run the host machine out of memory. This is the one function in
 this category that is not overloaded for built in integer types, further, it's probably not a good idea to use it with
 fixed precision `cpp_int`'s either.
@@ -2549,10 +3495,10 @@
    enum cpp_integer_type { signed_magnitude, unsigned_magnitude };
    enum cpp_int_check_type { checked, unchecked };
 
- template <unsigned MinDigits = 0,
- unsigned MaxDits = 0,
- cpp_integer_type SignType = signed_magnitude,
- cpp_int_check_type Checked = unchecked,
+ template <unsigned MinDigits = 0,
+ unsigned MaxDits = 0,
+ cpp_integer_type SignType = signed_magnitude,
+ cpp_int_check_type Checked = unchecked,
              class Allocator = std::allocator<limb_type> >
    class cpp_int_backend;
    //
@@ -2597,8 +3543,8 @@
 
    }} // namespaces
 
-Class template `cpp_int_backend` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `cpp_int_backend` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The template arguments are:
@@ -2614,7 +3560,7 @@
            type `void`. Note that this parameter should not be used simply to prevent large memory
            allocations, not only is that role better performed by the allocator, but fixed precision
            integers have a tendency to allocate all of MaxBits of storage more often than one would expect.]]
-[[SignType][Determines whether the resulting type is signed or not. Note that for
+[[SignType][Determines whether the resulting type is signed or not. Note that for
 [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision] types
           this parameter must be `signed_magnitude`. For fixed precision
           types then this type may be either `signed_magnitude` or `unsigned_magnitude`.]]
@@ -2638,8 +3584,8 @@
 
    }} // namespaces
 
-Class template `gmp_int` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `gmp_int` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_integer>`.
@@ -2658,8 +3604,8 @@
 
    }} // namespaces
 
-Class template `tommath_int` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `tommath_int` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_integer>`.
@@ -2683,8 +3629,8 @@
 
    }} // namespaces
 
-Class template `gmp_float` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `gmp_float` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The class takes a single template parameter - `Digits10` - which is the number of decimal digits precision the type
@@ -2714,8 +3660,8 @@
 
    }} // namespaces
 
-Class template `mpfr_float_backend` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `mpfr_float_backend` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The class takes a single template parameter - `Digits10` - which is the number of decimal digits precision the type
@@ -2730,6 +3676,98 @@
 
 [endsect]
 
+[section:cpp_bin_float_ref cpp_bin_float]
+
+ namespace boost{ namespace multiprecision{
+
+ enum digit_base_type
+ {
+ digit_base_2 = 2,
+ digit_base_10 = 10
+ };
+
+ template <unsigned Digits, digit_base_type base = digit_base_10, class Allocator = void, class Exponent = int, ExponentMin = 0, ExponentMax = 0>
+ class cpp_bin_float;
+
+ typedef number<cpp_bin_float<50> > cpp_bin_float_50;
+ typedef number<cpp_bin_float<100> > cpp_bin_float_100;
+
+ typedef number<backends::cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127>, et_off> cpp_bin_float_single;
+ typedef number<backends::cpp_bin_float<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023>, et_off> cpp_bin_float_double;
+ typedef number<backends::cpp_bin_float<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_double_extended;
+ typedef number<backends::cpp_bin_float<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383>, et_off> cpp_bin_float_quad;
+
+ }} // namespaces
+
+Class template `cpp_bin_float` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+to change.
+
+The class takes six template parameters:
+
+[variablelist
+[[Digits][The number of digits precision the type
+should support. This is normally expresed as base-10 digits, but that can be changed via the second template parameter.]]
+[[base][An enumerated value (either `digit_base_10` or `digit_base_2`) that indicates whether `Digits` is base-10 or base-2]]
+[[Allocator][The allocator used: defaults to type `void`, meaning all storage is within the class, and no dynamic
+allocation is performed, but can be set to a standard library allocator if dynamic allocation makes more sense.]]
+[[Exponent][A signed integer type to use as the type of the exponent - defaults to `int`.]]
+[[ExponentMin][The smallest (most negative) permitted exponent, defaults to zero, meaning "define as small as possible
+given the limitations of the type and our internal requirements".]]
+[[ExponentMax][The largest (most positive) permitted exponent, defaults to zero, meaning "define as large as possible
+given the limitations of the type and our internal requirements".]]
+]
+
+The type of `number_category<cpp_bin_float<Args...> >::type` is `mpl::int_<number_kind_floating_point>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.floats.cpp_bin_float tutorial].
+
+[h4 Implementation Notes]
+
+Internally, an N-bit `cpp_bin_float` is represented as an N-bit unsigned integer along with an exponent and a sign.
+The integer part is normalized so that it's most significant bit is always 1. The decimal point is assumed to be
+directly after the most significant bit of the integer part. The special values zero, infinity and NaN all have
+the integer part set to zero, and the exponent to one of 3 special values above the maximum permitted exponent.
+
+Multiplication is trivial: multiply the two N-bit integer mantissa's to obtain a 2N-bit number, then round and
+adjust the sign and exponent.
+
+Addition and subtraction proceed similarly - if the exponents are such that there is overlap between the two
+values, then left shift the larger value to produce a number with between N and 2N bits, then perform integer
+addition or subtraction, round, and adjust the exponent.
+
+Division proceeds as follows: first scale the numerator by some power of 2 so that integer division will
+produce either an N-bit or N+1 bit result plus a remainder. If we get an N bit result then the size of
+twice the remainder compared to the denominator gives us the rounding direction. Otherwise we have one extra bit
+in the result which we can use to determine rounding (in this case ties occur only if the remainder is zero and
+the extra bit is a 1).
+
+Square root uses integer square root in a manner analogous to division.
+
+Decimal string to binary conversion proceeds as follows: first parse the digits to
+produce an integer multiplied by a decimal exponent. Note that we stop parsing digits
+once we have parsed as many as can possibly effect the result - this stops the integer
+part growing too large when there are a very large number of input digits provided.
+At this stage if the decimal exponent is positive then the result is an integer and we
+can in principle simply multiply by 10^N to get an exact integer result. In practice
+however, that could produce some very large integers. We also need to be able to divide
+by 10^N in the event that the exponent is negative. Therefore calculation of the 10^N
+values plus the multiplication or division are performed using limited precision
+integer arithmetic, plus an exponent, and a track of the accumulated error. At the end of
+the calculation we will either be able to round unambiguously, or the error will be such
+that we can't tell which way to round. In the latter case we simply up the precision and try
+again until we have an unambiguously rounded result.
+
+Binary to decimal conversion proceeds very similarly to the above, our aim is to calculate
+`mantissa * 2^shift * 10^E` where `E` is the decimal exponent and `shift` is calculated
+so that the result is an N bit integer assuming we want N digits printed in the result.
+As before we use limitted precision arithmetic to calculate the result and up the
+precision as necessary until the result is unambiguously correctly rounded. In addition
+our initial calculation of the decimal exponent may be out by 1, so we have to correct
+that and loop as well in the that case.
+
+[endsect]
+
 [section:cpp_dec_ref cpp_dec_float]
 
    namespace boost{ namespace multiprecision{
@@ -2742,8 +3780,8 @@
 
    }} // namespaces
 
-Class template `cpp_dec_float` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
-Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
+Class template `cpp_dec_float` fulfils all of the requirements for a [link boost_multiprecision.ref.backendconc Backend] type.
+Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject
 to change.
 
 The class takes three template parameters:
@@ -2757,7 +3795,7 @@
 allocation is performed, but can be set to a standard library allocator if dynamic allocation makes more sense.]]
 ]
 
-The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_floating_point>`.
+The type of `number_category<cpp_dec_float<Args...> >::type` is `mpl::int_<number_kind_floating_point>`.
 
 More information on this type can be found in the [link boost_multiprecision.tut.floats.cpp_dec_float tutorial].
 
@@ -2827,10 +3865,10 @@
 
 In the following tables, type B is the `Backend` template argument to `number`, `b` and `b2` are
 a variables of type B, `cb`, `cb2` and `cb3` are constant variables of type `const B`,
-`rb` is a variable of type `B&&`, `a` and `a2` are variables of Arithmetic type,
+`rb` is a variable of type `B&&`, `a` and `a2` are variables of Arithmetic type,
 `s` is a variable of type `const char*`, `ui` is a variable of type `unsigned`, `bb` is a variable of type `bool`,
 `pa` is a variable of type pointer-to-arithmetic-type, `exp` is a variable of type `B::exp_type`,
-`pexp` is a variable of type `B::exp_type*`, `i` is a variable of type `int`, `pi` pointer to a variable of type `int`,
+`pexp` is a variable of type `B::exp_type*`, `i` is a variable of type `int`, `pi` pointer to a variable of type `int`,
 B2 is another type that meets these requirements, b2 is a variable of type B2, `ss` is variable of type `std::streamsize`
 and `ff` is a variable of type `std::ios_base::fmtflags`.
 
@@ -2901,10 +3939,10 @@
 [[`B(b2)`][`B`][Copy constructor from a different back-end type. When not provided, a generic interconversion routine is used.
           This constructor may be `explicit` if the corresponding frontend constructor should also be `explicit`.][[space]]]
 [[`b = b2`][`b&`][Assignment operator from a different back-end type. When not provided, a generic interconversion routine is used.][[space]]]
-[[`assign_components(b, a, a)`][`void`][Assigns to `b` the two components in the following arguments.
+[[`assign_components(b, a, a)`][`void`][Assigns to `b` the two components in the following arguments.
                            Only applies to rational and complex number types.
                            When not provided, arithmetic operations are used to synthesise the result from the two values.][[space]]]
-[[`assign_components(b, b2, b2)`][`void`][Assigns to `b` the two components in the following arguments.
+[[`assign_components(b, b2, b2)`][`void`][Assigns to `b` the two components in the following arguments.
                            Only applies to rational and complex number types.
                            When not provided, arithmetic operations are used to synthesise the result from the two values.][[space]]]
 
@@ -2939,12 +3977,12 @@
             The type of `a` shall be listed in one of the type lists
             `B::signed_types`, `B::unsigned_types` or `B::float_types`.
             When not provided, the default implementation returns `eval_lt(cb, a)`.][[space]]]
-[[`eval_is_zero(cb)`][`bool`][Returns `true` if `cb` is zero, otherwise `false`. The default version of this function
- returns `cb.compare(ui_type(0)) == 0`, where `ui_type` is `ui_type` is
+[[`eval_is_zero(cb)`][`bool`][Returns `true` if `cb` is zero, otherwise `false`. The default version of this function
+ returns `cb.compare(ui_type(0)) == 0`, where `ui_type` is `ui_type` is
             `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
 [[`eval_get_sign(cb)`][`int`][Returns a value < zero if `cb` is negative, a value > zero if `cb` is positive, and zero if `cb` is zero.
- The default version of this function
- returns `cb.compare(ui_type(0))`, where `ui_type` is `ui_type` is
+ The default version of this function
+ returns `cb.compare(ui_type(0))`, where `ui_type` is `ui_type` is
             `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
 
 [[['Basic arithmetic:]]]
@@ -3201,7 +4239,7 @@
 whenever the result of an operation would be infinite, and `std::underflow_error` whenever it would round to zero.
 
 [note
-The non-member functions are all named with an "eval_" prefix to avoid conflicts with template classes of the same name -
+The non-member functions are all named with an "eval_" prefix to avoid conflicts with template classes of the same name -
 in point of fact this naming convention shouldn't be necessary, but rather works around some compiler bugs.]
 
 [endsect]
@@ -3222,7 +4260,7 @@
 [[concepts/number_archetypes.hpp][Defines a backend concept archetypes for testing use.]]
 ]
 
-[table Implementation Headers]
+[table Implementation Headers
 [[Header][Contains]]
 [[cpp_int/add.hpp][Add and subtract operators for `cpp_int_backend`.]]
 [[cpp_int/bitwise.hpp][Bitwise operators for `cpp_int_backend`.]]
@@ -3266,7 +4304,7 @@
 As you can see whether or not there is an overhead, and how large it is depends on the actual situation,
 but the overhead is in any cases small. Expression templates generally add a greater overhead the
 more complex the expression becomes due to the logic of figuring out how to best unpack and evaluate
-the expression, but of course this is also the situation where you save more temporaries. For a
+the expression, but of course this is also the situation where you save more temporaries. For a
 "trivial" backend like this, saving temporaries has no benefit, but for larger types it becomes
 a bigger win.
 
@@ -3288,7 +4326,7 @@
 
 [endsect]
 
-[section:realworld Floating Point Real World Tests]
+[section:realworld Floating-Point Real World Tests]
 
 These tests test the total time taken to execute all of Boost.Math's test cases for these functions.
 In each case the best performing library gets a relative score of 1, with the total execution time
@@ -3346,7 +4384,7 @@
 
 Note how for this use case, any dynamic allocation is a performance killer.
 
-The next [@../../performance/miller_rabin_performance.cpp tests] measure the time taken to generate 1000 128-bit
+The next [@../../performance/miller_rabin_performance.cpp tests] measure the time taken to generate 1000 128-bit
 random numbers and test for primality using the Miller Rabin test. This is primarily a test of modular-exponentiation
 since that is the rate limiting step:
 
@@ -3879,6 +4917,10 @@
 
 [section:hist History]
 
+[h4 1.56]
+
+* Added list of values for numeric_limits.
+
 [h4 1.55]
 
 * Added support for Boost.Serialization.
@@ -3939,9 +4981,9 @@
 *2011-2012, John Maddock adds an expression template enabled front end to Christopher's code,
 and adds support for other backends.
 * 2011, Christopher Kormanyos publishes the decimal floating point code under the Boost
-Software Licence. The code is published as: [@http://doi.acm.org/10.1145/1916461.1916469
-"Algorithm 910: A Portable C++ Multiple-Precision
-System for Special-Function Calculations"], in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM,
+Software Licence. The code is published as: [@http://doi.acm.org/10.1145/1916461.1916469
+"Algorithm 910: A Portable C++ Multiple-Precision
+System for Special-Function Calculations"], in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM,
 2011.
 * 2002-2011, Christopher Kormanyos develops the all C++ decimal arithmetic floating point
 code.
@@ -3960,7 +5002,7 @@
 * Add better multiplication routines (Karatsuba, FFT etc) to cpp_int_backend.
 * Add assembly level routines to cpp_int_backend.
 * Add an all C++ Boost licensed binary floating point type.
-* Can ring types (exact floating point types) be supported? The answer should be yes, but someone needs to write it,
+* Can ring types (exact floating point types) be supported? The answer should be yes, but someone needs to write it,
 the hard part is IO and binary-decimal conversion.
 * Should there be a choice of rounding mode (probably MPFR specific)?
 * We can reuse temporaries in multiple subtrees (temporary caching).
@@ -3969,8 +5011,8 @@
 
 Things requested in review:
 
-* The performances of mp_number<a_trivial_adaptor<float>, false>respect to
-float and mp_number<a_trivial_adaptor<int>, false> and int should be
+* The performances of mp_number<a_trivial_adaptor<float>, false>respect to
+float and mp_number<a_trivial_adaptor<int>, false> and int should be
 given to show the cost of using the generic interface (Mostly done, just need to update docs to the latest results).
 * Should we provide min/max overloads for expression templates? (Not done - we can't overload functions declared in the std namespace :-( ).
 * The rounding applied when converting must be documented (Done).
@@ -3979,7 +5021,7 @@
 * We can reuse temporaries in multiple subtrees (temporary caching) Moved to TODO list.
 * Emphasise in the docs that ET's may reorder operations (done 2012/10/31).
 * Document what happens to small fixed precision cpp_int's (done 2012/10/31).
-* The use of bool in template parameters could be improved by the use of
+* The use of bool in template parameters could be improved by the use of
 an enum class which will be more explicit. E.g `enum class expression_template {disabled, enabled};
 enum class sign {unsigned, signed};` (Partly done 2012/09/15, done 2012/10/31).
 * Each back-end should document the requirements it satisfies (not currently scheduled for inclusion: it's
@@ -3987,23 +5029,23 @@
 by the user). Not done: this is an implementation detail, the exact list of requirements satisfied is purely
 an optimization, not something the user can detect.
 * A backend for an overflow aware integers (done 2012/10/31).
-* IIUC convert_to is used to emulate in c++98 compilers C++11 explicit
-conversions. Could the explicit conversion operator be added on
+* IIUC convert_to is used to emulate in c++98 compilers C++11 explicit
+conversions. Could the explicit conversion operator be added on
 compilers supporting it? (Done 2012/09/15).
-* The front-end should make the differences between implicit and explicit
+* The front-end should make the differences between implicit and explicit
 construction (Done 2012/09/15).
-* The tutorial should add more examples concerning implicit or explicit
+* The tutorial should add more examples concerning implicit or explicit
 conversions. (Done 2012/09/15).
-* The documentation must explain how move semantics helps in this domain
+* The documentation must explain how move semantics helps in this domain
 and what the backend needs to do to profit from this optimization. (Done 2012/09/15).
-* The documentation should contain Throws specification on the mp_number
+* The documentation should contain Throws specification on the mp_number
 and backend requirements operations. (Done 2012/09/15).
-* The library interface should use the noexcept (BOOST_NOEXCEPT, ...)
+* The library interface should use the noexcept (BOOST_NOEXCEPT, ...)
 facilities (Done 2012/09/15).
-* It is unfortunate that the generic mp_number front end can not make use
+* It is unfortunate that the generic mp_number front end can not make use
 constexpr as not all the backends can ensure this (done - we can go quite a way).
-* literals: The library doesn't provide some kind of literals. I think that the
-mp_number class should provide a way to create literals if the backend
+* literals: The library doesn't provide some kind of literals. I think that the
+mp_number class should provide a way to create literals if the backend
 is able to. (Done 2012/09/15).
 * The ExpresionTemplate parameter could be defaulted to a traits class for more sensible defaults (done 2012/09/20).
 * In a = exp1 op exp2 where a occurs inside one of exp1 or exp2 then we can optimise and eliminate one more temporary (done 2012/09/20).
@@ -4012,7 +5054,7 @@
 
 [h4 Pre-Review Comments]
 
-* Make fixed precision orthogonal to Allocator type in cpp_int. Possible solution - add an additional MaxBits
+* Make fixed precision orthogonal to Allocator type in cpp_int. Possible solution - add an additional MaxBits
 template argument that defaults to 0 (meaning keep going till no more space/memory). Done.
 * Can ring types (exact floating point types) be supported? The answer should be yes, but someone needs to write it (Moved to TODO list).
 * Should there be a choice of rounding mode (probably MPFR specific)? Moved to TODO list.
@@ -4056,7 +5098,7 @@
    [Bitwise operations on negative values (or indeed any signed integer type) are unspecified by the standard. As a result
    any attempt to carry out a bitwise operation on a negative checked-integer will result in a `std::range_error` being thrown.]]
 [[Why do I get compiler errors when trying to use the complement operator?]
- [Use of the complement operator on signed types is problematic as the result is unspecified by the standard, and is further
+ [Use of the complement operator on signed types is problematic as the result is unspecified by the standard, and is further
    complicated by the fact that most extended precision integer types use a sign-magnitude representation rather than the 2's
    complement one favored by most native integer types. As a result the complement operator is deliberately disabled for
    checked `cpp_int`'s. Unchecked `cpp_int`'s give the same valued result as a 2's complement type would, but not the same bit-pattern.]]
@@ -4081,8 +5123,8 @@
 * Christopher Kormanyos' C++ decimal number code.
 * Paul Bristow for patiently testing, and commenting on the library.
 * All the folks at GMP, MPFR and libtommath, for providing the "guts" that makes this library work.
-* [@http://www-cs-faculty.stanford.edu/~uno/taocp.html "The Art Of Computer Programming"],
-Donald E. Knuth, Volume 2: Seminumerical Algorithms, Third Edition
+* [@http://www-cs-faculty.stanford.edu/~uno/taocp.html "The Art Of Computer Programming"],
+Donald E. Knuth, Volume 2: Seminumerical Algorithms, Third Edition
 (Reading, Massachusetts: Addison-Wesley, 1997), xiv+762pp. ISBN 0-201-89684-2
 
 [endsect]
@@ -4091,6 +5133,7 @@
 
 [section:indexes Indexes]
 
+[/temp for sandbox version]
 [include ../../../tools/auto_index/include/auto_index_helpers.qbk]
 [named_index function_name Function Index]
 [named_index class_name Class Index]
@@ -4100,3 +5143,5 @@
 [endsect]
 
 
+
+

Added: trunk/libs/multiprecision/doc/numeric_limits_32_tables.qbk
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/numeric_limits_32_tables.qbk 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,94 @@
+[/
+Copyright 2013 Paul A. Bristow.
+Copyright 2013 John Maddock.
+Distributed under 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).
+]
+
+[section:limits32 Numeric limits for 32-bit platform]
+These tables were generated using the following program and options:
+
+[pre
+
+Program:
+ numeric_limits_qbk.cpp
+Mon Nov 4 18:09:06 2013
+BuildInfo:
+ Platform Win32
+ Compiler Microsoft Visual C++ version 10.0
+ MSVC version 160040219.
+ STL Dinkumware standard library version 520
+ Boost version 1.55.0
+]
+
+[table:integral_constants Integer types constants (`std::numeric_limits<T>::is_integer == true` && is_exact == true)
+[[type][signed][bound][modulo][round][radix][digits][digits10]]
+[[bool][unsigned][bound][no][to zero][2][1][0]]
+[[char][signed][bound][modulo][to zero][2][7][2]]
+[[unsigned char][unsigned][bound][modulo][to zero][2][8][2]]
+[[char16_t][unsigned][bound][modulo][to zero][2][16][4]]
+[[char32_t][unsigned][bound][modulo][to zero][2][32][9]]
+[[short][signed][bound][modulo][to zero][2][15][4]]
+[[unsigned short][unsigned][bound][modulo][to zero][2][16][4]]
+[[int][signed][bound][modulo][to zero][2][31][9]]
+[[unsigned][unsigned][bound][modulo][to zero][2][32][9]]
+[[long][signed][bound][modulo][to zero][2][31][9]]
+[[unsigned long][unsigned][bound][modulo][to zero][2][32][9]]
+[[long long][signed][bound][modulo][to zero][2][63][18]]
+[[unsigned long long][unsigned][bound][modulo][to zero][2][64][19]]
+[[int32_t][signed][bound][modulo][to zero][2][31][9]]
+[[uint32_t][unsigned][bound][modulo][to zero][2][32][9]]
+[[int64_t][signed][bound][modulo][to zero][2][63][18]]
+[[uint64_t][unsigned][bound][modulo][to zero][2][64][19]]
+[[int128_t][signed][bound][modulo][to zero][2][128][38]]
+[[uint128_t][unsigned][bound][modulo][to zero][2][128][38]]
+[[int256_t][signed][bound][modulo][to zero][2][256][77]]
+[[uint256_t][unsigned][bound][modulo][to zero][2][256][77]]
+[[cpp_int][signed][unbounded][no][to zero][2][2147483647][646392383]]
+]
+
+[table:integral_functions Integer types functions (`std::numeric_limits<T>::is_integer == true && std::numeric_limits<T>::min() == std::numeric_limits<T>::lowest()` )
+[[function][max][min]]
+[[bool][1][0]]
+[[char][127][-128]]
+[[unsigned char][255][0]]
+[[char16_t][65535][0]]
+[[char32_t][4294967295][0]]
+[[short][32767][-32768]]
+[[unsigned short][65535][0]]
+[[int][2147483647][-2147483648]]
+[[unsigned int][4294967295][0]]
+[[long][2147483647][-2147483648]]
+[[unsigned long][4294967295][0]]
+[[long long][9223372036854775807][-9223372036854775808]]
+[[unsigned long long][18446744073709551615][0]]
+[[int32_t][2147483647][-2147483648]]
+[[int64_t][9223372036854775807][-9223372036854775808]]
+[[int128_t][340282366920938463463374607431768211455][-340282366920938463463374607431768211455]]]
+[table:float_functions Floating-point types constants (`std::numeric_limits<T>::is_integer==false && is_signed==true && is_modulo==false && is_exact==false && is_bound==true`)
+[[type][round][radix][digits][digits10][max_digits10][min_exp][min_exp10][max_exp][max_exp10][tiny][trap]]
+[[float][to nearest][2][24][6][8][-125][-37][128][38][tiny][traps]]
+
+[[double][to nearest][2][53][15][17][-1021][-307][1024][308][tiny][traps]]
+
+[[long double][to nearest][2][53][15][17][-1021][-307][1024][308][tiny][traps]]
+
+[[cpp_dec_float_50][indeterminate][10][50][50][80][-222953000][-67108864][222953000][67108864][no][no]]
+
+[[bin_128bit_double_type][to nearest][2][377][113][115][-2147482894][-646392082][2147482893][646392082][no][traps]]
+]
+[table:float_functions Floating-point types functions (`std::numeric_limits<T>::is_integer == false`)
+[[function][float][double][long double][cpp_dec_50][cpp_bin_128]][[max][3.40282e+038][1.79769e+308][1.79769e+308][1e+67108865][1.85906e+646456766]]
+[[min][1.17549e-038][2.22507e-308][2.22507e-308][1e-67108864][5.37906e-646456767]]
+[[epsilon][1.19209e-007][2.22045e-016][2.22045e-016][1e-49][6.49713e-114]]
+[[round_error][0.5][0.5][0.5][0.5][0.5]]
+[[infinity][1.#INF][1.#INF][1.#INF][inf][inf]]
+[[quiet_NaN][1.#QNAN][1.#QNAN][1.#QNAN][nan][nan]]
+[[signaling_NaN][1.#QNAN][1.#QNAN][1.#QNAN][0][0]]
+[[denorm_min][1.4013e-045][4.94066e-324][4.94066e-324][0][0]]
+]
+
+
+[endsect] [/section:limits32 Numeric limits for 32-bit platform]
+

Added: trunk/libs/multiprecision/doc/numeric_limits_qbk.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/doc/numeric_limits_qbk.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,719 @@
+// Copyright Paul A. Bristow 2013
+
+// 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)
+
+// Program to list all numeric_limits items for any type to a file in Quickbook format.
+
+// C standard http://www.open-std.org/jtc1/sc22/wg11/docs/n507.pdf
+// SC22/WG11 N507 DRAFT INTERNATIONAL ISO/IEC STANDARD WD 10967-1
+// Information technology Language independent arithmetic Part 1: Integer and Floating point arithmetic
+
+/* E.3 C++
+The programming language C++ is defined by ISO/IEC 14882:1998, Programming languages C++ [18].
+An implementation should follow all the requirements of LIA-1 unless otherwise specified by
+this language binding.
+*/
+
+// http://754r.ucbtest.org/standards/754.pdf
+
+// http://www.cesura17.net/~will/Professional/Research/Papers/retrospective.pdf
+
+// http://www.exploringbinary.com/using-integers-to-check-a-floating-point-approximation/
+
+// http://stackoverflow.com/questions/12466745/how-to-convert-float-to-doubleboth-stored-in-ieee-754-representation-without-loss
+
+
+#ifdef _MSC_VER
+# pragma warning (disable : 4127) // conditional expression is constant.
+# pragma warning (disable : 4100) // unreferenced formal parameter.
+#endif
+
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <limits> // numeric_limits
+
+#include <typeinfo>
+
+#include <boost/version.hpp>
+#include <boost/config.hpp>
+
+// May need extra includes for other types, for example:
+#include <boost/multiprecision/cpp_dec_float.hpp> // is decimal.
+#include <boost/multiprecision/cpp_bin_float.hpp> // is binary.
+
+
+// Assume that this will be run on MSVC to get the 32 or 64 bit info.
+#ifdef _WIN32
+ std::string bits32_64 = "32";
+std::string filename = "numeric_limits_32_tables.qbk";
+#else
+ std::string bits32_64 = "64";
+std::string filename = "numeric_limits_64_tables.qbk";
+#endif
+
+#ifdef INT32_T_MAX
+ int i = INT256_T_MAX;
+#endif
+
+std::array<std::string, 16> integer_type_names =
+{
+"bool",
+"char",
+"unsigned char",
+"char16_t",
+"char32_t",
+"short",
+"unsigned short",
+"int",
+"unsigned int",
+"long",
+"unsigned long",
+"long long",
+"unsigned long long",
+"int32_t",
+//"uint32_t",
+"int64_t",
+//"uint64_t",
+"int128_t",
+//"uint128_t" // Too big?
+//"int256_t",
+//"uint256_t"
+//"int512_t"
+};
+
+std::array<std::string, 6> float_type_names =
+{
+ "function", "float", "double", "long double", "cpp_dec_50", "cpp_bin_128"
+};
+
+// Table headings for integer constants.
+std::array<std::string, 8> integer_constant_heads =
+{
+ "type", "signed", "bound", "modulo", "round", "radix", "digits", "digits10", // "max_digits10"
+};
+
+// Table headings for integer functions.
+std::array<std::string, 2> integer_function_heads =
+{
+ "max", // "lowest", assumes is same for all integer types, so not worth listing.
+ "min"
+};
+
+// Table headings for float constants.
+std::array<std::string, 12> float_constant_heads =
+{
+ "type", // "signed", "exact", "bound", // "modulo",
+ "round", "radix", "digits", "digits10", "max_digits10", "min_exp", "min_exp10", "max_exp", "max_exp10", "tiny", "trap"
+};
+
+// Table headings for float functions.
+std::array<std::string, 10> float_function_heads =
+{
+ "function", "max", "lowest", "min", "eps", "round", "infinity", "NaN", "sig_NaN", "denorm_min"
+};
+
+std::string versions()
+{ // Build a string of info about Boost, platform, STL, etc.
+ std::stringstream mess;
+ //mess << "\n" << "Program:\n\" " __FILE__ << "\"\n"; // \n is mis-interpreted!
+ mess << "\n" << "Program:\n numeric_limits_qbk.cpp \n";
+#ifdef __TIMESTAMP__
+ mess << __TIMESTAMP__;
+#endif
+ mess << "\nBuildInfo:\n" " Platform " << BOOST_PLATFORM;
+ mess << "\n Compiler " BOOST_COMPILER;
+#ifdef _MSC_FULL_VER
+ mess << "\n MSVC version "<< BOOST_STRINGIZE(_MSC_FULL_VER) << ".";
+#endif
+ mess << "\n STL " BOOST_STDLIB;
+ mess << "\n Boost version " << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000 << "." << BOOST_VERSION % 100 << std::endl;
+ return mess.str();
+} // std::string versions()
+
+template <typename T>
+void out_round_style(std::ostream& os)
+{ //! Send short string describing STD::round_style to stream os.
+ // os << "Round style is ";
+ if (std::numeric_limits<T>::round_style == std::round_indeterminate)
+ {
+ os << "indeterminate" ;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_zero)
+ {
+ os << "to zero" ;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_to_nearest)
+ {
+ os << "to nearest" ;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_infinity)
+ {
+ os << "to infin[]"; // Or << "to \u221E" << "to infinity" ;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_neg_infinity)
+ {
+ os << "to -infin[]" ;
+ }
+ else
+ {
+ os << "undefined!";
+ std::cout << "std::numeric_limits<T>::round_style is undefined value!" << std::endl;
+ }
+ return;
+} // out_round_style(std::ostream& os);
+
+template<typename T>
+void integer_constants(std::string type_name, std::ostream& os)
+{ //! Output a line of table integer constant values to ostream os.
+ os << "\n["
+ "[" << type_name << "]" ;
+ os << "[" << (std::numeric_limits<T>::is_signed ? "signed" : "unsigned") << "]" ;
+ // Is always exact for integer types, so removed:
+ // os << "[" << (std::numeric_limits<T>::is_exact ? "exact" : "inexact") << "]" ;
+ os << "[" << (std::numeric_limits<T>::is_bounded ? "bound" : "unbounded") << "]" ;
+ os << "[" << (std::numeric_limits<T>::is_modulo ? "modulo" : "no") << "]" ;
+ os << "[" ; out_round_style<T>(os); os << "]" ;
+ os << "[" << std::numeric_limits<T>::radix << "]" ;
+ os << "[" << std::numeric_limits<T>::digits << "]" ;
+ os << "[" << std::numeric_limits<T>::digits10 << "]" ;
+ // Undefined for integers, so removed:
+ // os << "[" << std::numeric_limits<T>::max_digits10 << "]"
+ os << "]";
+} // void integer_constants
+
+
+template<typename T>
+void float_constants(std::string type_name, std::ostream& os)
+{ //! Output a row of table values to `ostream` os.
+ os << "\n["
+ "[" << type_name << "]" ;
+ //os << "[" << (std::numeric_limits<T>::is_signed ? "signed" : "unsigned") << "]" ;
+ //os << "[" << (std::numeric_limits<T>::is_exact ? "exact" : "inexact") << "]" ;
+ //os << "[" << (std::numeric_limits<T>::is_bounded ? "bound" : "no") << "]" ;
+ // os << "[" << (std::numeric_limits<T>::is_modulo ? "modulo" : "no") << "]" ;
+ os << "[" ; out_round_style<T>(os); os << "]" ;
+ os << "[" << std::numeric_limits<T>::radix << "]" ;
+ os << "[" << std::numeric_limits<T>::digits << "]" ;
+ os << "[" << std::numeric_limits<T>::digits10 << "]" ;
+ os << "[" << std::numeric_limits<T>::max_digits10 << "]";
+ os << "[" << std::numeric_limits<T>::min_exponent << "]" ;
+ os << "[" << std::numeric_limits<T>::min_exponent10 << "]" ;
+ os << "[" << std::numeric_limits<T>::max_exponent << "]" ;
+ os << "[" << std::numeric_limits<T>::max_exponent10 << "]" ;
+ os << "[" << (std::numeric_limits<T>::tinyness_before ? "tiny" : "no") << "]" ;
+ os << "[" << (std::numeric_limits<T>::traps ? "traps" : "no") << "]" ;
+ os << "]" "\n"; // end of row.
+} // void float_constants
+
+/* Types across and two functions down.
+
+template<typename T>
+void integer_functions(std::string type_name, std::ostream& os)
+{ //! Output a line of table integer function values to `ostream` os.
+ os << "\n["
+ "[" << type_name << "]" ;
+ os << "[" << std::numeric_limits<T>::max() << "]" ;
+ //os << "[" << std::numeric_limits<T>::lowest() << "]" ; always == min for integer types,
+ // so removed to save space.
+ os << "[" << std::numeric_limits<T>::min() << "]"
+ "]";
+} // void integer_functions
+
+*/
+
+// Types down and two (or three) functions across.
+template<typename T>
+void integer_functions(std::string type_name, std::ostream& os)
+{ //! Output a line of table integer function values to `ostream` os.
+ os << "\n[" // start of row.
+ "[" << type_name << "]" ;
+ os << "[" << std::numeric_limits<T>::max() << "]" ;
+ // os << "[" << std::numeric_limits<T>::lowest() << "]" ;
+ os << "[" << std::numeric_limits<T>::min() << "]" ;
+ os << "]"; // end of row.
+} // void integer_functions
+
+
+template<typename T>
+void float_functions(std::string type_name, std::ostream& os)
+{ //! Output a line of table float-point function values to `ostream` os.
+ os << "\n[" // start of row.
+ "[" << type_name << "]" ;
+ os << "[" << std::numeric_limits<T>::max() << "]" ;
+ os << "[" << std::numeric_limits<T>::lowest() << "]" ;
+ os << "[" << std::numeric_limits<T>::min() << "]"
+ os << "[" << std::numeric_limits<T>::epsilon() << "]"
+ os << "[" << std::numeric_limits<T>::round_error() << "]"
+ os << "[" << std::numeric_limits<T>::infinity() << "]"
+ os << "[" << std::numeric_limits<T>::quiet_NaN() << "]"
+ os << "[" << std::numeric_limits<T>::signaling_NaN() << "]"
+ os << "[" << std::numeric_limits<T>::denorm_min() << "]"
+ "]"; // end of row.
+} // void float_functions
+
+template<typename T>
+int numeric_limits_list(std::string description)
+{//! Output numeric_limits for numeric_limits<T>, for example `numeric_limits_list<bool>()`.
+ // This is not used for Quickbook format.
+ // std::cout << versions() << std::endl;
+
+ std::cout << "\n" << description << "\n" << std::endl; // int, int64_t rather than full long typeid(T).name().
+
+ std::cout << "Type " << typeid(T).name() << " std::numeric_limits::<" << typeid(T).name() << ">\n" << std::endl;
+ // ull long typeid(T).name()
+
+ if (std::numeric_limits<T>::is_specialized == false)
+ {
+ std::cout << "type " << typeid(T).name() << " is not specialized for std::numeric_limits!" << std::endl;
+ //return -1;
+ }
+
+ // Member constants.
+
+ std::cout << (std::numeric_limits<T>::is_signed ? "is signed." : "unsigned.") << std::endl;
+ std::cout << (std::numeric_limits<T>::is_integer ? "is integer." : "not integer (fixed or float-point).") << std::endl;
+ std::cout << (std::numeric_limits<T>::is_exact ? "is exact." : "not exact.") << std::endl;
+ std::cout << (std::numeric_limits<T>::has_infinity ? "has infinity." : "no infinity.") << std::endl;
+ std::cout << (std::numeric_limits<T>::has_quiet_NaN ? "has quiet NaN." : "no quiet NaN.") << std::endl;
+ std::cout << (std::numeric_limits<T>::has_signaling_NaN ? "has signaling NaN." : "no signaling NaN.") << std::endl;
+ if (!std::numeric_limits<T>::is_integer)
+ { // is floating_point
+ std::cout << "Denorm style is " ;
+ if (std::numeric_limits<T>::has_denorm == std::denorm_absent)
+ {
+ std::cout << "denorm_absent." << std::endl;
+ }
+ else if (std::numeric_limits<T>::has_denorm == std::denorm_present)
+ {
+ std::cout << "denorm_present." << std::endl;
+ }
+ else if (std::numeric_limits<T>::has_denorm == std::denorm_indeterminate)
+ {
+ std::cout << "denorm_indeterminate." << std::endl;
+ }
+ else
+ {
+ std::cout << "std::numeric_limits<T>::has_denorm unexpected value!" << std::endl;
+ }
+
+ std::cout << (std::numeric_limits<T>::has_denorm_loss ? "has denorm loss." : "no denorm loss.") << std::endl;
+ // true if a loss of accuracy is detected as a denormalization loss, rather than an inexact result.
+
+ std::cout << "Round style is ";
+ if (std::numeric_limits<T>::round_style == std::round_indeterminate)
+ {
+ std::cout << "round_indeterminate!" << std::endl;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_zero)
+ {
+ std::cout << "round_toward_zero." << std::endl;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_to_nearest)
+ {
+ std::cout << "round_to_nearest." << std::endl;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_infinity)
+ {
+ std::cout << "round_toward_infinity." << std::endl;
+ }
+ else if (std::numeric_limits<T>::round_style == std::round_toward_neg_infinity)
+ {
+ std::cout << "round_toward_neg_infinity." << std::endl;
+ }
+ else
+ {
+ std::cout << "undefined value!" << std::endl;
+ }
+
+ } // is floating_point
+
+ std::cout << (std::numeric_limits<T>::is_iec559 ? "is IEC599." : "not IEC599.") << std::endl;
+ std::cout << (std::numeric_limits<T>::is_bounded ? "is bound." : "unbounded.") << std::endl;
+ std::cout << (std::numeric_limits<T>::is_modulo ? "is modulo." : "no modulo.") << std::endl;
+ std::cout << std::dec << "radix " << std::numeric_limits<T>::radix << std::endl;
+ std::cout << "digits " << std::numeric_limits<T>::digits << std::endl;
+ std::cout << "digits10 " << std::numeric_limits<T>::digits10 << std::endl;
+
+ std::cout.precision(std::numeric_limits<T>::max_digits10); // Full precision for floating-point values like max, min ...
+
+ std::cout << "max_digits10 " << std::numeric_limits<T>::max_digits10 << std::endl;
+ std::cout << "min_exponent " << std::numeric_limits<T>::min_exponent << std::endl;
+ std::cout << "min_exponent10 " << std::numeric_limits<T>::min_exponent10 << std::endl;
+ std::cout << "max_exponent " << std::numeric_limits<T>::max_exponent << std::endl;
+ std::cout << "max_exponent10 " << std::numeric_limits<T>::max_exponent10 << std::endl;
+
+ std::cout << (std::numeric_limits<T>::tinyness_before ? "Can tiny values before rounding." : "no tinyness_before.") << std::endl;
+ // true if the type can detect tiny values before rounding; false if it cannot.
+ std::cout << (std::numeric_limits<T>::traps ? "traps" : "no trapping.") << std::endl;
+ // Whether trapping that reports on arithmetic exceptions is implemented for a type.
+
+ std::cout << "Member functions." << std::endl;
+ // (assumes operator<< for type T is available).
+ // If floating-point then hex format may not be available.
+
+ std::cout << "max = " << std::numeric_limits<T>::max() << std::endl;
+ //if (std::numeric_limits<T>::is_integer)
+ //{
+ // std::cout << " = " << std::hex << std::numeric_limits<T>::max() << std::endl;
+ //}
+
+ std::cout << "lowest = " << std::dec << std::numeric_limits<T>::lowest() << std::endl;
+ //if (std::numeric_limits<T>::is_integer)
+ //{
+ // std::cout << " = " << std::hex << std::numeric_limits<T>::lowest() << std::endl;
+ //}
+
+ std::cout << "min = " << std::dec << std::numeric_limits<T>::min() << std::endl;
+ //if (std::numeric_limits<T>::is_integer)
+ //{
+ // std::cout << " = " << std::hex << std::numeric_limits<T>::min() << std::endl;
+ //}
+
+ std::cout << "epsilon = " << std::dec << std::numeric_limits<T>::epsilon() << std::endl;
+ //if (std::numeric_limits<T>::is_integer)
+ //{
+ // std::cout << " = " << std::hex << std::numeric_limits<T>::epsilon() << std::endl;
+ //}
+ // round_error is always zero for integer types.
+ // round_error is usually 1/2 = (T)0.5 for floating-point types.
+ // round_error is ? for fixed-point.
+ std::cout << "round_error = " << std::numeric_limits<T>::round_error() << " ULP." << std::endl;
+
+ std::cout << "infinity = " << std::dec << std::numeric_limits<T>::infinity() << std::endl;
+ std::cout << " = " << std::hex << std::numeric_limits<T>::infinity() << std::endl;
+
+ std::cout << "quiet_NaN = " << std::dec << std::numeric_limits<T>::quiet_NaN() << std::endl;
+ std::cout << " = " << std::hex << std::numeric_limits<T>::quiet_NaN() << std::endl;
+
+ std::cout << "signaling_NaN = " << std::dec << std::numeric_limits<T>::signaling_NaN() << std::endl;
+ std::cout << " = " << std::hex << std::numeric_limits<T>::signaling_NaN() << std::endl;
+
+ // Only meaningful if (std::numeric_limits<T>::has_denorm == std::denorm_present)
+ // so might not bother to show if absent?
+ std::cout << "denorm_min = " << std::numeric_limits<T>::denorm_min() << std::endl;
+ std::cout << " = " << std::numeric_limits<T>::denorm_min() << std::endl;
+ return 0;
+}
+
+int main()
+{
+
+
+
+ try
+ {
+ using namespace boost::multiprecision;
+
+ std::cout << versions() << std::endl;
+
+ std::ofstream fout(filename, std::ios_base::out);
+ if (!fout.is_open())
+ {
+ std::cout << "Unable to open file " << filename << " for output.\n" << std::endl;
+ return -1; // boost::EXIT_FAILURE;
+ }
+ fout <<
+ "[/""\n"
+ "Copyright 2013 Paul A. Bristow.""\n"
+ "Copyright 2013 John Maddock.""\n"
+ "Distributed under the Boost Software License, Version 1.0.""\n"
+ "(See accompanying file LICENSE_1_0.txt or copy at""\n"
+ "http://www.boost.org/LICENSE_1_0.txt).""\n"
+ "]""\n"
+ << std::endl;
+
+ fout << "[section:limits"<< bits32_64 << " Numeric limits for " << bits32_64 << "-bit platform]" << std::endl;
+
+ // Output platform version info (32 or 64).
+ fout << "These tables were generated using the following program and options:\n\n"
+ "[pre""\n"
+ << versions()
+ << "]""\n"
+ << std::endl;
+
+ fout << "[table:integral_constants Integer types constants (`std::numeric_limits<T>::is_integer == true` && is_exact == true)" "\n"
+ "[";
+
+ for (size_t i = 0; i < integer_constant_heads.size(); i++)
+ { // signed, bound, modulo ...
+ fout << "[" << integer_constant_heads[i] << "]" ;
+ }
+ fout << "]";
+
+ integer_constants<bool>("bool", fout);
+ integer_constants<char>("char", fout);
+ integer_constants<unsigned char>("unsigned char", fout);
+ integer_constants<char16_t>("char16_t", fout);
+ integer_constants<char32_t>("char32_t", fout);
+ integer_constants<short>("short", fout);
+ integer_constants<unsigned short>("unsigned short", fout);
+ integer_constants<int>("int", fout);
+ integer_constants<unsigned int>("unsigned", fout);
+ integer_constants<long>("long", fout);
+ integer_constants<unsigned long>("unsigned long", fout);
+ integer_constants<long long>("long long", fout);
+ integer_constants<unsigned long long>("unsigned long long", fout);
+ integer_constants<int32_t>("int32_t", fout);
+ integer_constants<uint32_t>("uint32_t", fout);
+ integer_constants<int64_t>("int64_t", fout);
+ integer_constants<uint64_t>("uint64_t", fout);
+ integer_constants<int128_t>("int128_t", fout);
+ integer_constants<uint128_t>("uint128_t", fout);
+ integer_constants<int256_t>("int256_t", fout);
+ integer_constants<uint256_t>("uint256_t", fout);
+ // integer_constants<int512_t>("int512_t", fout);
+ //integer_constants<uint512_t>("uint512_t", fout); // Too big?
+ integer_constants<cpp_int>("cpp_int", fout);
+
+ fout << "\n]\n\n";
+
+
+ fout << "[table:integral_functions Integer types functions (`std::numeric_limits<T>::is_integer == true && std::numeric_limits<T>::min() == std::numeric_limits<T>::lowest()` )" "\n"
+ "[";
+ // Display types across the page, and 2 (or 3) functions as rows.
+
+ fout << "[function]";
+ for (size_t i = 0; i < integer_function_heads.size(); i++)
+ {
+ fout << "[" << integer_function_heads[i] << "]" ;
+ }
+ fout << "]"; // end of headings.
+ integer_functions<bool>("bool", fout);
+ //integer_functions<char>("char", fout); // Need int value not char.
+ fout << "\n[" // start of row.
+ "[" << "char"<< "]" ;
+ fout << "[" << static_cast<int>((std::numeric_limits<char>::max)()) << "]" ;
+ // fout << "[" << (std::numeric_limits<T>::lowest)() << "]" ;
+ fout << "[" << static_cast<int>((std::numeric_limits<char>::min)()) << "]" ;
+ fout << "]"; // end of row.
+ //integer_functions<unsigned char>("unsigned char", fout); // Need int value not char.
+ fout << "\n[" // start of row.
+ "[" << "unsigned char"<< "]" ;
+ fout << "[" << static_cast<int>((std::numeric_limits<unsigned char>::max)()) << "]" ;
+ // fout << "[" << std::numeric_limits<unsigned char>::lowest() << "]" ;
+ fout << "[" << static_cast<int>(std::numeric_limits<unsigned char>::min()) << "]" ;
+ fout << "]"; // end of row.
+
+ integer_functions<char16_t>("char16_t", fout);
+ integer_functions<char32_t>("char32_t", fout);
+ integer_functions<short>("short", fout);
+ integer_functions<unsigned short>("unsigned short", fout);
+ integer_functions<int>("int", fout);
+ integer_functions<unsigned int>("unsigned int", fout);
+ integer_functions<long>("long", fout);
+ integer_functions<unsigned long>("unsigned long", fout);
+ integer_functions<long long>("long long", fout);
+ integer_functions<unsigned long long>("unsigned long long", fout);
+ integer_functions<int32_t>("int32_t", fout);
+ integer_functions<int64_t>("int64_t", fout);
+ integer_functions<int128_t>("int128_t", fout);
+ fout << "]" "\n"; // end of table;
+
+
+ //fout << "[[max]"
+ // << "[" << std::numeric_limits<bool>::max() << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char>::max()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<unsigned char>::max()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char16_t>::max()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char32_t>::max()) << "]"
+ // << "[" << std::numeric_limits<short>::max() << "]"
+ // << "[" << std::numeric_limits<unsigned short>::max() << "]"
+ // << "[" << std::numeric_limits<int>::max() << "]"
+ // << "[" << std::numeric_limits<unsigned int>::max() << "]"
+ // << "[" << std::numeric_limits<long>::max() << "]"
+ // << "[" << std::numeric_limits<unsigned long>::max() << "]"
+ // << "[" << std::numeric_limits<long long>::max() << "]"
+ // << "[" << std::numeric_limits<unsigned long long>::max() << "]"
+ // << "[" << std::numeric_limits<int32_t>::max() << "]"
+ // << "[" << std::numeric_limits<int64_t>::max() << "]"
+ // << "[" << std::numeric_limits<int128_t>::max() << "]"
+ // //<< "[" << std::numeric_limits<int256_t>::max() << "]" // too big?
+ // //<< "[" << std::numeric_limits<int512_t>::max() << "]" // too big?
+ // << "]" "\n";
+ ///* Assume lowest() is not useful as == min for all integer types.
+ // */
+
+ //fout << "[[min]"
+ // << "[" << std::numeric_limits<bool>::min() << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char>::min()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<unsigned char>::min()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char16_t>::min()) << "]"
+ // << "[" << static_cast<int>(std::numeric_limits<char32_t>::min()) << "]"
+ // << "[" << std::numeric_limits<short>::min() << "]"
+ // << "[" << std::numeric_limits<unsigned short>::min() << "]"
+ // << "[" << std::numeric_limits<int>::min() << "]"
+ // << "[" << std::numeric_limits<unsigned int>::min() << "]"
+ // << "[" << std::numeric_limits<long>::min() << "]"
+ // << "[" << std::numeric_limits<unsigned long>::min() << "]"
+ // << "[" << std::numeric_limits<long long>::min() << "]"
+ // << "[" << std::numeric_limits<unsigned long long>::min() << "]"
+ // << "[" << std::numeric_limits<int32_t>::min() << "]"
+ // << "[" << std::numeric_limits<int64_t>::min() << "]"
+ // << "[" << std::numeric_limits<int128_t>::min() << "]"
+ // // << "[" << std::numeric_limits<int256_t>::min() << "]" // too big?
+ // // << "[" << std::numeric_limits<int512_t>::min() << "]" // too big?
+ // << "]""\n";
+
+
+
+ // Floating-point
+
+ typedef number<cpp_dec_float<50> > cpp_dec_float_50; // 50 decimal digits.
+ typedef number<cpp_bin_float<113> > bin_128bit_double_type; // == Binary rare long double.
+
+ fout <<
+ //"[table:float_functions Floating-point types constants (`std::numeric_limits<T>::is_integer == false && std::numeric_limits<T>::is_modulo == false` )" "\n"
+ "[table:float_functions Floating-point types constants (`std::numeric_limits<T>::is_integer==false && is_signed==true && is_modulo==false && is_exact==false && is_bound==true`)" "\n"
+ "[";
+ for (size_t i = 0; i < float_constant_heads.size(); i++)
+ {
+ fout << "[" << float_constant_heads[i] << "]" ;
+ }
+ fout << "]"; // end of headings.
+
+ float_constants<float>("float", fout);
+ float_constants<double>("double", fout);
+ float_constants<long double>("long double", fout);
+ float_constants<cpp_dec_float_50>("cpp_dec_float_50", fout);
+ float_constants<bin_128bit_double_type>("bin_128bit_double_type", fout);
+ fout << "]" "\n"; // end of table;
+
+ fout <<
+ "[table:float_functions Floating-point types functions (`std::numeric_limits<T>::is_integer == false`)" "\n"
+ "[";
+
+ for (size_t i = 0; i < float_type_names.size(); i++)
+ {
+ fout << "[" << float_type_names[i] << "]" ;
+ }
+ fout << "]"; // end of headings.
+
+ fout << "[[max]"
+ << "[" << std::numeric_limits<float>::max() << "]"
+ << "[" << std::numeric_limits<double>::max() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Perhaps to test Long double is not just a duplication of double (but need change is headings too).
+ << "[" << std::numeric_limits<long double>::max() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50>::max() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::max() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[min]"
+ << "[" << std::numeric_limits<float>::min() << "]"
+ << "[" << std::numeric_limits<double>::min() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::min() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::min() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::min() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[epsilon]"
+ << "[" << std::numeric_limits<float>::epsilon() << "]"
+ << "[" << std::numeric_limits<double>::epsilon() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::epsilon() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::epsilon() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::epsilon() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[round_error]"
+ << "[" << std::numeric_limits<float>::round_error() << "]"
+ << "[" << std::numeric_limits<double>::round_error() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::round_error() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::round_error() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::round_error() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[infinity]"
+ << "[" << std::numeric_limits<float>::infinity() << "]"
+ << "[" << std::numeric_limits<double>::infinity() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::infinity() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::infinity() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::infinity() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[quiet_NaN]"
+ << "[" << std::numeric_limits<float>::quiet_NaN() << "]"
+ << "[" << std::numeric_limits<double>::quiet_NaN() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::quiet_NaN() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::quiet_NaN() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::quiet_NaN() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[signaling_NaN]"
+ << "[" << std::numeric_limits<float>::signaling_NaN() << "]"
+ << "[" << std::numeric_limits<double>::signaling_NaN() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::signaling_NaN() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::signaling_NaN() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::signaling_NaN() << "]"
+ << "]" "\n"; // end of row.
+
+ fout << "[[denorm_min]"
+ << "[" << std::numeric_limits<float>::denorm_min() << "]"
+ << "[" << std::numeric_limits<double>::denorm_min() << "]"
+//#if LDBL_MANT_DIG > DBL_MANT_DIG
+ // Long double is not just a duplication of double.
+ << "[" << std::numeric_limits<long double>::denorm_min() << "]"
+//#endif
+ << "[" << std::numeric_limits<cpp_dec_float_50 >::denorm_min() << "]"
+ << "[" << std::numeric_limits<bin_128bit_double_type >::denorm_min() << "]"
+ << "]" "\n"; // end of row.
+
+
+
+ fout << "]" "\n"; // end of table;
+
+
+ fout << "\n\n"
+ "[endsect] [/section:limits32 Numeric limits for 32-bit platform]" "\n" << std::endl;
+
+
+
+ fout.close();
+ }
+ catch(std::exception ex)
+ {
+ std::cout << "exception thrown: " << ex.what() << std::endl;
+ }
+
+
+} // int main()
+
+/*
+ Description: Autorun "J:\Cpp\Misc\Debug\numeric_limits_qbk.exe"
+
+ Program: I:\boost-sandbox\multiprecision.cpp_bin_float\libs\multiprecision\doc\numeric_limits_qbk.cpp
+ Wed Aug 28 14:17:21 2013
+ BuildInfo:
+ Platform Win32
+ Compiler Microsoft Visual C++ version 10.0
+ MSVC version 160040219.
+ STL Dinkumware standard library version 520
+ Boost version 1.55.0
+
+ */
+

Added: trunk/libs/multiprecision/example/cpp_bin_float_snips.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/example/cpp_bin_float_snips.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+void t1()
+{
+ //[cpp_bin_float_eg
+ //=#include <boost/multiprecision/cpp_bin_float.hpp>
+
+ using namespace boost::multiprecision;
+
+ // Operations at fixed precision and full numeric_limits support:
+ cpp_bin_float_100 b = 2;
+ std::cout << std::numeric_limits<cpp_bin_float_100>::digits << std::endl;
+ std::cout << std::numeric_limits<cpp_bin_float_100>::digits10 << std::endl;
+ // We can use any C++ std lib function, lets print all the digits as well:
+ std::cout << std::setprecision(std::numeric_limits<cpp_bin_float_100>::max_digits10)
+ << log(b) << std::endl; // print log(2)
+ // We can also use any function from Boost.Math:
+ std::cout << boost::math::tgamma(b) << std::endl;
+ // These even work when the argument is an expression template:
+ std::cout << boost::math::tgamma(b * b) << std::endl;
+ // And since we have an extended exponent range we can generate some really large
+ // numbers here (4.0238726007709377354370243e+2564):
+ std::cout << boost::math::tgamma(cpp_bin_float_100(1000)) << std::endl;
+ //]
+}
+
+int main()
+{
+ t1();
+ return 0;
+}
+

Added: trunk/libs/multiprecision/example/numeric_limits_snips.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/example/numeric_limits_snips.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,458 @@
+// Copyright Paul A. Bristow 2013
+// Copyright John Maddock 2013
+// Copyright Christopher Kormanyos
+
+// 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)
+
+// Examples of numeric_limits usage as snippets for multiprecision documentation.
+
+// Includes text as Quickbook comments.
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+#include <sstream>
+#include <limits> // numeric_limits
+#include <iomanip>
+#include <locale>
+#include <boost/assert.hpp>
+
+#include <boost/math/constants/constants.hpp>
+#include <boost/math/special_functions/nonfinite_num_facets.hpp>
+
+
+
+#include <boost/math/special_functions/factorials.hpp>
+#include <boost/math/special_functions/next.hpp>
+#include <boost/math/tools/precision.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp> // is decimal.
+#include <boost/multiprecision/cpp_bin_float.hpp> // is binary.
+
+#include <boost/test/unit_test.hpp> // Boost.Test
+#include <boost/test/floating_point_comparison.hpp>
+
+
+
+template<class RealType>
+bool nearly_equal(RealType a, RealType b)
+{
+ const RealType tolerance = 3 * std::numeric_limits<T>::epsilon();
+ return (a - tolerance * std::abs(a) <= b + tolerance * std::abs(b)) //
+ && (a + tolerance * std::abs(a) >= b - tolerance * std::abs(b));
+}
+
+int main()
+{
+ try
+ {
+
+// Example of portable way to get std::numeric_limits<T>::max_digits10.
+
+//[max_digits10_1
+/*`For example, to be portable, including older platforms:
+*/
+
+ typedef float T; // Any type: `double`, cpp_dec_float_50, bin_128bit_double_type ...
+
+#if defined(BOOST_NO_CXX11_NUMERIC_LIMITS)
+ std::cout.precision(2 + std::numeric_limits<T>::digits * 3010U/10000U);
+#else
+# if (_MSC_VER <= 1600) // Correct wrong value for float.
+ std::cout.precision(2 + std::numeric_limits<T>::digits * 3010U/10000U);
+# else
+ std::cout.precision(std::numeric_limits<T>::max_digits10);
+# endif
+#endif
+
+ std::cout << "std::cout.precision = " << std::cout.precision() << std::endl;
+
+ double x = 1.2345678901234567889;
+
+ std::cout << "x = " << x << std::endl; //
+
+/*`which should output:
+
+ std::cout.precision = 9
+ x = 1.23456789
+*/
+
+//] [/max_digits10_1]
+
+ {
+//[max_digits10_2
+
+ double write = 2./3; // Any arbitrary value that cannot be represented exactly.
+ double read = 0;
+ std::stringstream s;
+ s.precision(std::numeric_limits<double>::digits10); // or `float64_t` for 64-bit IEE754 double.
+ s << write;
+ s >> read;
+ if(read != write)
+ {
+ std::cout << std::setprecision(std::numeric_limits<double>::digits10)
+ << read << " != " << write << std::endl;
+ }
+
+//] [/max_digits10_2]
+ // 0.666666666666667 != 0.666666666666667
+ }
+
+ {
+//[max_digits10_3
+
+ double pi = boost::math::double_constants::pi;
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ std::cout << pi << std::endl; // 3.1415926535897931
+
+//] [/max_digits10_3]
+ }
+ {
+//[max_digits10_4
+/*`and similarly for a much higher precision type:
+*/
+
+ using namespace boost::multiprecision;
+
+ typedef number<cpp_dec_float<50> > cpp_dec_float_50; // 50 decimal digits.
+
+ using boost::multiprecision::cpp_dec_float_50;
+
+ cpp_dec_float_50 pi = boost::math::constants::pi<cpp_dec_float_50>();
+ std::cout.precision(std::numeric_limits<cpp_dec_float_50>::max_digits10);
+ std::cout << pi << std::endl;
+ // 3.141592653589793238462643383279502884197169399375105820974944592307816406
+//] [/max_digits10_4]
+ }
+
+ {
+//[max_digits10_5
+
+ for (int i = 2; i < 15; i++)
+ {
+ std::cout << std::setw(std::numeric_limits<int>::max_digits10)
+ << boost::math::factorial<double>(i) << std::endl;
+ }
+
+//] [/max_digits10_5]
+ }
+
+ }
+ catch(std::exception ex)
+ {
+ std::cout << "Caught Exception " << ex.what() << std::endl;
+ }
+
+ {
+//[max_digits10_6
+
+ typedef double T;
+
+ bool denorm = std::numeric_limits<T>::denorm_min() < std::numeric_limits<T>::min();
+ BOOST_ASSERT(denorm);
+
+//] [/max_digits10_6]
+ }
+
+ {
+ unsigned char c = 256;
+ std::cout << "char c = " << (int)c << std::endl;
+ }
+
+ {
+//[digits10_1
+ std::cout
+ << std::setw(std::numeric_limits<short>::digits10 +1 +1) // digits10+1, and +1 for sign.
+ << std::showpos << (std::numeric_limits<short>::max)() // +32767
+ << std::endl
+ << std::setw(std::numeric_limits<short>::digits10 +1 +1)
+ << (std::numeric_limits<short>::min)() << std::endl; // -32767
+//] [/digits10_1]
+ }
+
+ {
+//[digits10_2
+ std::cout
+ << std::setw(std::numeric_limits<unsigned short>::digits10 +1 +1) // digits10+1, and +1 for sign.
+ << std::showpos << (std::numeric_limits<unsigned short>::max)() // 65535
+ << std::endl
+ << std::setw(std::numeric_limits<unsigned short>::digits10 +1 +1) // digits10+1, and +1 for sign.
+ << (std::numeric_limits<unsigned short>::min)() << std::endl; // 0
+//] [/digits10_2]
+ }
+
+ std::cout <<std::noshowpos << std::endl;
+
+ {
+//[digits10_3
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ double d = 1e15;
+ double dp1 = d+1;
+ std::cout << d << "\n" << dp1 << std::endl;
+ // 1000000000000000
+ // 1000000000000001
+ std::cout << dp1 - d << std::endl; // 1
+//] [/digits10_3]
+ }
+
+ {
+//[digits10_4
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ double d = 1e16;
+ double dp1 = d+1;
+ std::cout << d << "\n" << dp1 << std::endl;
+ // 10000000000000000
+ // 10000000000000000
+ std::cout << dp1 - d << std::endl; // 0 !!!
+//] [/digits10_4]
+ }
+
+ {
+//[epsilon_1
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ double d = 1.;
+ double eps = std::numeric_limits<double>::epsilon();
+ double dpeps = d+eps;
+ std::cout << std::showpoint // Ensure all trailing zeros are shown.
+ << d << "\n" // 1.0000000000000000
+ << dpeps << std::endl; // 2.2204460492503131e-016
+ std::cout << dpeps - d // 1.0000000000000002
+ << std::endl;
+//] [epsilon_1]
+ }
+
+ {
+//[epsilon_2
+ double one = 1.;
+ double nad = boost::math::float_next(one);
+ std::cout << nad << "\n" // 1.0000000000000002
+ << nad - one // 2.2204460492503131e-016
+ << std::endl;
+//] [epsilon_2]
+ }
+ {
+//[epsilon_3
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ double d = 1.;
+ double eps = std::numeric_limits<double>::epsilon();
+ double dpeps = d + eps/2;
+
+ std::cout << std::showpoint // Ensure all trailing zeros are shown.
+ << dpeps << "\n" // 1.0000000000000000
+ << eps/2 << std::endl; // 1.1102230246251565e-016
+ std::cout << dpeps - d // 0.00000000000000000
+ << std::endl;
+//] [epsilon_3]
+ }
+
+ {
+ typedef double RealType;
+//[epsilon_4
+/*`A tolerance might be defined using this version of epsilon thus:
+*/
+ RealType tolerance = boost::math::tools::epsilon<RealType>() * 2;
+//] [epsilon_4]
+ }
+
+ {
+//[digits10_5
+ -(std::numeric_limits<double>::max)() == std::numeric_limits<double>::lowest();
+//] [/digits10_5]
+ }
+
+ {
+//[denorm_min_1
+ std::cout.precision(std::numeric_limits<double>::max_digits10);
+ if (std::numeric_limits<double>::has_denorm == std::denorm_present)
+ {
+ double d = std::numeric_limits<double>::denorm_min();
+
+ std::cout << d << std::endl; // 4.9406564584124654e-324
+
+ int exponent;
+
+ double significand = frexp(d, &exponent);
+ std::cout << "exponent = " << std::hex << exponent << std::endl; // fffffbcf
+ std::cout << "significand = " << std::hex << significand << std::endl; // 0.50000000000000000
+ }
+ else
+ {
+ std::cout << "No denormalization. " << std::endl;
+ }
+//] [denorm_min_1]
+ }
+
+ {
+//[round_error_1
+ double round_err = std::numeric_limits<double>::epsilon() // 2.2204460492503131e-016
+ * std::numeric_limits<double>::round_error(); // 1/2
+ std::cout << round_err << std::endl; // 1.1102230246251565e-016
+//] [/round_error_1]
+ }
+
+ {
+ typedef double T;
+//[tolerance_1
+/*`For example, if we want a tolerance that might suit about 9 arithmetical operations,
+say sqrt(9) = 3, we could define:
+*/
+
+ T tolerance = 3 * std::numeric_limits<T>::epsilon();
+
+/*`This is very widely used in Boost.Math testing
+with Boost.Test's macro `BOOST_CHECK_CLOSE_FRACTION`
+*/
+
+ T expected = 1.0;
+ T calculated = 1.0 + std::numeric_limits<T>::epsilon();
+
+ using boost::test_tools::check_is_close;
+
+ bool r = check_is_close(expected, calculated, tolerance);
+ std::cout << std::boolalpha << r << std::endl; // true
+
+/*`If using Boost.Test, then call the macro version:
+``BOOST_CHECK_CLOSE_FRACTION(expected, calculated, tolerance);``
+*/
+
+
+//] [/tolerance_1]
+ }
+
+ {
+//[tolerance_2
+
+ using boost::multiprecision::number;
+ using boost::multiprecision::cpp_dec_float;
+ using boost::multiprecision::et_off;
+
+ typedef number<cpp_dec_float<50>, et_off > cpp_dec_float_50; // 50 decimal digits.
+/*`[note that Boost.Test does not yet allow floating-point comparisons with expression templates on,
+so the default expression template parameter has been replaced by `et_off`.]
+*/
+
+ cpp_dec_float_50 tolerance = 3 * std::numeric_limits<cpp_dec_float_50>::epsilon();
+ cpp_dec_float_50 expected = boost::math::constants::two_pi<cpp_dec_float_50>();
+ cpp_dec_float_50 calculated = 2 * boost::math::constants::pi<cpp_dec_float_50>();
+ using boost::test_tools::check_is_close;
+
+ bool r = check_is_close(expected, calculated, tolerance);
+ std::cout << std::boolalpha << r << std::endl; // true
+
+//] [/tolerance_2]
+ }
+
+ {
+//[tolerance_3
+
+ using boost::multiprecision::cpp_bin_float_quad;
+
+ cpp_bin_float_quad tolerance = 3 * std::numeric_limits<cpp_bin_float_quad>::epsilon();
+ cpp_bin_float_quad expected = boost::math::constants::two_pi<cpp_bin_float_quad>();
+ cpp_bin_float_quad calculated = 2 * boost::math::constants::pi<cpp_bin_float_quad>();
+ using boost::test_tools::check_is_close;
+
+ bool r = check_is_close(expected, calculated, tolerance);
+ std::cout << std::boolalpha << r << std::endl; // true
+
+//] [/tolerance_3]
+ }
+
+ {
+//[nan_1]
+
+/*`NaN can be used with binary multiprecision types like `cpp_bin_float_quad`:
+*/
+ using boost::multiprecision::cpp_bin_float_quad;
+
+ if (std::numeric_limits<cpp_bin_float_quad>::has_quiet_NaN == true)
+ {
+ cpp_bin_float_quad tolerance = 3 * std::numeric_limits<cpp_bin_float_quad>::epsilon();
+
+ cpp_bin_float_quad NaN = std::numeric_limits<cpp_bin_float_quad>::quiet_NaN();
+ std::cout << "cpp_bin_float_quad NaN is " << NaN << std::endl; // cpp_bin_float_quad NaN is nan
+
+ cpp_bin_float_quad expected = NaN;
+ cpp_bin_float_quad calculated = 2 * NaN;
+ using boost::test_tools::check_is_close;
+
+ bool r = check_is_close(expected, expected, tolerance);
+ std::cout << std::boolalpha << r << std::endl; // false, as expected because all comparisons with NaNs are false.
+
+ r = check_is_close(expected, calculated, tolerance);
+ std::cout << std::boolalpha << r << std::endl; // false, as expected because all comparisons with NaNs are false.
+ }
+ else
+ {
+ std::cout << "Type " << typeid(cpp_bin_float_quad).name() << " does not have NaNs!" << std::endl;
+ }
+
+//] [/nan_1]
+ }
+
+ {
+//[facet_1]
+
+/*`
+See [@boost:/libs/math/example/nonfinite_facet_sstream.cpp]
+and we also need
+
+ #include <boost/math/special_functions/nonfinite_num_facets.hpp>
+
+Then we can equally well use a multiprecision type cpp_bin_float_quad:
+
+*/
+ using boost::multiprecision::cpp_bin_float_quad;
+
+ typedef cpp_bin_float_quad T;
+
+ using boost::math::nonfinite_num_put;
+ using boost::math::nonfinite_num_get;
+ {
+ std::locale old_locale;
+ std::locale tmp_locale(old_locale, new nonfinite_num_put<char>);
+ std::locale new_locale(tmp_locale, new nonfinite_num_get<char>);
+ std::stringstream ss;
+ ss.imbue(new_locale);
+ T inf = std::numeric_limits<T>::infinity();
+ ss << inf; // Write out.
+ assert(ss.str() == "inf");
+ T r;
+ ss >> r; // Read back in.
+ assert(inf == r); // Confirms that the floating-point values really are identical.
+ std::cout << "infinity output was " << ss.str() << std::endl;
+ std::cout << "infinity input was " << r << std::endl;
+ }
+
+/*`
+ infinity output was inf
+ infinity input was inf
+
+Similarly we can do the same with NaN (except that we cannot use `assert`)
+*/
+ {
+ std::locale old_locale;
+ std::locale tmp_locale(old_locale, new nonfinite_num_put<char>);
+ std::locale new_locale(tmp_locale, new nonfinite_num_get<char>);
+ std::stringstream ss;
+ ss.imbue(new_locale);
+ T n;
+ T NaN = std::numeric_limits<T>::quiet_NaN();
+ ss << NaN; // Write out.
+ assert(ss.str() == "nan");
+ std::cout << "NaN output was " << ss.str() << std::endl;
+ ss >> n; // Read back in.
+ assert(NaN == n); // Confirms that the floating-point values really are identical.
+ std::cout << "NaN input was " << n << std::endl;
+ }
+/*`
+ NaN output was nan
+ NaN input was nan
+
+*/
+//] [/facet_1]
+ }
+
+} // int main()

Modified: trunk/libs/multiprecision/performance/performance_test.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/performance_test.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/performance_test.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -12,7 +12,7 @@
 #if !defined(TEST_MPF) && !defined(TEST_MPZ) && \
    !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPQ) \
    && !defined(TEST_TOMMATH) && !defined(TEST_TOMMATH_BOOST_RATIONAL) && !defined(TEST_MPZ_BOOST_RATIONAL)\
- && !defined(TEST_CPP_INT) && !defined(TEST_CPP_INT_RATIONAL)
+ && !defined(TEST_CPP_INT) && !defined(TEST_CPP_INT_RATIONAL) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF
 # define TEST_MPZ
 # define TEST_MPQ
@@ -22,6 +22,7 @@
 # define TEST_TOMMATH
 # define TEST_CPP_INT
 # define TEST_CPP_INT_RATIONAL
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -39,6 +40,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -84,15 +88,6 @@
 
 unsigned bits_wanted; // for integer types
 
-namespace boost{ namespace multiprecision{
-
-template<>
-class number_category<boost::int64_t> : public mpl::int_<number_kind_integer>{};
-template<>
-class number_category<boost::uint64_t> : public mpl::int_<number_kind_integer>{};
-
-}}
-
 template <class T, int Type>
 struct tester
 {
@@ -841,6 +836,11 @@
    test<boost::multiprecision::cpp_dec_float_100>("cpp_dec_float", 100);
    test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<500> > >("cpp_dec_float", 500);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>("cpp_bin_float", 50);
+ test<boost::multiprecision::cpp_bin_float_100>("cpp_bin_float", 100);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<500> >::digits> > >("cpp_bin_float", 500);
+#endif
 #ifdef TEST_MPFR
    test<boost::multiprecision::mpfr_float_50>("mpfr_float", 50);
    test<boost::multiprecision::mpfr_float_100>("mpfr_float", 100);

Modified: trunk/libs/multiprecision/performance/sf_performance.hpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance.hpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance.hpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -7,12 +7,13 @@
 #define BOOST_MATH_PROMOTE_DOUBLE_POLICY false
 
 #if !defined(TEST_MPFR) && !defined(TEST_MPREAL) && !defined(TEST_MPF) && !defined(TEST_MPREAL) \
- && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_CLASS) && !defined(TEST_FLOAT)
+ && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_CLASS) && !defined(TEST_FLOAT) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPFR
 # define TEST_MPF
 # define TEST_CPP_DEC_FLOAT
-# define TEST_MPFR_CLASS
-# define TEST_MPREAL
+# define TEST_CPP_BIN_FLOAT
+//# define TEST_MPFR_CLASS
+//# define TEST_MPREAL
 # define TEST_FLOAT
 #endif
 
@@ -34,6 +35,10 @@
 #ifdef TEST_CPP_DEC_FLOAT
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include <boost/multiprecision/mpfr.hpp>
+#endif
 #include <boost/math/special_functions/bessel.hpp>
 #include <boost/math/tools/rational.hpp>
 #include <boost/math/distributions/non_central_t.hpp>

Modified: trunk/libs/multiprecision/performance/sf_performance_bessel2.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance_bessel2.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance_bessel2.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -14,4 +14,7 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_50", test_bessel<cpp_dec_float_50>, 3);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_50", test_bessel<cpp_bin_float_50>, 3);
+#endif
 }

Modified: trunk/libs/multiprecision/performance/sf_performance_bessel6.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance_bessel6.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance_bessel6.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -10,6 +10,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_100", test_bessel<cpp_dec_float_100>);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_100", test_bessel<cpp_bin_float_100>);
+#endif
 #ifdef TEST_MPFR_CLASS
    time_proc("mpfr_class", test_bessel<mpfr_class>);
 #endif

Modified: trunk/libs/multiprecision/performance/sf_performance_nct3.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance_nct3.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance_nct3.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -13,6 +13,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_50", test_nct<cpp_dec_float_50>);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_50", test_nct<cpp_bin_float_50>, 3);
+#endif
 #ifdef TEST_MPFR_CLASS
    time_proc("mpfr_class", test_nct<mpfr_class>);
 #endif

Modified: trunk/libs/multiprecision/performance/sf_performance_nct6.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance_nct6.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance_nct6.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -13,6 +13,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_100", test_nct<cpp_dec_float_100>);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_100", test_nct<cpp_bin_float_100>);
+#endif
 #ifdef TEST_MPFR_CLASS
    time_proc("mpfr_class", test_nct<mpfr_class>);
 #endif

Modified: trunk/libs/multiprecision/performance/sf_performance_poly.cpp
==============================================================================
--- trunk/libs/multiprecision/performance/sf_performance_poly.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/performance/sf_performance_poly.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -29,6 +29,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_50", test_polynomial<cpp_dec_float_50>);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_50", test_polynomial<cpp_bin_float_50>);
+#endif
 #ifdef TEST_MPFR_CLASS
    time_proc("mpfr_class", test_polynomial<mpfr_class>);
 #endif
@@ -57,6 +60,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    time_proc("cpp_dec_float_100", test_polynomial<cpp_dec_float_100>);
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ time_proc("cpp_bin_float_100", test_polynomial<cpp_bin_float_100>);
+#endif
 #ifdef TEST_MPFR_CLASS
    time_proc("mpfr_class", test_polynomial<mpfr_class>);
 #endif

Modified: trunk/libs/multiprecision/test/Jamfile.v2
==============================================================================
--- trunk/libs/multiprecision/test/Jamfile.v2 Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/Jamfile.v2 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -60,6 +60,10 @@
 run test_arithmetic_cpp_dec_float_2.cpp ;
 run test_arithmetic_cpp_dec_float_3.cpp ;
 
+run test_arithmetic_cpp_bin_float_1.cpp ;
+run test_arithmetic_cpp_bin_float_2.cpp ;
+run test_arithmetic_cpp_bin_float_3.cpp ;
+
 run test_arithmetic_mpf_50.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
 run test_arithmetic_mpf.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
 run test_arithmetic_mpz.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
@@ -172,6 +176,13 @@
               <define>TEST_CPP_DEC_FLOAT
         : test_numeric_limits_cpp_dec_float ;
 
+run test_numeric_limits.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ : test_numeric_limits_cpp_bin_float ;
+
 run test_numeric_limits.cpp $(TOMMATH)
         : # command line
         : # input files
@@ -240,6 +251,12 @@
            : # requirements
             <define>TEST_CPP_DEC_FLOAT
            : $(source:B)_cpp_dec_float ;
+ run $(source)
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ : $(source:B)_cpp_bin_float ;
       run $(source) quadmath
            : # command line
            : # input files
@@ -327,12 +344,41 @@
 run test_cpp_int_lit.cpp ;
 compile test_constexpr.cpp : [ check-target-builds ../config//has_float128 : <define>HAVE_FLOAT128 : ] [ check-target-builds ../config//has_intel_quad : <define>HAVE_FLOAT128 : ] ;
 
+run test_cpp_bin_float_io.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ <define>TEST1
+ release # Otherwise runtime is slow
+ : test_cpp_bin_float_io_1
+ ;
+
+run test_cpp_bin_float_io.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ <define>TEST2
+ release # Otherwise runtime is slow
+ : test_cpp_bin_float_io_2
+ ;
+
+run test_cpp_bin_float.cpp mpfr gmp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ release # Otherwise runtime is slow
+ ;
+
 run test_float_io.cpp
         : # command line
         : # input files
         : # requirements
               <define>TEST_CPP_DEC_FLOAT
- #release # Otherwise runtime is slow
+ release # Otherwise runtime is slow
         : test_float_io_cpp_dec_float ;
 
 run test_float_io.cpp gmp
@@ -521,6 +567,7 @@
 
 run ../example/cpp_dec_float_snips.cpp ;
 run ../example/cpp_int_snips.cpp ;
+run ../example/cpp_bin_float_snips.cpp ;
 
 run ../example/tommath_snips.cpp $(TOMMATH)
         : # command line
@@ -551,6 +598,7 @@
                [ check-target-builds ../config//has_tommath : : <build>no ] ;
 compile include_test/cpp_int_include_test.cpp ;
 compile include_test/cpp_dec_float_include_test.cpp ;
+compile include_test/cpp_bin_float_include_test.cpp ;
 
 run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp ;
 run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp ;
@@ -629,6 +677,18 @@
             <toolset>msvc:<cxxflags>-bigobj
             release
            : $(source:B)_cpp_dec_float ;
+ run $(source) /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ math/instances//test_instances_cpp_bin_float/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ <define>BOOST_ALL_NO_LIB
+ <optimization>speed
+ <toolset>msvc:<cxxflags>-bigobj
+ release
+ : $(source:B)_cpp_bin_float ;
       run $(source) quadmath
             /boost/test//boost_unit_test_framework/<link>static
             /boost/regex//boost_regex/<link>static
@@ -725,6 +785,12 @@
 
       compile $(source)
               : # requirements
+ <define>TEST_CPP_BIN_FLOAT
+ <debug-symbols>off
+ : $(source:B)_cpp_bin_float ;
+
+ compile $(source)
+ : # requirements
                     <define>TEST_CPP_DEC_FLOAT_NO_ET
                <debug-symbols>off
               : $(source:B)_cpp_dec_float_no_et ;

Modified: trunk/libs/multiprecision/test/concepts/number_concept_check.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/number_concept_check.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/number_concept_check.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,8 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) \
- && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +34,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -52,6 +54,9 @@
 #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -192,6 +197,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif
@@ -226,6 +234,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::cpp_dec_float_50>));
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::cpp_bin_float_50>));
+#endif
 #ifdef TEST_LOGGED_ADAPTER
    typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
    test_extra(num_t());

Modified: trunk/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,7 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) \
- && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +33,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -52,6 +53,9 @@
 #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -145,6 +149,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif

Modified: trunk/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,8 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) \
- && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +34,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -52,6 +54,9 @@
 #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -112,6 +117,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif

Modified: trunk/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,8 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) \
- && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +34,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -52,6 +54,9 @@
 #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -116,6 +121,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif

Modified: trunk/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,8 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) \
- && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +34,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -55,6 +57,9 @@
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #ifdef TEST_LOGGED_ADAPTER
 #include <boost/multiprecision/logged_adaptor.hpp>
 #endif
@@ -134,6 +139,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif

Modified: trunk/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp
==============================================================================
--- trunk/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -21,7 +21,8 @@
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) \
    && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)\
    && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) \
- && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)
+ && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_BACKEND
 # define TEST_MPZ
@@ -33,6 +34,7 @@
 # define TEST_CPP_DEC_FLOAT
 # define TEST_CPP_DEC_FLOAT_NO_ET
 # define TEST_LOGGED_ADAPTER
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -52,6 +54,9 @@
 #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_NO_ET) || defined(TEST_LOGGED_ADAPTER)
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#if defined(TEST_CPP_BIN_FLOAT)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #if defined(TEST_MPFR_50) || defined(TEST_MPFR_6) || defined(TEST_MPFR_15) || defined(TEST_MPFR_17) || defined(TEST_MPFR_30)
 #include <boost/multiprecision/mpfr.hpp>
 #endif
@@ -107,6 +112,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
    test_extra(boost::multiprecision::cpp_dec_float_50());
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test_extra(boost::multiprecision::cpp_bin_float_50());
+#endif
 #ifdef TEST_CPP_DEC_FLOAT_NO_ET
    test_extra(boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100>, boost::multiprecision::et_off>());
 #endif

Added: trunk/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,12 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+using namespace boost::multiprecision;
+
+cpp_bin_float<50> a;
+
+

Modified: trunk/libs/multiprecision/test/math/instances/Jamfile.v2
==============================================================================
--- trunk/libs/multiprecision/test/math/instances/Jamfile.v2 Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/math/instances/Jamfile.v2 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -68,13 +68,14 @@
 lib test_instances_mpf : [ generate_objs "_mpf" : 4 : <define>TEST_MPF_50 ] : [ check-target-builds ../../../config//has_gmp : : <build>no ] ;
 lib test_instances_mpfr : [ generate_objs "_mpfr" : 3 : <define>TEST_MPFR_50 ] : [ check-target-builds ../../../config//has_mpfr : : <build>no ] ;
 lib test_instances_cpp_dec_float : [ generate_objs "_cpp_dec_float" : 3 : <define>TEST_CPP_DEC_FLOAT ] : ;
+lib test_instances_cpp_bin_float : [ generate_objs "_cpp_bin_float" : 1 : <define>TEST_CPP_BIN_FLOAT ] : ;
 lib test_instances_float128 : [ generate_objs "_float128" : 1 : <define>TEST_FLOAT128 ] : [ check-target-builds ../../../config//has_float128 : : <build>no ] ;
 lib test_instances_intel_quad : [ generate_objs "_intel_quad" : 1 : <define>TEST_FLOAT128 <cxxflags>-Qoption,cpp,--extended_float_type ] : [ check-target-builds ../../../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] ;
 
 explicit test_instances_mpf ;
 explicit test_instances_mpfr ;
 explicit test_instances_cpp_dec_float ;
+explicit test_instances_cpp_bin_float ;
 explicit test_instances_float128 ;
 explicit test_instances_intel_quad ;
 
-

Modified: trunk/libs/multiprecision/test/math/setup.hpp
==============================================================================
--- trunk/libs/multiprecision/test/math/setup.hpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/math/setup.hpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -13,11 +13,12 @@
 #define BOOST_MATH_SMALL_CONSTANT(x) x
 
 #if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) \
- && !defined(TEST_MPFR_50) && !defined(TEST_FLOAT128)
+ && !defined(TEST_MPFR_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -91,6 +92,19 @@
 
 #endif
 
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+#define CPP_BIN_FLOAT_TESTS test(cpp_bin_float_quad(), "cpp_bin_float_quad");
+
+typedef boost::multiprecision::cpp_bin_float_quad test_type_1;
+
+#else
+
+#define CPP_BIN_FLOAT_TESTS
+
+#endif
+
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 
@@ -115,13 +129,15 @@
  MPF_TESTS\
  MPFR_TESTS\
  CPP_DEC_FLOAT_TESTS\
- FLOAT128_TESTS
+ FLOAT128_TESTS\
+ CPP_BIN_FLOAT_TESTS
 
 #define ALL_SMALL_TESTS\
  MPF_SMALL_TESTS\
  MPFR_TESTS\
  CPP_DEC_FLOAT_TESTS\
- FLOAT128_TESTS
+ FLOAT128_TESTS\
+ CPP_BIN_FLOAT_TESTS
 
 #endif
 

Added: trunk/libs/multiprecision/test/sincos.ipp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/sincos.ipp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,358 @@
+#ifndef SC_
+# define SC_(x) static_cast<T>(BOOST_STRINGIZE(x))
+#endif
+ static const boost::array<boost::array<T, 3>, 351> sincos = {{
+ { SC_(0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000e+00), SC_(1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00) },
+ { SC_(1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(1.401298464324817070923729583289916131280261941876515771757068283889791082685860601486638187903514573088003407877736749127664494621325844523483910406516043027094493792398807265124788313813027252641824109893777198916328247215059235389547187567873367817177385345898925178415973672792443259937580271594718874586198889274686938589158421274315966377854992176671528661648936800038685538329560092534042989790081315457088400330182637813264335055446415835627001733448046744999262934644928806919802756903393
65803e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999018181306940454689380845609002744871404956897500110086977690176562578949055656828707980423353194933884755560203023626611533678706648719853431695157198205786802969097792096779337651473648106366274410397508094269252694850980143248502445340096430658555215811691593841493933838124949891785030283170868447315870535323338409489664710335241993056422950940322493204196544853978533985277190092235175175166662055024795932e-01) },
+ { SC_(2.80259692864963414184745916657983226256052388375303154351413656777958216537172120297327637672424316406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(2.802596928649634141847459166579832262560523883753031543514136567779582165371721202973276373055387092516527263021893993021315956970606756187871283252128344216755950339190458120998307591149659977787977808345902160370287497343246043416710622621219841411709085062617952173283999950700516942071748526437476610074714910853881539503164540563371888947314161678343045417396578202997609024998445614105669383707332750874984665759353353884834189322143773172147247191427552031422405416305478742109710008520449
30167e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999996072725227761818757523382436010979485619827590000440347910760706250315796222627314831921695340715627621329535004694534216141863971398843021645158093032804874254958679377217097895883419963322632791960267614868367018464110751226843336329749526804502021446103686642277447920958483566966767779163022051468729743460838565621454431717928897730690691764161059400654765666575293764292473950159219386917758286295006197205e-01) },
+ { SC_(4.20389539297445121277118874986974839384078582562954731527120485166937324805758180445991456508636474609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(4.203895392974451212771188749869748393840785825629547315271204851669373248057581804459914552703975504626092012698892226446941354775797802134065580975933161731551332394767796158369294198760713431209715329893145492097816351411548798220772163036677020932399424998109936530834910713725814418259862320944729553402059712439757968840283199084714684092030924843060288489227232232692661296716495140611212654585539667016485999909354303869042127137216532076414896610379803968651258214477668657579666232020110
02481e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999991163631762464092204427610481024703842644612077500990782799211589063210541500911458371823821746369757456643806982812806123846003228662260328395521200223742443485215609381850897310524629291344568956530530262684105635460612822223837210330705593721872335387821404502143865865987389605653700871033897311375196441706482504472066650591798878127657289137553615069304296604544940870015086975449211081356049236357710750027e-01) },
+ { SC_(8.40779078594890242554237749973949678768157165125909463054240970333874649611516360891982913017272949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(8.407790785948902425542377499739496787681571651259094630542409703338746496115163608919829031113615560446236101591137811575530838206382417072524647807465293852410659158142369266954616186928102916450260433696514213420280079626025338747125969304010593911665957773531323513547363367041900500789108342005675007253875224018920794636436925761460691433957315781791239952467778074450283829913423020047684771789582297129642638847860537700039663694852610145897122847000490825251460410179743556501334935236666
04208e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999964654527049856368817710441924098815370578448310003963131196846356252842166003645833487295443148286288493466057531853473865963093643770093554970659404333489664430527782442632013409169209372509621725822822280428683194964710409099655027231809772830542963187159283687376144462766563252564386045904505129129380699890638470353691133935782709516334660181819672442049363705097682342862579067086527667395708957625728010687e-01) },
+ { SC_(1.54142831075729877801610254161890774440828813606416734893277511227877019095444666163530200719833374023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(1.541428310757298778016102541618907744408288136064167348932775112278770190954446661635301946157740849888253588526761308892144234098469906075708475107285326906277123768281246988110043738055549479454459406589825871658031013279256910220423408347939457306306517145516462677090276253142581202866186116281109798791202057144341117241866189838893160344142742931104355260577861136519964761631639565462187967938497554366590011755609889054370794890459571236052347323695558925881895531527778844008822214798237
02315e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999881199938139795017415082318689332129439999784597513320524300511364072052835734476273665633558539016419647248757611892421704225588717291067846471845751360789925288829565527986759623768975753575997773800645970067273825398960965781570222907333052180870307750101932061092875046215001474627990763755720004253005726220961181931360340566888859898469699692960128833946501406695399631850637468380933106599429434314849425374e-01) },
+ { SC_(3.22298646794707926312457804156680710194460246631598627504125705294651949017747938341926783323287963867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(3.222986467947079263124578041566807101944602466315986275041257052946519490177479383419267275245731857423746364842302663629390605767155031722873791608069551065870597211628799477358867485113288813123148260325851233732338737154095321598875030722823950829932192955876701176982058543469304057980974209363637314312384006206025313071132933353073698864739318722516690668386855194275249970657475327250086317937881816801321899387772404591483669701874523250850410549793895686895963479668041748429382476607565
50437e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999480617911371500530682467327162452036973222198777558236011198103401604264050442462386521688828475944132820270974357744852187719530274229740373520595807665539873553993080745823439955253622478543514458940785554677862703585578090996659264673716399020742597191730642633179383457364996748943881349656994930909983016269956721448068004898707766137974729184023442461006739874323489203375832554602730784179556189605934184419e-01) },
+ { SC_(7.42688186092153047589576679143655549578538829194553359031246190461589273823506118787918239831924438476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(7.426881860921530475895766791436555495785388291945533590312461904615892738235061187879175570715677340393335461381399987930696573912775512271412959088893774474695233095722921000193313596313343181745616096986347843570311553213014391483987354855980831562019127896994378804999524546622514672691282923231827203187812778986186151387132349607982016480440452280245178172202983334889252422028646921241912721738795338296138864853470720656359169385400968666971156288088888244275919904858265016183705457484037
79575e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999997242071291195737222470795315688710343776523925077809234320331705964284267897340031840718276442954050335356685171447220544117279261490357334686649206295189130909786729091199045220985992676527516309991379539048035055704301070927384372207584878961173246105601002640718234285492270478202155019800902822073363446671078460482683530262882597940421207717144002253386046652555081637431410126935539589794505731025710676379063e-01) },
+ { SC_(1.05097384824361280319279718746743709846019645640738682881780121291734331201439545111497864127159118652343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(1.050973848243612803192797187467437098460196456407386828817801212917343312014395451114976706523272207201876984201910382334586683718406583447747027489556520554895686682468149746269018228593057389952810660664481981140207513446496207099602080020641983849051172352741825835464412849414298263698901462286513986986597885391876604338946851922694710133589685685376256758025675719759228070998586056160524080371389098685354002319275886667959310212815638371695147774402788547262203185717995624036325732459821
36141e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999994477269851540057627767256550640439901652882548438119239249507243164506588438069661482394963882717005084354341383831108371223875714348110550375875361891735468092383465608580594392203699927961133554924574448443357107180124203598756077136385300580115685171857809418195803009471462689144883556767944584573067238540300397625512326425856193876988499074312589335443468863296988797494008557816054949653946346405265614466521e-01) },
+ { SC_(2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229941804556630538474390873615283058676693469747252667581976219916452164439165493459745197995796368718926761125266484440616308754323645814110346702564884081027094119870318426852298095216782871174338461209457145002672147294652337287582890153326635553569070381382478888016793473560086697038978401948247976660530475707873055576263924623964791473215950752207033660961934722134774564085145320681655529874548327845175984
69370e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999977909079406160230511069026202561759606611530193752476956998028972658026353752278645929640856627453437091647678270578093867348912670303473993915455915738774094895059219945425455712948260097287167402615818858938341377297396988942875681514508702249864150447882439620069730994781383325744667145025187907937825146056513256418433787478833229590937485750976313958959995857469736815601150524811999423397557967975094145663405e-01) },
+ { SC_(4.66632388620164084617601951235542071716327226644879751995103738535300430534391580295050516724586486816406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(4.666323886201640846176019512355420717163272266448797519951037385353004305343915802950335821852057891618454193986745478568519733791239304142445756964459120832802743886758280511124598552193076696609230333939591955524027013801430072120750195368665390958864561246941038129146925921868130951619497846657635470677991233071909320948522622917438542395894670682460000912366727839664324407965148653122229947287516523439058506832854523714390997636865184141404873388670241652003268529230498410932494447051987
93873e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999891127106945320080050752588736705376045224265406889707434869085988847817081832730078601216698537208723978870828429426132354223033640845300085418977379720396588632501949070635779461038749299328050727369251003094322938028991998378771012224015911587313333701442922100083787345533568931010184906661307603865664516617509537152983462675147192472775815030334087089321785263057861128893065942146589055914769708614295112037282e-01) },
+ { SC_(1.22333355935556530291641592621209678260766867525819826874392061183578761518475630509783513844013214111328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(1.223333559355565302916415926212096782607668675258198268743920611835787615184756305097530009487055334794188660273754676251291356876101611808971623291855959544028149707538250510919587135277223751748284316446198482849719256611410955113458364912366893348260106593716793307872920703146417139655407317072753048242223350381767683453882416949459004706029653168492611590101273047618575016118992005146517770479764371644227973448326784488930126840555906649775028888624320761113368709794495106382334564403920
92154e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999251727501277221791963134483143652946098988395334861400478220036573461731864838683206477730569359918994418110092459071692590420954258112913054863293511313821049032279840033133091972315123462424997068552908251488888835340014765762041910447767748264144555345710012367897821701950047391724289924099438289720106542049969731533631374438421776311556603444490337372131933655486205390154608413468747459621886432625215014782084e-01) },
+ { SC_(2.57838917435766341049966243325344568155568197305278902003300564235721559214198350673541426658630371093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(2.578389174357663410499662433253445681555681973052789020033005642357215592141983506732557372389663720518887992589637782479901527833762421113813033316101457257457723539454273573611454866955411843813213387421426697702694951028607566141472604967951078614589140540230779580248600255067046827822687218945291116992754259567957449324552340810189845324854025867655168843923640110346827878675946230245329225880910568362927820267842747138570159666080805069509808793055900874450730793816750982305750991388278
76112e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999996675954632777603396367790893839693036628622072176372710471667861770267289922831759275580067027867234722228430080471552582226415723987626237690981128512381741567675223648396297701756050725932395149173824330771267008371869876795254391227451236964243860781777838348733979424414018273387935180620881558052018364492093238348499691354984306857440378153948514582513764076650823260920930404915003875414931338093385440488610425e-01) },
+ { SC_(2.96094365511833847086184060949159278539519348318507782572268528385912855771522345094126649200916290283203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(2.960943655118338470861840609491592785395193483185077825722685283859128557715223450936939967393429326638048466510858201958984338486811123063439122749460909567032903653856020788922243423911813997803454064625746041195225924026595020725717816801230409172091546091091714572645080749937934515286262998611293514620014408973614048231669629902096159255743651372467549848708573246079336050531212699189181536141702512842861758579512814025877780879018426488392029376741782379861308133687573219329756103519785
31701e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999995616406335607226943052228668861576216757838002294669012925294791921129051796275883456903694979322501329971375447753971251773961247808436603020996111873404733070017197845470310705625912309526290295374073656496025387323329294558782671483807734805753414994834876374099993858561755751805408888198323439213097646998312370490782535190924653242809107848005183955596913373155062584166537545022162737405001739308072239264970136e-01) },
+ { SC_(7.55720261810373846349167364268251769599445265254004955708586925501764330892484622381743974983692169189453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(7.557202618103738463491673642682517695994452652540049557085869255017643308924846223745506124483737301914131933034310497940413046441234087930848207458110287935623333489164565192654653366964631229619962913236684382099241402738448640595389443182779762277626785176719755954795794530808978358054465251981081097530262086691759566009363901666681348975012915870950070746918431313332126825125790399864010278054803483508863602417516444969325100520722852820830997682975291831657226605970825135429814080567779
81617e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999971444344294463000450108045691914274072389027232540179319088194078035322752282849196194896756803855580175797043645074196213887410097135181896784101900962704236324186319009789568789941181425532234149392153366432424993544410950289613464726947532233749725913910743043679099530150918947846596008589510245917814356607023762433721080260938839286761529865612309642958368349089189032058662245374996383379270059613802426143510423e-01) },
+ { SC_(1.46589832353019113789331351707958126493228201739702314883506913177711045159767877521517220884561538696289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(1.465898323530191137893313517079581264932282017397023148835069131777110451597678775162672089084273938617215049073251719294727208657730062756386324263049335104099512619546562180262607764267556703725420257748794908683284774225226542823608964804618982643937285571225414813028968834382320502904925237871104954255403258549764986288673297224081913176231814189150190061607483356213527661254136754297346537919311350716300255877914820794956645661789022365220562789666900167354640453056290733871627334939809
06882e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999892557105253568753545217864104950667197665245189775644595497906778178128656691096078303466467187938459594167417463818916417117358473643785540714442073012942743717914732037748071998704147219159170063017358513712449206088197946521436940697640711296900126660913421258179104561251733958995998165062617805307831291519562109920870718679948001278826555255838735691382758937227438223290700605918762038729941060805254738926364578e-01) },
+ { SC_(4.29890342885567381017981761561680470754158758528877508459633408131710108346368315324070863425731658935546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(4.298903428855673810179817615616804707541587585288775084596334081317101083463683151916605489104876986405932765552875900682741260804957966006911598041025863796851777606626354371148929333604603024902978615387874854992967894027807658242156760918153812686450714331031445682244707314671362033687440721061844600777404798240071442851778786005379356391226988582203422659065289474893764134206582887150013102093842368774933294083642703885304864943923251500061154304111525393551708670020253053377726128598274
28934e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999075971465468646533180207192109630863406681770546873997223395847820009758339292966324975612532967466820309355879235997759431321194583616980614121361748306696010139554876844921925965078471560618240863429559876295366367257626963436982144381690256088162065634034183526734308381551083435025308855773105012914069158476743241978619938658527251068183076619854877720409206737387349288732114126976152205371577160652967630617123599e-01) },
+ { SC_(4.80379126555190540083363738447616148964186596294688371716040578400259281055539872795634437352418899536132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(4.803791265551905400833637384476161489641865962946883717160405784002592810555398726108773385013476012191752706766628690990336994152417623879766674045369279355890768316726325990898201246800090113227343197151186233208056610255108755847179539504959727010088628677408434260263562224308900161256766582015587095827916163844914662688863107432773653907447576606474718618573865397032517758173084018992306774446278695621857252830765820850605182008354949581955422515123780779096371162919845122662939185133385
03809e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999998846179473850361154371674922854129986084727096709142870280757393394130581463291168610112704406499060352403499469291720728306994847837600250563158304798680794177527403425268942921796278460653093888122873284053643989868791585401086238273954075339473301544992488839606468292179655865318731156652793808004127813501461466101819147627941309038766551940761100509140381914523658200325453837791357981873672885699155514487958255331e-01) },
+ { SC_(1.05528984751373323977124227458397004014453966318836649739481298323172386854906790176755748689174652099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(1.055289847513733239771242274583970040144539663188366497394812983231723868549067899808875047711873323641326361094872179292086794319075431588036280822688756783334964115129239066034724453343272997224851904439277427265219581365030637448535052024940399573872345559335932816446323954495380003374616476758279325778282865961803448144228728062320660660108154955427837414979031801293647831470901480241969004456027579516567296950805179911323364499935282571552619858964069814156842407946794898600638283423920
27328e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999994431816688672208233710305042314219151101272516933748775711167580922607168373864227965541361289251010654534999802989928735915119413129451470140853636658987643574157298081896981245127358297596889192754078582247331884307559147751318090642104769338421104440133007218078588778511425272289353063257890140890461661561004041429851910440417566678968240145321910415990690683553710637026739594965677666802372650596926643292041996638e-01) },
+ { SC_(2.01510923065301669250045085265839809426495508027668597525981690428203627063474812075583031401038169860839843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(2.015109230653016692500450852658398094264955080276685975259816904282036270634748107118023730325946999698106191168414049708614728872561663860487548347481133912681977638329550736289063927847953811559760460656121984363667102888214449730289466460234843665772702553825654306668908732197332280884284971414783076046781648515860018015337608987505585817108184832972838973586065262381890160067784247806802006572513368588638064863679938443729541641332506328831431149584496439143913969317178302041153917691455
46484e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999979696673942685035853850543073045777707954868946997951599446982788522244825490912223945146237649836813044005513754448276849194256842083656687070132896763547132020424839753567770743006368670904848300067578350340653279036966460909408461382429991769872604279825699445913799875847014991026905964403318089265513005878651764666517348099896382056900530127079726632856823997344435810758823451691867992445903154064288120383150987671e-01) },
+ { SC_(7.32504950151904601935173936261887729052525165662936718917887575242562162025627969796914840117096900939941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(7.325049501519046019351739362618877290525251656629367189178875752425621620256279042910112928377201445934311265973675159989891531984570159027500716951378359906856048922636218315155570602463071319848415192127103735477500635460142904196369437107201322802882443436503749979819430210529695388303443867920523721513849064229602520690397163883818038991415185713998347338570220537235109257214011606196496914464790640670280549897370147425545107603529697615380814031466056162935906117672777142605667858745995
15793e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999731718249001477877143168008532640917534029873632032252120957303589649904151885305973799269888934534909136198437925454757554860783321503630302312105520970158621889109299625562988285780953907400410390020639968947017260622162867366315832821549484018469877658751307945502656509972585482311806680315543936811858642849279465528279655411048214732456565842865876212846439566194454456637005298750822183817695104506210394947373953085e-01) },
+ { SC_(1.33966515396841864169329118502807575007816218088696097856787714955946640149608839465145138092339038848876953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(1.339665153968418641693291185028075750078162180886960978567877149559466401496087993934667699351600718270432649420416852428474481082844944273937619484928465099169860778752929230820774691843257217178575334027972705113066051634599873432622565692640073492443334441157640514132575296683042138353000755699723398813026183173932218327943733320990175929302690661158914869865774720257849281277134718856956811455726111644746229785139757032667201431318919466460925947458825056724575155558813273464830902581331
09813e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999102648637621386587238987552746272043013454101628689499407841187184948605476876334955279870868767750800059575163137784626164589056798852834142555490085645186899015547757002677276114759208540303733026521153564543719479878946956818853456708417790933960103537105155253735839010002786196075719602911681185910630157610492301675225607916036307950416287870173505934149096254870905146725805112841309456550280335897354832252188484699e-01) },
+ { SC_(2.67704619143998783156097669083538893686233753480866323642779027781619244352739883652247954159975051879882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(2.677046191439987831560976690835388936862337534808663236427790277816192443527395638979842991059021288553022518947101438019902776850860362888815371146727075334837275185554245273026083560363562179863561977927393662504145837368983403175586025136315299331746086252494959970429779554389619721343247085775399310883462318024312044074527802322617324896763149404257675186778526576133994474503949751344086143000347657244263882304943988635543388853182013484910631000489845651343163373551927982059047183734080
55959e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999996416711844448328010836543119598472240469572030882370560576310418964309618728328179940611074428491474999154941510527197897854270875982495690413621119770434170978547360806493132985478957649761646330066648315631863124058757356730994348799421077276380735378148156663760085371571182147899917776000626572381366357642100541978640426148495871453988769629317000167837866856830562597160012881170553619814677812429087684105533480604824e-01) },
+ { SC_(4.98065334862973353780613406637193167431914166341694440226118064331717501247442925205177743919193744659423828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(4.980653348629733537806134066371931674319141663416944402261180643317175012474408659617060821852623009073497480689684302893291421491123883243506971057350664448501177813089772143846322464955162038523645509232458752649111260548302854477946660519019563558728824366394186644674044501212858809350394066732410909242704609396318360240487622906402714730490674569272145327145267972513002234832028148692695673167849285145015110050748140119918800110427298773018647707114969559456305262924050503917158307416388
32339e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999987596546110391710994379711623068869451337606096342108625478131918320009488445778250750401876191182731266979269973303293901478710089771515180173918644613342792395295337150147962833559157614103818968508131256797025993480612649131131295014985392720460404345935117219910238516012744511524766168411644949909022868757584567938463480609599435179942543723898381721040096255576605436773910863929161497154264218514163673674788342460421e-01) },
+ { SC_(6.61322911799904004220047059873593201348655443749046971956789426212155666440217771651077782735228538513183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(6.613229117999040042200470598735932013486554437490469719567894262121556664402129511802670379892780113904466843218887163362230665172791321668984286547745346892112932089756979275107963901800891124349588353542419939470508848548028828071099105689646417432556962169000966063654586247872101520181067944078058711367535322833051540547978250920073393530969646417833287874288042173687589857963651337967477311801606593507169727907899787026788997308925317056685673997468538949771411210129961220090209441327228
07189e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999978132600316424819458871898582377151976877276609840945795779220166843198812911241921361184270437776491458291901247500946988256003349588053268643044761577809440194145005106845400574711621718945974528696979467351650861357365416040731658845738292066488483990916744859113297684359767658520832922218399521682790249135386599957375066859000568645217385839964246827971397420685997824501311319875532430117958365665071740834286896688200e-01) },
+ { SC_(1.54824254492961749846859045383652994857147779383512446982767538392966946703133146456821123138070106506347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(1.548242544929617498468590453836529948571477793835124469827675383929669467031269610859888451947650166772245731507592799909070051381722803443058227621298309747398618175635486075843361836143473382068291964468544994156009460915628863979489741531341479143598666061237229798087265878588096026617964139932865994435413181275418118366185621206199359331429379272833567189693400378034183849156636354210180502403900633991730572039771028650707963483926520968900202378292725974106827905256176121577661256162872
52744e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999880147251103493067079197906492851642489951807612675096101071372809763052176814238098234757914806141252740340867410432612444896212338592468868178773649165288944334267569037833785705287027561088840334981533388491347173126442412363399111551633509256874317164512773006907444197207798073824215723487854515014273420120927829877512313201892373536931918844370906211898732256730679347491689855151383360496535317453280786049708294692770e-01) },
+ { SC_(4.14655650189182261793630321328885828961460755538706729231614042880185722061980868602404370903968811035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(4.146556501891822617936303213288858289614607555387067292316140428801857220618620425929897539858666135115361617847325057285346119173896216758155658062164567337976352297536673771666509709905534314640738489214481675455366867614922347786899109561244688880480283520794251198954914321335766439289373491404756482091327642349157806016661683161291355790516793583508880918330667513956029476996239762284671395209695849388539235270812193697883434458658660876365519455291171940901709637554292997729573947070336
64947e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999140303458830932562495970891609851434141169762625227468703921261555172214042553364993994634622966419016883421920787233269568087911528717371496834529990991021120129680362470105835559303793013244274628533900046317008176792327455914771957236528289495804030764115202483608113943926547285214664218148302982221883326127385930775038463435090571400891500003663643560192259356160907398291267541063405411124424549800043463320847909557477e-01) },
+ { SC_(9.16989984771782597788130033192388394290674988675850299695759145456042116251182960695587098598480224609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(9.169899847717825977881300331923883942906749886758502996957591454560421162498978441152700719642910651870704514281622051177738939655564406914572161543108978063310751778131077201465019713234790676235843264571285423567810618970171247112953445046416046491645725046769026185421360269365161168750118688454105811540110410550050681655263125693713838359540641733762384553859386430297580298837255699388737040917877770110930037542526506608880471347723392682033549035432721327342041803049043820065084588343310
93434e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999995795646839141229597049600163486950487961160605966971207927639433117443286573917272952598730352586395213231378556612129809781665455673803791882078391445491798305436834690788293112765270306893834416062496422378540679879435567787167675258265803526815917323453636547446953905378952509733862550508155185660036566272965610345657669309817400942905631053083173596575938300954384335741012857888893148639864847391669179906074771423380675e-01) },
+ { SC_(1.40174284409382375691326091641536902948381353854352365243860788538397821323400194160058163106441497802734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(1.401742844093823756913260916415369029483813538543523652438607885383978213229411507123766912975052214338500321592364977182927532201632941572749807460572683086824024437700332577163458296850499889344166662056975889730598840174659809005040405510911516370723485598017094573715221760347112088385366634561120051398455643027528008515862551732062338294297504796320892867110325006091766068494905195694687270941885891805249089362300129729081416324336026844187921959485821587442082969951861306648492825595347
47283e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999990175584995158790521452395330292149934987246293181315818289498140837852990983340598997291574198506644414638962922288593792275112076522551276639205559930026303787875160133236787445628969231440689003816906777605687862518569148148349736607073003542934036846197242745708929670399344795068969975702827824659694309674652879251454493737996840612211561985346098039062629674466776090326736274135796172249813160074647258847047218550681667e-01) },
+ { SC_(1.94557624033383353951438702124371913986437597061599651205892247320811128119544264336582273244857788085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(1.945576240333833539514387021243719139864375970615996512058922473208111281183168434436677989118112762607829795736550434718114335609539373473815966362502703517573208244849223525243454950925887259179501834560961954793960952971498167237158875202394996609543449484958236204176941227477926757114648803838816472420037091938726702971665329919445891404234459055752815507072067726237477253836282001164417806149275327945563129833974641982825233283347493169874568408955299982612996468872192346623480635975703
61594e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999981073665465242325973499850572514928918968773433476252290727706213747142412896890402940728348529719295299594618859825128431836531924921078163936256958737028704143307321875801616577679750689234365062786505605378356205461533046996279728442748616071759347859462543457969102284480550870641847873336874142813399784209309858808036665885184827443870158113940056434388089580250524388193858351108489442281034092467002540157658438751846360e-01) },
+ { SC_(6.25778729623775298048262176417037819653492494267247379139395559947273151024660364782903343439102172851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(6.257787296237752980482621764170378196534924942672473791393955599472731509838179754016909628775073814859541496929810333276509916178348651045191841191300614281887380937749752779218996541001432629047318562814877536046015577534555461178501728913850556033216344001011813079655623702675108343017175557635280825164510606894869956935786691489039082709201187451033096282029983280940406235301908807680111654906342319063514331124531703525877986906434324357298163898052752663026542007770803021166999281864364
16280e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999804200490775226966111214503355373143794475289458519970663519021821882302293192082627747880642626873706396542685764556638857367505201946491497647523599633143848708648597649676052358311232218277829371003261111576758376332700582495048660141665559358151192500767632875806022243667932552701370660858833078445158658650315371959830990489689133490741796408732580215105542936306741728965736925282835297914658845693947125055548101972328355e-01) },
+ { SC_(1.08239073560602090995217585692806369173691892430234761217807120271122700572163921606261283159255981445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(1.082390735606020909952175856928063691736918924302347612178071202711227005510289850346721565368387750605378512111586343959355483062555885174998412234615895445581961816252290896452082300945158083940446104465320319348383220122977834635449717786521215666324440203326994649849674241065838368206274430792492184314964397632269436995936057109510865520421946840935716825063505667135995853621017370158192908894577683213753716191938373396824755584788237227917714529515245690871489886205422009069951100220698
39836e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999414215147737128469167864887720746679277344361554323001931299657738560350385993270574167093724891580864281120375306410266364949815767159380406106349373771695612577895176379716706515330135955237783460936144953034420281108932351416421393064032426483755702763946710102993202761795407302174421831510588548964721554672431413244801666849243141372241714766821101374200896460046332817068614637339045853629713469603736177193274739125474695e-01) },
+ { SC_(1.69406069903391450739476895874772531773020353068657868999386494068826181091935723088681697845458984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(1.694060699033914507394768958747725317730203530686578689993864940688261810109076238366339534195802566408645137748236288737079491045157272471093311004034138912903007095238544578487068581160295247090182320910565064352913727006593139076523895363180267686780595540605889006326711696911159799014374135222980324036095651335989963943113292935063727148353929759127182069362951661375695499963471756943985825968849161646477986256531709329749804547111187154001668907337222443687523145020427969028870819178694
23252e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999998565079173994362465396001931894411364393220606475206715927476216753773288096464547196783798237465369184337707326956679899579250402430116331781856535753325581983852597538161877588948904446302891805591165493406298635982122739131855419006169860034975915041849599506141381562127259826196852690691935014842448052582785680360758805244541197319297101970723393414590425744716094952004261652430364851834943964098519682976590628698821905236e-01) },
+ { SC_(4.15747613699065532685928122715139996054660257193228334398574664448888782430913124699145555496215820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(4.157476136990655326859281227151399960546602571932283343985746644488887812332407148825093377272501156530859905780823659347637466087965980278178174034014610476796757121706113808287839713918222610678028095364004573450244807136296556362000593063053445659981696407852905676578190694952095065138790926125491996757337938974044464259955812376417388042829664993035398954821619071548400247574958822762822396467809953406166708017371079260480218531774420904056744463829673080570298280894511824239129060804463
01645e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999991357696085176628871090559479687924742457625998376218971921267372616718383844949588137456909796500905937687155045180713696605882356605141845708585115529311992066558444828324343695453901931401333937064875027623092193879640543740281736662900057499119419568523976952025817917330364180443654367979292006373325784480983727857210671247058000389980104063249629948415515037996578331323999224928160405646611251354255937726429113087375434086e-01) },
+ { SC_(7.28367983015663846905417378314883240316980135196070300998300722783440619423345196992158889770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(7.283679830156638469054173783148832403169801351960703009983007227834406129831164783210672692695523080774939782898892026932670627920282172626795947996584028315345244888501051009447727640633698762058245316563666877051052230618892026776010087702504367376573074046630675986945051370703632433548655732839151902171346601618686860594323394371772990322225609919404238321598924248974263220853728985079713926636869852461635806374519548495209957350879060768869492818062489231151760512664272235253874449748221
88331e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999973474004065884681092335767433370237858027851321456659743937462071520016274972595345712838831068927056324434283196754695183381625754321780334336941984724512744537129286325405215594299982932720024848636604144040397744749234633858822500707447887371424947606546560076781166070773896632315222333445267419206441770719310077458761071140435155108660069240335296609374518753267631061279679348531496176734798021898607900054696705595585834697e-01) },
+ { SC_(2.12516349467652166437607482766014955572619379291278811395257773014799695943111146334558725357055664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(2.125163494676521664376074827660149555726193792912788113952577730147996799465809174056067375299049736227595083844320231828923350449234930075329387760760216753577522062571082879561695747649847782040260488222744470507333689443712305500450176551240339418207254144671026770987247359862829715463163601849579162408265964036613889998672397761633710971099478792947028304242034363192132209830228083499760760394860468691379748266501759303490654347341163735866472767655629855835628324431192532443613408832404
41062e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999774184006044713683773900470805922150932250054980379582662128503096057808845185235527786487472856932618201965360896707252655627980442148963128043654276596608302237896826278499952875156492510369808863542269935941777674888168571205797103443085578125711094779798379963949265068579368931957701357361326476145671210315141516694776450386623526577296405590662971296035440956921410316901837494666387892421775940274748625097808888274273886927e-01) },
+ { SC_(2.53071076762576381696050568408073626122257552718503248673567740389955815771827474236488342285156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(2.530710767625763816960505684080736261222575527185032486735677403899557887586116538312927697890201664830107599702221365563851081518650597944576356719295910063892563869123622049851903613678496539146923492496603533445073471245494183828829662308130068343375988762729067541080252158941803956236512460828638910380372582200966505403939609547456085636496026444625175621497957806311179518145929506320762541251003789443786126166484491084758670338520636706622614490784437520155767175599485788472879123674501
88387e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999679775150531150862612324087422368961581536597039422383152126708901047347940304146276116283666506430133777448923147529348926857835369585229245501288249005852911543348998007660604853568806160045133561007206980521854122283010742632980337999371272670810643167591287325720576566145125174718484145644918457200064131979165887596637731687390351612705444505957008226887752046771682765148512429504692651191887187474974604465117914715417737883e-01) },
+ { SC_(8.64357296960196048049463886033217008510050159920791504997812301769322118616400985047221183776855468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(8.643572969601960480494638860332170085100501599207915049978123017693210423280056550043806524662520008053537369751776273056891028972636894584605584839051845388235112766146138790379745422945577636428453324038877101556383104710479958394869300323539114691318575191619731912639196621248635920374550998411214344532632045237571176963071254055563927076060832293170211246068537972805951407798479226796838606216335335804700060845708693285670235114272904957770065468627418885936756787537347067270917659084972
26790e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999996264432315958317318170910958737722004540033486380110083998546410044791571639359001045000390165257415777237093860585996520548881515148587137444154873492144978975716761135704715068314007809110467706034696558926322998865776056244797839299023107292117589896179835013332775610172777676182558538012867578344415855072459321045720088178567198565080237600962243652912204402124151596300356253263256122139223449122695528077428547738849446992392e-01) },
+ { SC_(9.98056233630547948377202558654806807390245378474739594717134172352501764180487953126430511474609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(9.980562336305479483772025586548068073902453784747395947171341723525001072137742352115203660877539933266653120838887827518428974842628168523012033034610186816539193019071682385959585546383074711176201237555389579533331512056354147733288410232421297826579059306234015448101009240357062840914024118736950416204478241595450926221982221374896827143604610365415878820034366232066490002908672270712178549570749128049620129411759889554338886610106764385571592480284935826689257123398407734295434199544180
16701e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999995019418772556025452179753936296723190620561787496251708691401075923962934222261393282794216532984558739824698172829691185955595995089041577202174812312947856501006713170529287477350411350868128826538380042853030454395774427817996996972615435833753547763126950693322514112229274794236400050824445172812668516611850872983573938547300630346487402262543251741159012770284460576903327602326016046183371595735415925160127128817835623068688e-01) },
+ { SC_(2.28583325383040341115984344956726956942648839173021717936437613438727112225024029612541198730468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-34), SC_(2.285833253830403411159843449567269569426488391730217179364376134387251216324069831339977798563712354698009604840946884462117074943088237237025111299545668033225211447742718495385579313093485057551771989913924793946889911522397588249650099507719603664760228561240522334996902268253524946989180493731605068618710326821548723408114458778529854205574228132304948671828810637931478260946229983660888208774957921246263341087201593462793526398300146342338196586891958104264005244164870751065770817629598
04327e-34), SC_(9.99999999999999999999999999999999999999999999999999999999999999999973874831678415552645214136320719547515304986065715399671015948522117357521386822474945821385174233689548253591575756766508400490826265582618706311906049075954729995626366958081761228787732882417823878421236061267588485487036165146284349698162478575358442590632990892375447104360565217621089582310412890703562600854348719569212910573217175396813750336931826089876644954945470721952677819309500120155038935270482632452051218728106534190e-01) },
+ { SC_(5.42623437031930140219487755133755705879730231824934987938484354241808205188135616481304168701171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-34), SC_(5.426234370319301402194877551337557058797302318249349879384843542417815768297531920015045426705781685143225743463624118386975582940556980602566434910446268647060232293515092924629262245297019799800926363529651511568557354935396972291261835252446732544445949327438133407132779816732834786269605303867526182744604080120861204503813923479583983263304496083983792193700834832683511336884769995105932962892387286482710615508007143343726312887747323783609556807656708901453298638793537732687614845009416
80668e-34), SC_(9.99999999999999999999999999999999999999999999999999999999999999999852779902791827473069699853002689009383385697232980632967935862458237014302008822313290073227392761021824999598806655046675355022913174279103879824846548509249049870612992964381556241095616833742905956965264034731825567461408179336671461735669309570725949353784032168729737514901374614918492020733323657326776972378228052939461852740662884848942182183850537408756939752311876936201545716136909239650842326963967558877840074472028373156e-01) },
+ { SC_(1.14767260359023175444419398476720241433534365304121115753874238230025639495579525828361511230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(1.147672603590231754444193984767202414335343653041211157538742382300004451667460636565155598410892891056076865398259788615945441598953365969644221347716401375725535670782431388885308435801522337796367546506622438243705340984750254205473839324216837769410311646474821027750657758919986108421661791912923382754651363147331062999020481874444110044045580406590673902161801141896079208893470762807049142515794879429835499276414056885449150351998701678626550690555882516739222375883021017828195114919107
35654e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999999341423797484209381329588309288146803267822324076796870775252179426174205035478581780473549580911343948996844459479379323793574583702208105912195692041827294007298447777379983852214659915146476246650306684196241377878426909383663765219628801085832023184448671086794319720603937760883119648546708413620967469776165374332966612650640592032647489688329087738368543536541785457409887376144297548884705846677582389852083943727803618460003560e-01) },
+ { SC_(2.24638807152062302597056753414010558790018579564078381747074808494346598308766260743141174316406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(2.246388071520623025970567534140105587900185795640783817470748084941576673612698825694416730606519154376642673833508108464193647771114209504456741413526578926530298648144649287124803458820961551997662820541600372612907936182095672238224742050251024443328107731062500601321782432008764935098406939098900223052665158634539840429744491334896863224105707094265723921593038582705640179742659421925147782396747711683439753986535781552731926824393796566762102389045880265962393072007917919030876701753974
47691e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999997476870316064928124336269726622406446098767475833498791397615072417963776006183762747986076321718823234433302205664070428488474365161284533503805124055838617058588428710575226216649561390342676237713905134207296393773422163114041458550176660590328481590273828588141315198970622646050350164026489967133824488059763316031263167042511671805434119993909381688766722661327619081391469360750198917897989810671842667975179843263514510070805364e-01) },
+ { SC_(4.45455641359219790147891656069310138539319495403506917428904099409692207700572907924652099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(4.454556413592197901478916560693101385393194954035069174289040994082190062440203553410199234164586916467917833829682217039424371108472362984900171651193472095479532483713963731348881301089638269108970091325129358680744030928481181186643487600033738017957673455598978773382935458836781734358909646913950095060693090035431662406672538401981088594446363055605599665489860233148559399710705739454987371108515204990217495517230153544117113725455510984652733293305330030460292814298367588054003098197734
73594e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999990078463579062307755526600873014625216226284609280745739844840338725476993691131021921643887307732286631053281933853188844559271647726836118909431359129252865878843629812349803224098882677865802701318090937633055526915899392674220081478796481818247514342288829051175946144134849997283314619395790196378587070000606077549331566177326361432397781171544675801887712953061428639817708889966799537670086563002303589097210837017109439496973892e-01) },
+ { SC_(9.16785088874388950633683172059419126693105638377124253293737332626278657699003815650939941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(9.167850888743889506336831720594191266931056383771242532937373326134361045182467049213692299284007605273556422899468519967791467373502557336336619642905122254350432345563994874442908021656984622564212770147980597693109836406594377130921878757969594322701581501077177865625658375378192056473727881333544457670033512229395496900953198172214586197103686071024047254170147931887967079253808680016353676749530891715507916691531857951463522563583896582930751512234264326910168550454143460088824869470946
40909e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999957975255040878937656479309884424948105529598925238666019539098203884358858925757483714325117607223046140184112647307315076184737530446206798662621567798660251616524997044561301533332545638798527755946852445727867891941468188937777228366606532547501859733408033893918556168750942201731744749872794943260463802390118755564820664666033161746287816363441616184896748936552044324961750117806166223424101518916285648897331999217064683807662234e-01) },
+ { SC_(2.02923708991490176840630238442216715768751725200674633498021393052113126032054424285888671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(2.029237089914901768406302384422167157687517252006746334980213930381864611726868115419956229386995021319703394377512503392386258159570204972408620682157405835174966402483301641434895589828628062341627660648495338482154360802429133579316659965878570219417521580585086845635204366029159241758119916145999757958356964226541610324684377099400609883668276983006100828198922900922777299205153754369260784079089324724375737153349085801316644477856189659454576683939333484540416253870665891866153967516221
14360e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999999794109841645685043783972015726491288792978131514713708274780330025533629205662944646785839549634108447687840508965230119113963615379532190188313923611545568771941825154090178302130626216188195315323190824517446123383168919123080013332622969893566616492877927920852006877324669233583154264978656000830597138317838869261407433049633324695624794836488665265011978772645136673545407262195618625203203879355393108059137267873193617971618206698e-01) },
+ { SC_(4.42248951544894130940528341232594713442514066697910501274604300192549999337643384933471679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(4.422489515448941309405283412325947134425140666979105012746043000483885348282913682480006552770141276178176533987625816386184712908868028837264838634689499450595933812632425333919337944145250270702597901074072245597657754679015392749393029932313128842567504894229701987861594873868165267474869264565109266128949869974216189223941292446734159398238110668903689943922672772087622398118550126663418190775993525729973781411940702538498747663097844413446045494249036841385142796942749518810617029274515
33603e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999999022079324287209415370398907373981182933279508453789790467938655245533487930528343294733428329788530035987276746814790251459059570475803121922243235079973116073514685919176080150643624530110566284954847483072464101496311828806947357045503519156870663380634223091627304382316385761985476332723633210730619607992350388299054957290493063137783934349241860638349612314464275086378115025201466548731296891098091234203131949150016181066415051698e-01) },
+ { SC_(8.42781959567806922798262160232246372270599330117093160585906019832691526971757411956787109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(8.427819595678069227982621602322463722705993301170931605859060188350042326765512161430036058358447721478044823412930604888096568550039821707350148270473574336883759566093593881890927851864175322685777242079984747934220627706900919171946309210252601308567478657672014762283811500456324909224959731001979650546638020887991187774123361951125635483317380712705454294770786839728018122597415375980804824682635475981921556532922068101060557568839303405504455883462084769696641765585888703712960081884047
10029e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999996448592843135237286091165040150796849379871624458670791989980554559338381716042829887191705426916341372304104795261882687098993621618405551393901151195570801163017101515947641613510338321872649883018859071285949307351409094849353881167676920664229923088157852833707315319923101074787754717513588395159959367332602241142957127421028949816954472640924253155665536273295336649713952163746432483241108913079712957120243617036879037622622538037e-01) },
+ { SC_(1.89412859041783001573039493180153157286866659770869884826804963040558504872024059295654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(1.894128590417830015730394931801531572868666597708698848268049619079570164578412779541709976631489475710365310470644316428058963300349307594169561996949785728150710586667316512547681055258684773100325961082856637124914864744918964665390214512981262097864624427878632723068099274927740706015779994346545257576370790974883117279008881555258740314265024213625894006180041067622101980783729385170868827654330144056331129104903539954978809553902320071035522630775177531582224000472312186224317380267252
72418e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999982061384414808821713576182666609878039644939897865544835638329686226491649739125933554321013717333433543099378073396608435514337600944379023047880002410158175418957761934774609458632133813775338538191876152234049430980809741103774734281423982888311235989789454329730656135971743728618766288067162172679182963181306945338676336790805660620388426574235413302344008441196805499833894731982742214073379793623068582638800144759140434822835913240e-01) },
+ { SC_(3.46050866712583180197896586726244593923755962967554050679908073107071686536073684692382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(3.460508667125831801978965867262445939237559629675540506799080662004037925415837249628514955608673435288890547084428838954373800695080425462631210058998182286530026968956070353754457285248059977401540691843083713955734137898307006354713248146521450152590540501692792640958360390559794035612008326288626824510617319215718197997379721480419010068379716485296115644128616966788538961810779264086375640588331531199201482145228713421046513857970730978651502119680775927272693491076219097415179605445903
82880e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999940124398823734995141596440434464974244751219327466265222844766372889104327611054096738756247812175767192010639298145667851662065738236651240834717361592738914549129079886068280561353392857420537536300576737568342768883135775136819101106849626431205672726699464031722219512428433261205505914094665663811986532588686230507896059311487599466477815387106085624087151762903302249300390003946296093093177327727085105725378839624124939177394646318e-01) },
+ { SC_(7.12945223095754899355092259734822137087975601614812590223202448669326258823275566101074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(7.129452230957548993550922597348221370879756016148125902232023882720657958528805305284352992963175445569957606017736382833253799119399035718369006442910574340791920408981459634643405955816668256702404855047662124357300891567189523567966199976200390456595793027296350355674553055791461787932971093270807007925256916523780105356592706346556340130271604893096300696972353588534541203031449728280274272547576129606928043147353671849262391354719394733779978395604180952842413612946252011020796990969905
72732e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999745854554432472137421356692322531386578841747106553826521261980051976928390485982266924922342534221178591468128649396587806039752619666583832562943361036177992729075795731069740929600978682292406399805423201293360461699738011150346793081043613496064788228338205920715197760196407916778244101828803632524670630307241142534473468033170125491021690127096505836902793573414646811153356864292269712182133970687352333716996429072607598331767709150e-01) },
+ { SC_(1.00660609334360197519983437147660781896478392508868099364249815153016243129968643188476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(1.006606093343601975199834371476607818964783925088680993642497981538580809364254486005916219731155606278550280657993334098971402001488852656799924675348527398507472222488486658622991070733997153006870997108499761582064228693501059773084515595067403227001592097422722482625928207124856428265746237758588994783367611277480475381486869333861408020628521765079970905967414784012669095608614592657291758398053665723718764998411162465305664315979417961520441878755781500976046305663179517127234366893045
68110e-30), SC_(9.99999999999999999999999999999999999999999999999999999999999493372086421765833637980670400207365226394547668810490027357326776425074585947177784858615439332893124808170043124363608559227850238712400015608276209944227241371157871528353635158551830209899099887818354190139598879685295083420474600602830379027159206760470992231414350386011266309174227316415267053139521691420556930484870500945966743591236097202666761572417847833809770025888795274828592890925562550291716301144729756151134542208118283223e-01) },
+ { SC_(2.69123732824149938499603597762300694489537414332350206969124428724171593785285949707031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(2.691237328241499384996035977623006944895374143323502069691241038578107674958284897370542072514108086811227317396194677126019065272100492954642959604672776929773127066959556701990372022294356712534763708791842472069490977642102531252220137459666902477402739591010020781010523207021538948898590440283232938722072819212555751417405763110423379484176047609561032134673964108268883726136680178984579884377851653243222636681280764273217158422537747743802076189714738861249957523356619903221880816826371
37051e-30), SC_(9.99999999999999999999999999999999999999999999999999999999996378620821539778048380463868513259194760492255182104854568796688266675419704926830251200252632342648903096548444973065272476104135551570767481529019631860487682694750175649684483265805174607079594632937085836760739509644610706339030789270993126743782828796190161346910749433340546847615059025085175720807259788804205543021767204242455348546537131091713872864499858332506952229596524693375212327814887803800604671074080458111672965192708371657e-01) },
+ { SC_(5.30020735520228274850637769744228460379981918842995369800519256386905908584594726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(5.300207355202282748506377697442284603799819188429953698005167748123307995088726206173260991810252418963264764126249583504389758152872289708773660596269720505984860442181798424601888719933075557354779101661547018439902301478111480756052050911497341241438790747626876421214852515304636840003976807843739091212871802209394497688356640185630159589019559395559185949594238102522785272450003304371756712790821826379111853881069027427273263458385439272607078062078624305872270200398931019423698419310046
49392e-30), SC_(9.99999999999999999999999999999999999999999999999999999999985953900995929811476056422508436791230644190302525234876496203862361441479979240671670817582863831522397601477746273094063148971169325819181895476334047231053156486905486717389993270360728698723956084136276022973880242228876164041350147859316688277903051550256604857765735403446100822161708518544520756766090021113367159495627025122118690418451701542634453971356787032615030419972024177419316747536463094706047989637284849247688069026501348549e-01) },
+ { SC_(6.32867200109829532437439231857584752559277676327992301352765025512780994176864624023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(6.328672001098295324374392318575847525592776763279923013527608009038456194237371963573253047478797452528739253586929005331400875840920610567768809984180784367713667921721306156944412245538695161106962851133084493644588065038154780800223396177313357652796402309910435615672394173915398777668045931985439498551727452304226566386789978745895933840749346876007732108942883034738808802548869599584234052537489551618663788200045890563635590438429615560341213260867809783286768467762572441244231690296342
34790e-30), SC_(9.99999999999999999999999999999999999999999999999999999999979973955351257249132297739506642628067608253815179906562758766893326508515403412089617957779132649053803366485188789846458854195389563078655816683639618659725133411639581407050701846126217909940232813138092643766517480225563453507972750436168378046481952469724013530977441367994976024552595817659400560646993221229292530320553163338423431159999401088147155330538375065693349415455291381281036874541221154864146711221686283124563061261693337961e-01) },
+ { SC_(2.08902732172766892127202343465273188850850078629450834455383301246911287307739257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(2.089027321727668921272023434652731888508500786294508344553681069324725180034425334447380137329721725241705048677134812955746999844881794975955569549822811591914266006117724579072800944724444465269060977673184616941062050230575159921530191900530748469133073196728783696743377033919268530063617565919414593223928372277268607346777964784095870688634672273365407968513208370424131204946892181879606556107924069082603603007817844601112269391541537682036344706113317530150402537276231011168310428562831
18737e-29), SC_(9.99999999999999999999999999999999999999999999999999999999781798242453766122205539394256558981790035011916738210146764717850083017498869117986917334140105874547601883683652419246819349707324007233935785604229116661629866992858972496907635417802504686787088280017984569335880144104083641246079269870478846963689107325438580421100904625789353960763259740089364026058421956654839479843921798486264811522911491001083265611400386002109215984073917186677818137057726212767013088500337178286110333927786429660e-01) },
+ { SC_(4.31842364003957104364921550167833797346950293859213498848248491412959992885589599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(4.318423640039571043649215501678337973469502938592134988481142691725930772986963978993847988384698926047074880110545988482838935369026785912365461028660408615845294104836787278428078474332768338550577608913184165032060220973033436798912255380571592447883698599281952641086406598767409644933978659724093048167911672313733481769155447772815517425577686159550199057038348579595206630775761400205950517890499761677631235267549995039681714246260649163655893097587792410639727118283807720137554861832589
00870e-29), SC_(9.99999999999999999999999999999999999999999999999999999999067560863257369066964497297635006156021568522300783335967250349740344844534901319880357791301580333260447029645502188247052834316118747766647184283669573773641111448016551204104749489651931198788083105585218464325948673207669756192754134996490766498322067651248143532506188091467780057358394263396564140986264242252659898448085877812703282546394684396353711386913629178399462666156391453909336437084126881865332207056585053550245704827076211059e-01) },
+ { SC_(5.86968798787057500194131613525764999377749863741782210269093411625362932682037353515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(5.869687987870575001941316135257649993777498637417822102687563620390260933471066817009630052042983165407992637121608132950238967889232100381312317293599101240247651520927818488167438357909827933226922540189951504894592446985435245316699603644128393534646491042493743404243066273057380837224401411333945628582854155613094017810034685388637990329632873559622863308166532826159034190036468713051208171642230245871311783610201509025376551631241179092097536515813530152554782974860675619868684841833835
69950e-29), SC_(9.99999999999999999999999999999999999999999999999999999998277338146252394028444360458490634338533730868520104582523076964233154042946023028494376942979900160655182099281740037312428247080456080860951235873560774799992734471072154703739778110386566354490103567627438668795477210527514123549952245254446118613994019388628262616959375892007364702781185996020488769149346311118578328013836346363736051454653074172300840059947623326863459329086865473983250909431232338050346477348291583646141405082621767203e-01) },
+ { SC_(1.65997635243685806687162489251543212019385665351167702397106040734797716140747070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(1.659976352436858066871624892515432120193856653511677023963436906492794066222081856857723716420426355556575833823785674962993675804356650078166994120639908990323796929045561990319120370971508171511547623309704042854368679653855502881644806441184055265195918677467978804591624360060072663076118935624686236091190992575810693567471544768955430246564802808956959124720105715995992510322316546522015718962909953213113025627918141347621671322812520466329372150188760553694351699107534436005017864047835
49568e-28), SC_(9.99999999999999999999999999999999999999999999999999999986222392546752119877172455733144343422153617716843213233849865061714702604533008336989045404338076431604109019139656871515896458952331043568257115104563145716224299069433954165917783579195574952398453239275963477090613342763588712548617716508144008331395635254149169622982507056455120676580525624478841644805727152863309836112876912207670086636480279108601885879827013844946332071421481944537385339435290404473361071594632126459317753099739416686e-01) },
+ { SC_(2.25979760396654073712664394284379480891595572134011860043756314553320407867431640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(2.259797603966540737126643942843794808915955721340118600418329687193558768698350443652174552037665876790529243639458853301387811756990043568863264613158785085746078015354293696216623298676390126591701246268419445427066930244568950045714673688596134746539676376219668402692799435794697681475378319577603692968971326119029674564882204257787439507378211923367481722969516916085781780314345689174719927638817261966476059405773272346786637600314338530573190014823007251596091611912407322099722488400975
45236e-28), SC_(9.99999999999999999999999999999999999999999999999999999974466573945535407540722564122644653730270335778455508418466529045718513922718886100912534895818253373538618832955035269339985226660671223323808402289012470979235802920473617365901795722590739424739236939849121464098738027239360011902586924503160858852829389284193017042389742359089925155636590521137424815290123425666004266451656277708781560088189215777182758042202386192993769288859261071925760207238131324480206028779549590623894468388349431566e-01) },
+ { SC_(5.88086945564520119649519587919781243555710122106194859270544839091598987579345703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(5.880869455645201196495195879197812435557101221061948592366468944153575510591413970234584178330625773590295648441620332046095903058354230565454988671211761266327932467932683859452816141185489440153605001606153756059648901790736303754494905958050261032756798299331638469466162062453642802592480111749627583115051595625222287392104374000348540526493772480214743728458183540133189941927525705294974716378318837816365913637674996596210544846523636323721610106557182234008806723514413573023271847787361
80752e-28), SC_(9.99999999999999999999999999999999999999999999999999999827076872228296574784938072078042987632777779373212220013320421186320701890213115370714655904269996795936752835087158978849132030314481520851372148162220392252024392951130066198535869599322556283299011074244533964223971169725705069975036856966893929235747080621358676048032547928046779776545537078204166025672077226387013907373034921452470080143973339745452949777298353904218157467268717719840861266286404603250029803805345314117460010988128655782e-01) },
+ { SC_(1.21036877729163561187004806421015787165206423897645393594757479149848222732543945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(1.210368777291635611870048064210157871652064238976453935652044579129117012648165712447945353179592181342250141699585525237367884091141222974368681812268152790344128813211696422238756740977096478558276043750318243582419441443664455739294164704390053955031179735037342194185347283014536261810573039581033517248778511682032641422509908944138617720492422265039215062250255374678214762240634528006606790375570870177056641552771095873723104796165654582460512678773465095916477547105062552965683931633961
73146e-27), SC_(9.99999999999999999999999999999999999999999999999999999267503711478775496588677576535325086227779597221002886707252402490327884747951115784517104936932808165900808724915631123641727203222861050150147651933871354484108448566090657978758580039215062735042774308027967501555759664924302333070164047939619478223553520745268511199171340924464150362396855520866386718959618607407989478385259566952042271426836234189920618059223328393025465752381963814589296901671905473668692059934918608470334521245869322388e-01) },
+ { SC_(2.86591780197233630096266787463117576092606550441921342553541762754321098327636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(2.865917801972336300962667874631175760926065504419213421612222220685808009666825441375669439165292022445650268491659176891153399686346079934033607699265592003697557746629375252675630597912872937375229186280915638028932241632191020226517702992192301867919568032482996326919910936293141996843333478971028305482372983150103110447301954851930849238924243387819648742353261603412268432989538152338390057379138470630120777679687056243208026250553330014291405285314018766188170932860231281733135115187831
22757e-27), SC_(9.99999999999999999999999999999999999999999999999999995893257576169026285539877760558795157391162603540944407935916752527193049445428999402129117183211740466656201917911860186104101449147091696064423853526679157666560883407610819215488170224094967395802687764835506335828313831539244774700666124123869631956899323558688233804969117908091547146856294231360568401947557943242277643217697037895388293183516766769220683181080990896035663431905961308406527737489186974575173159921544827293300371415469682081e-01) },
+ { SC_(6.33227430861452581999484454611910693827255339205528628099273191764950752258300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(6.332274308614525819994844546119106938272553392055286238674461522568416314694122916334175469318891606514960543336109862841021106679464859504326165826763124113550585767178397396825181593459231856345014176648438807185779054919065397059311827253756259193729752029963615705144617766344084333389663397979774482971184747822182119571900561845222732807481448578739676372594180483954303042999893250851622052488681759095722863277971378770603548560082370808350873568773570822570808569180511140082654556550194
87099e-27), SC_(9.99999999999999999999999999999999999999999999999999979951151040230214506255192196435889986395782955668070169865274515021265153938340100074828753410630959573723255540421525879853083440370617587321442949822080689241095717596747689845651905140383728830851240780714315821784210013927509314368353073945711513577750238180546786612592987994333639727450312140879771130424423234759366739932350666350848077167008448715281548827725389679678867019894421671713832098020861648755429255119400453235121566672119643836e-01) },
+ { SC_(1.01701488645048351742362491418610868671324604095573818085540551692247390747070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(1.017014886450483517423624914186108686713246040955738163323437111054525740919574924648816098741553107668636927444628325767243332015411540723467667656993823304554493286700008246934753307294768506485046221163574283936389243486843342027346145901508646249727471900597771146828844954791075476838369643898766822635458012184067976967551740026666750108458684562466706537545936404444300313025458948541865129367067154459701118513943069524038433920183340176303808817011359958984497455562069872722548604588277
23014e-26), SC_(9.99999999999999999999999999999999999999999999999999948284036036905505878106539445707420537760789527302038597212359467142829365208706753583480314769727080472930841251769546963351409456940449361362239231140121358175313406601933249214221483709738384955034161941181642229311966635264585411192939606100913693988068970849472839854304825457917976633971331888622416264553414786998678093087237386348505398600997287141943187035373529035889477280544420651863692708964270806259470409468261873182906215372422322967e-01) },
+ { SC_(1.73240757319454876321712945561046080415745773706248655798844993114471435546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(1.732407573194548763217129455610460804157457737062486471332383685173726696019903307995564025276379517412691693842931288720461976156175402266678343564239332051071884273266806101335481859196268645939145656213954095025761313289171839208090078748261371247334970235707967647120553520743515714743722896010750754594996742051183430758306735412265959099025744369761399786490841179062015880215951067762452271504607135359702766710051896061396925785454943856089276349201885401936182668757672230769368840453017
99348e-26), SC_(9.99999999999999999999999999999999999999999999999999849938200016908708476593647714441301333449917232983935589882430679475416544954876348553925397810778869587095531333583024361182841302517003625488202943023609471017988004115329958801794805283413883069329219120736694877350703706015755371121018859116819175362600531729848030448359027909259268091751758805481267322816409703379926304051989443909674842437962170262660244896591208386339631691590295468623127273625017019234604902092688257738783189975410798798e-01) },
+ { SC_(4.85130351485873938948550752347723088770022059623698851282824762165546417236328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(4.851303514858739389485507523477230887700220596236986609892655794058453966589766374424381250951761819510064344412170664886471452394341030502090209972176698614069424991048083844885640176300821192576642388771918689924909548375148079289871582628792974035833331298607685345057949674306773132067715928682449517478510271620989972963736437049281561390187241307126764178460502950719199435339775767065420660292757539069333891639396808119221158739155977631490857355507612920881644472269549700218993067326697
14194e-26), SC_(9.99999999999999999999999999999999999999999999999998823242710335962048381002602975450120082698125730821275809015238732858397978522600912421317625034506185283381041247245315231181192704687177080652677909957736806277323440788586701520356870644612503456121454600655994784709816767064317307696249210126595367499329958169688760532631401384290402120831004217069063591636817019515117344034470106663201743497588043798600260081810421172904526658043913027664092737590681657820960431067605822773898751239148465316e-01) },
+ { SC_(8.19564111209312229576920614539122222344177948194499094825005158782005310058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(8.195641112093122295769206145391222223441779481944981773430177483832004918099182430483946589851463098013420701727981293170607321004718690819246380038436248416592911473650059795731254128832694969388885831342078448829069672967030104545423139982956726516310670771187557159166794895867844690544180264345941240396870916706104351992003047124254574300480652977967558992357636222847568496284196605238254863594347295274549086155112578961482816352394547001996390163498211937595490822368599110410719079433242
37564e-26), SC_(9.99999999999999999999999999999999999999999999999996641573338088450481234573457024398606724972860597787690528561595250368010475731147865565852358362282402377731027222818029922533458270416761219423731258201786579933778187649172980926082987949990044126602969665006020738715662221823288423516963711294782279533044098884502137714956876894483635745762291452505629096708868676483888239131082349750859024725134237454070937690955419743758388472674956943081664624739705487388292808532654231504313310874444108604e-01) },
+ { SC_(1.86960971309704747834098596399691609741197662053480144095374271273612976074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(1.869609713097047478340985963996916097411976620534790549104623271673316152394188179625030819329318903404516349604646602166064418117613162340811779053036053372007423873676889105658003410362759566375638521605319535543251354753928334682579486085634941137495852343715517570716941302239153342834935842392000276212763647675147540427418925852517413819117930552540599513456081575522228109974198245962840866004425308072354142279291838124979372838291732038376835550940444361681273449422655921022542869691912
92399e-25), SC_(9.99999999999999999999999999999999999999999999999982522797603465879073668264091885252923350791268663373238222024647977933941949502217305685050899028063005846531020583588854912080275336499194509169417049847433982967267356038709929706560291564375320329012735750986169796551989634393672397269192191279813362016633847875037003261985025832287816083936612617230687954205533933721331308570516151542799667874668414065625948662726592275792037922673887795272658210791962804009894010101881541472393674935408472853e-01) },
+ { SC_(2.53078312700865749726688023205126403924331013328696826647501438856124877929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(2.530783127008657497266880232051264039243310133286941250942000480762300800161262186398533039282553779392596902687143966131227874336503203743660302277826192698239337357670132468631104501969102842390848798267853936828117632097761165216937205609129394210955267468255459889053065661105342840890785428551097784383462695057153887851025463218764702105625843751697731473205438910268849405070548190071548565303059636671690082003952310918143054379370910758130194187567675687616057803087967010140806614923681
59784e-25), SC_(9.99999999999999999999999999999999999999999999999967975683820241406874948934166653533511172092156534116443975462625617239327288391590664122021589352522847665373016292962519418353924774489444379168931261935483162281553621603433472072728977349555072109712109824679883539871447602535796929172730022419399714416003150322948950527704596047738139301910101594105207474101086184045874651597158224030689372875979961705537903665460088130392611988152756381550782800594641836041649779034851910713684757134469554580e-01) },
+ { SC_(4.20941306621815835944433538670569070264115829616002883994951844215393066406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(4.209413066218158359444335386705690702641158296159904527854965785060819552789278189335462423242344080875076622776004738025764574121346117500787385271944106694199296687223229082688975599325849174180043108105008923396930811223249221139829510127297498999832384194725517392933146111859908902803308385884073938404657174739357003379935078980106210747378078693459989257501534864511443210892616598247741701968573875140166404529531773529545983448649515021746533564192102904985869552741007321714304770162879
05719e-25), SC_(9.99999999999999999999999999999999999999999999999911404208189759211732740935886171809403395266911806078856652711466436054573598817523340373110699177394159623578955057382297355014218133635413780957701638933946157411062927243877093033139217823648280095519300316420682551404000074847744014121081615342707317521112431516941533674300297570189514239618931688209087596074231043314980205424667058883669569048269145955246279078436197081567963182117436875444286563920537464570946709214553473195719248157805826855e-01) },
+ { SC_(1.44861407368038454520845469252141317524629204882558042299933731555938720703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(1.448614073680384545208454692521413175246292048825073774395583795482411430604978860247429745529209421341690663577669695435579061760149006743576288579831426967806737464152477429554944850412335104325034989906626708975832209503786412238456967413328468863815595623137403859817786318745546015549425054337756165709728248322538160679144686935298378866150452503673250771088211838787767356774289644767323171138209550127076651462078222789995070048272712724065908421285072523824908659089584832462354810377614
88907e-24), SC_(9.99999999999999999999999999999999999999999999998950758632767560708027866249151335156844582811589392427860365058124782731991642089310632824187653159631590934407076009545286555100782968710117672092259681922314774131655526310297215642116091062577441465725300669936944717371937199769171206287422313565977915692312983930643989022024956769092957221565563347010333758283732976918733369635806586213023769317382137590042397624049523931052552394023183946141838267360143101307042809763499173544335923553929609545e-01) },
+ { SC_(3.01299821836738389893191302236946692641450518124202062608674168586730957031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(3.012998218367383898931913022369466926414505181237461880307551229685829843508536960205097623141986573230811515886801083368467885462324117150779631177501102316686568771419805609823904920284580723257811994874275477747311420028303480588953601231833675366731336228849290513860451835950192884098846496640033076708898260739171691937834917328861543835487864676501717469230418546251442148916917986368896712409864725598840257596086966583696771022074178413694818070129798331641667748279340610446849440627446
73202e-24), SC_(9.99999999999999999999999999999999999999999999995460920868057485205128768495672594971913871863330321340890939584043333958542050402215331205051475347664198466408074500213177974669224638083289662049237142284601195838742716676332740373469330245058121848911657687577461695268645535074585543539333588005818218743916760513910839394682596564857909507975555965083387737997577009316309396894895609075395636625325378660457230047137085278175267168516376809105349281309907762284048847679978876273402954417505488514e-01) },
+ { SC_(4.15276102030971139663869209978990740955717697602267435286194086074829101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(4.152761020309711396638692099789907409557176976010738332037415420649345105105269579505812043318833940057159486309014719979274398301049417858240485518843647352900371841531443849767750281485877263711830179799382911138751933642071502843865351690507814298926591771180279440066088712288212442489168435842078897795096114387474494597590790634158360451869563881073653991082051874184701420975774038065060741700195426545043929388367989689947243367172055521184086718543593072265305710929501013157226545612481
96480e-24), SC_(9.99999999999999999999999999999999999999999999991377287954098122384541119849606577690137712663052237626484886226624201275179099557875928787292869332016691331690451970323191229894147818897508450900230579748333236740459401315242524613097017574548920324066573787146553420482969984795794990966084403222750515621558455241429579692068429292194601611839618597431386451583256294712361622373650212144590915969048413769735033165732778792781611903036592449421019558254266016509793355137641614746928246864257491767e-01) },
+ { SC_(1.20493139018354050396364738592701673636220505159144522622227668762207031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(1.204931390183540503963647385927016736362205051562288705013770725461407957854489346373840407809281238184187118320971256958598237747862985848026446657614405246740078086226896933283643485330204138484661752068883190085168418319581033801169125238375044221472397304603693644520065268486297314862629977856085815212071317279623568548786617088378438150803624534109630712990767821690632391026870790623676043583471706908829630332373295075163400463416431718496922715779065002255693053435482500426264515111371
75974e-23), SC_(9.99999999999999999999999999999999999999999999927407017247518023542093828750747845440983680844635722123270981180494686023648655779582416049950013567041075891205074926299102616026352240680612367089833234497949938042589987204061624971059683439238296677903567701771646424710727595867914797338473188745190462628716359293458300735139756066056975915457284798104540693807472391874216930264612444057558096322941234802484276390976287104651130487501202428300210798836385845155461653897798462137129023634158590048e-01) },
+ { SC_(1.99311766155840730007938784094077312725179496055716299451887607574462890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(1.993117661558407300079387840940773127251794960425201397648833004396468163687204560926769444711033220254515679117952841736143377212462288745870634099125077563930629524306112591189582676264613755110882249048981609466141220528348530891326409000553144853207191455833882484298350545321031839764188478700324081448714565099055735471883668566275591481364214546225645866510994901691281089688850596947791256223764225657778746053392898798572801548032936139406770471937241635801786923597619867873334999820118
11429e-23), SC_(9.99999999999999999999999999999999999999999999801374099359197308752453603576131047516452927368262379188764120720199355009182464606310796438364009611630012891309259500469404587018398076111559503245120051103061305045948094247341241375812558792771202649745420669737550570148968618631069359581952924771812453743995708795765361659351053384477330821156187950952631834801216235080165212423381265856687853670463014423100331979948561859656233260381056967971933208534465447750912285880093439696195128696304586474e-01) },
+ { SC_(5.13533303169498441896371390810640406021647663692419882863759994506835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(5.135333031694984418963713908106404060216476634667079137844206267868485775399483420731660360258476693296952843222172989187160712386986513434155985382504316706078035019705178432188866218472667168831781407476537255022095687745133952357832695589983161680377177400762677265917472421747679799521172763810026994726491746160770211649490812991640576594695912970120955805044830127339649836516135766305956868810980395432822006717105710502640007586208466648330577174338537326341557779954307433432366990230747
48072e-23), SC_(9.99999999999999999999999999999999999999999998681417732679120007652379550596591905492960756265988856401363474370065856842250691051795682600125230378048035765792891449165989441598706811070177528273711549839200259564336326789936789663320974251530646924695649992972236365657484978287531578871981209060244121480491480455181587957340654196842168225043432465945367410684908910349873995251736646698623346087505106038789446124069111779751785632824564972863033165113004579223400794734193596445597759923144733830e-01) },
+ { SC_(8.99483690375495720736892890190099236757959033639053814113140106201171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(8.994836903754957207368928901900992367579590324261436687314474406396811672127217195277971711467800647112901399368228132661072970966940109034372732530941697786040035784118901162541678963941418880665979153238041620416238343697808776567885457589847511093282386059455382324247085840631824743909625595545717965216817512720817008836618541198758930850705062618868283328649360801004847564833930622735573198028356973415466171687234372739493226280056393805242567211605290179055117938303428342370048957993262
42479e-23), SC_(9.99999999999999999999999999999999999999999995954645453742396734618715458511854104184495562420188515421533916537429226097460026264036467110741766607883632933956617708518701079643688565847361956144214137931960590472723950498992697567682863075293755919249786604882766977536693359519182877477328890563527188345220444160685396409938384931861947484586479429357220482338242240751400752299436874559164364125531924378724032958139179940023509176370945771016673914300929823722007356528898870479147557517389880506e-01) },
+ { SC_(1.49571864649346833307485258625357804618261070572771131992340087890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(1.495718646493468333074852586253578046182610700150739202758285861398036973973292988762470492927678239307219286646462803961759865733079485746031670290537597083513404080898618308422523686924793288061519264565524100545174420498430848913257331557033293491838056448365120512164793265357565194962877345454193858412726138694701681167667711580385844073323210076112441582818085093345967729136781875657430570312920802553057154994217119135647860197433915892746532890465236950170015531011309797256151477419490
41976e-22), SC_(9.99999999999999999999999999999999999999999988814128652658735548876489751653632066463267199996838874546485861024170068076642439321865577096911069193054009247807397756338385789586245178053759530459206338181619982472545153142325507508933237793989645350340818618149342431112261373507784681306094710396664115931177436350260577400393592421996537588766274656159350651739114480607092171421786422551162853697491835876809865771806493320077450117619067382134770625366483400794642466254424303591567538322745697378e-01) },
+ { SC_(4.00414284431856607422728851794317683765456195033038966357707977294921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(4.004142844318566074227288517943176837654561843331952069737009747208334128275613491115349033175568179806561281330926025534199587291229005149598049690138697892657872354230956217627705979739812766419353864428975424396630606114136065550886822965441348401383574975670483337047723088857875357026535468155813204377042389085889785642352108615584373897549257389274768354344419489403510783989629133176725037140601488889437031090030417460134467359454908940769451088162722311490388726555356032851518317848115
43159e-22), SC_(9.99999999999999999999999999999999999999999919834200411462117654908876795301697180266696942853917756660287008811612236377008009142526634798790119600335365087275113255748079314394274449251893378218614737201859271607325227251618933738225971941576528112220435253954268170625581637995387933236258130147349469103017765108522242360528131339039562505036202933980339528694872687238244385449943371413059087702123057738972040998513745694679298693657755065316883784332064415470726309308364222995539698254590438048e-01) },
+ { SC_(6.02733756338251593561397041623819981204235318728024140000343322753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(6.027337563382515935613970416238199812042352822337025669134014867914267751036871108892639576184100390870489412731012009384636144681501208278004778380187708426741804697164855974055848156751357940664167441687718287368556200732913302399286626171957300490891071048308096405845831116728777430682335723541414311733583179233560088888906531111383008250819843653178491916864670194634124314889256699366622362788117830710743014463135853287278148325627672688107263436135638574160154421172533176019570105971752
31649e-22), SC_(9.99999999999999999999999999999999999999999818356009485190578482546674221374375368594114174739562163693168458498108577433869958984955063014426674897062191529113188079524114052399013805667164356230849740333628262774905524309526854466619324671312571709022034295074629727972637948818437287458343367815594474164798876904156995774092308942455185318540096020442411397041128497181895394926057420958628716609903020544774920207736406633265904254545071924231990748168185969288263033548644250093223918969099078529e-01) },
+ { SC_(1.65958441830993022957262063472871904679095678147859871387481689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(1.659584418309930229572620634728719046790956019668377163991539483922767245931034340895621720804588385152731870609921262279971531921152024579156921294543567352350736054006381343579177849126741107781698474614700408945466335017321104496965872002014767232663576197960464175101344497646215999886139965161945448169981463472999962194077342591107016632990551226301308995193321132853135625670332958836556059512901010555893768907325795821520465649231677658741193749470748680676718144010946752594996142733887
21205e-21), SC_(9.99999999999999999999999999999999999999998622889779251445258286087621577479547730371095511636431074447800273010019756467107497424395835806730657399701787227830411590271458867465739237101448115269271934522847684554002785566502858274779864682062462477972492848515295469837308173201281626304797879259332255094869310728677490420013760396455577678362901935667125091682248666889454008184912936448873641174478629627505364119977753174642851612726858065476553313586172210586359118094844336594068254853430507605e-01) },
+ { SC_(2.67824441797191267011934057325206470778766743023879826068878173828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(2.678244417971912670119340573252064707787664228400648703628434542826709878088037554367552986451560762508381047290823199305708564552350810158665391514716012495841650345794178866909303913780859943511444160938169217451559895398888691786426657340246882157707307929579718977144859263000531040103122177024977877620006001781311238229230682071783243318705567175566920477687572113147614046958998578731853996784117509023899803703167846526739332251223094490589648131156168372221310941702415296947676418365866
28848e-21), SC_(9.99999999999999999999999999999999999999996413503418801145372469006266796825097449079547965742050312045236434812687615811480409477306286249752257313861368005502632923824453712494844206966792030996008614656490931107917279164562515860009828987762299164627454998237092918265924072060166259081213225845889343552482167314807271969366924784558616790588874124263514421653083849971429085957566186712099445800428991117097329072977627279324265465922751250506427025739354053214371066179711645306025175538222679648e-01) },
+ { SC_(5.24216989034958268735996849210789783057862223358824849128723144531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(5.242169890349582687359968492107897830578598224148586752590550955694487341512153983397267660961463492303110252148064319420414598776042149551546662813161956302305288932768306694421948079336289972093917535907530986735867838911233453777308269195657254203919928710944920912625424012011321500739453200462594775807996942732549599868718226157197993538046207161843232018563223549739071533815117647019187978192677451335317969189515287061968812135380807334367999217659502254191302050659096004390510396766653
58438e-21), SC_(9.99999999999999999999999999999999999999986259827420356122112195185551672366624073250839599194457507453628742642408825539587574321988663070531346665091210332453377213607635910430558804237795524086420616498779687994004617113416213076016284649087888750760030455121073468191914791665942367281561547327106767288655797810569336941648083751909818487275941957413272284668887599357964225376383967099007378119631322072540336535338653135115635982689717806180965476057119726371592548750686453644217463638771365051e-01) },
+ { SC_(7.84730091257718428828730593965756767715902242343872785568237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(7.847300912577184288287305939657567677158941883801561244559109838910344236408682977672638875501828492971471320941751489453020760022266382592910360917161417890716398330730093487330046195422481134215692109242557584511995838775462685166343781604457865924747849844363418441655222035783148414487120634151083709573524287299536490181801312448987751996788673369125351664880388117072084980659456283692990573502409619312515063282975656894545483692261936136883468706447681915520158838739317680883545326799310
63997e-21), SC_(9.99999999999999999999999999999999999999969209934193732645335964382330379290253067743257178776587771145954358465579435678655286836941465589087619806854778963332640469273241540043384000734386835119884823229777143085980583844451626007518535647962371164606341778086677564382803208102585069159214424081238283097552554678548608898040886644227817986624770310493880047109975878179083799382082128737216670025250465946842362679942603966581060757152365990866172573014876004863001409841826665676884523747998078108e-01) },
+ { SC_(1.54312352729357272495300072712165473376444424502551555633544921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(1.543123527293572724953000727121654733764383002819229958234658789502448444098426447945312887512617325967216106424913160184343583075482745404836437941608470707417954597484618956420044762720627957554038498478805646778255795999347847501614526496887172392081961430246619156463447404140939638279751057653709102233272110586184381092863207880318343166490098920693500437568142020770198095704330986485370896227151060883527477058286286818098199347949595409484294481843412831460973114266915705203732857612889
95802e-20), SC_(9.99999999999999999999999999999999999999880938488975652115669643213631230248126799838296779591231609801204436699360836757494663576140036341768217196428279881453755452963024766965773560507122795822076000780692881366245754195533398857596255693285795829751852318699096142023830350334754364808624892439333710684341795169466561692893207551567117843822386554921700320723066779416814835120422295083102698726676136546837592879162164887645156563225574180182790368161855975114174502212139974273411738602866251571e-01) },
+ { SC_(4.77518184435850312824695974855959690330564626492559909820556640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(4.775181844358503128246959748559596903303831507869869500124968369300748786312408040351243197387800136450833750775446168985619083120659414303478024631074530418584956715837627410960299232570792573029680477905507697923071287135800829946901337973708241175103739598416098964486732414590378980460300861451154690257053533645776885882505626882709706666957854063074280353121680246803928430534887767358575955012136284668335166677261584229673951137936269112528059648551273219744555837399016362980034204648270
10385e-20), SC_(9.99999999999999999999999999999999999998859881917665446220291365201399797968099921727881847815426248931197078614981311072035724421911759715979094472457981523507074663281668078107427532373671551387866380649320442592003200200431377322948753077746077574202454027025945646595207601239042527395341917368022264491271985293624469146381728776687435996883164233298131425702484520495446810290560085866721990974101137184112839486463835447743589853836128729569230456404847333286069284701906153131312047203315148300e-01) },
+ { SC_(6.23033471350706135997738616127961108759336639195680618286132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(6.230334713507061359977386161279611087589335669578479992893085581707841327789689650563178792314127699176797714495394383484391879324324933225472670131945313094176717878100036774793194683232945958545036842555574915377310459886387213167704315999744913962816624877805604167198901234651650600330829021435550012860517762476902988636594476719497511009795237804292850850766070364333773994697250349902389658541571587635464948451135817051976357683235140842719395585049282184667770878161182819226690321948569
20486e-20), SC_(9.99999999999999999999999999999999999998059146467883444182268334649298276434564976929585548792314224542993928933951083639699574277795394564312994424625369164959037371172773384747232025021592402636011483717441355967233675768383537538357257986806020531720706435789906784405523339574569102482506955066894177094965148419682062923055222829644783438538549051815255067258408435937976971922027519308509543595916785909437447704234765230356260327291111447155186396159452978437353554256394464351228571434927304711e-01) },
+ { SC_(1.33373774787437629268591066100668740546097978949546813964843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(1.333737747874376292685910661006687405457025576325146096371093548946707956719050128914181742382229564434573789852720985376523331320133501631486193472661695354289357902719597858541554521289552680404152974399747986173321314702858172963768133720250955632703347098394369204853151632952169999705329150241966239902345565467502133398926721210316674239312473727884857661464888843042587266758212567363260055183512495525973507820545810902166360906550045396844013472542130622389791755995286281499539084119895
98459e-19), SC_(9.99999999999999999999999999999999999991105718099474933284806139857400813352589827517564927043682648978728764758259157548540521229982370103779386138188937766605887502378218907747175575340569525702100714564339935788891685749871866514578306868104810273210249836494289529105147374405359061719026715925340956119852852492996601324880989891212817101225911122299495377327270035416555776310547611050503379101499527525151298272309849046993736994837320252913021267626530928647167494021867650980452641151659034895e-01) },
+ { SC_(2.72678641362033605222928850375652132242976222187280654907226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(2.726786413620336052229288503756521322395971138652337672824968128114345479034711454444268601408491657308401544431420450263890425246062255369962734312251950105651421820318660438328273690446098487047037821328025610900432959004102389998615798880398140929864147734123512846542810442460523606334418695682987278261559093289568572650543249412678888988150420296958229478565536406889007151065699543804629695925950435335591405761689180447742785647167290300982303766017261763383928874935765568037163142409852
44825e-19), SC_(9.99999999999999999999999999999999999962823179272477727965947093384519089206611732778459619581048522840843983255738245207282856356470053984205037855894718532833271990791091133588186765379675456288234980220490650098675151780551707568969447539905274856216620993281787677779454733403694016219238223636757761450274748937793228503165450442613649588268034562597918498086592965280705305942919433851691464387890013808565426437488525566307607542416920601654752739157313437038398177564522256160039491363191017743e-01) },
+ { SC_(7.84847163163788824526839738027206294646020978689193725585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(7.848471631637888245268397380272062945654452896277063673970445167282165026614453923004780062486339393866408424204829952797051868364986154997040636863153820159444814171249564380699378930017168896588243833158361288598501458966715618698071595802641090082183909197714004850870050839327083635079033063843257677386414805229462905644442090058556393773321618025870368955438937133011025919991341230772176385187569712053077416078946441294335476985929232609946218669316983550712830927183603721599397631482363
56081e-19), SC_(9.99999999999999999999999999999999999692007465236876521225591624733741973580413992094514864951948409477638354994860924045902686945655537440822272877755997184065488715073530826515341419594655069460256313924726013950095489865778611313502990595501567365333328403336978055022497339264912331540809314218388716961805500397317409139244048139568851551974274994613766476680949014369225330326153094075670488566570809659965208296833269543942839437306713455429886097267390826909886913799325068151515675401821307784e-01) },
+ { SC_(1.59656777006820041215490180164238154247868806123733520507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(1.596567770068200412154901801642381541800405231460255376881533285477603594998137609047531928632534687736267122976986601243883262961381217101344714324060514408089157490488562314839531595742197282039621130306108556511778793887165887201299150422616640357936826312722443305938796035340624363079027566240266154569370746686856140208088072092015724265461536809455001702644143970993420629734423615789523800323137997377332044266770609145688173769851313522912654915711360495909944031518050245309005850068824
65838e-18), SC_(9.99999999999999999999999999999999998725485677789726970050441887873791324802821873863599682065675369351546184000866507009103149360549935240237154588525165432757567980472696826283523224052289490749011903664848152710996398754070605570284221534583084155424171763973302026291361113216315086799683804698865388858367703071408534692832158042217078221374921429321228108536764324255608445406900297031772562838405852406675264021549234730524961286458631341099514706834735141229319185038708420515965497634457920545e-01) },
+ { SC_(3.44953506024823770663434441274830533075146377086639404296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(3.449535060248237706634344412748305323910292870689342289966777460015918982965896688118590991354182301833688690903603661693169703240649158919040389802879501012888615173671539947146184538774198681358634954008885891519827269420602847472896117947989197061646187740566081798516520583600681656087814576013082745319314929858981838936794089149796860662524876332562646234270999759690337760161168200817749521670526595837456977152048409367113138698982470973907199181084552499248159363774035049704549333409606
81185e-18), SC_(9.99999999999999999999999999999999994050353934059093527720023368612070391851891406718440574162266209027406523980686123351044050966467299673133404524778194021524254214740402040008906435126427498618501963733597360987556318089420367195395956628391426699039046618616479253844852188916292966502183910384510396500722228980724697185501358054419824202059485672658948142353306536149886006393532789623679836881982922548558194712986003534069955762666111663959634870672560092573427252698709721428977646938742506195e-01) },
+ { SC_(4.35166485374347011307050170358934337855316698551177978515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(4.351664853743470113070501703589343364818596858732161407038081388769148849488763313167399256471471930238928645111145482384571284877546545562163437384932277538165085270368224240788770533774502628924425222879606795983992163736754670674209603062120747735564003620520829556994185485715517882540975197050827208560633937416632770350471255890795877831984164131696637977746985757164669333563984671572050643393278461492166968474652532620852262265549466598322964052557028748050505854754485652747800324879619
06445e-18), SC_(9.99999999999999999999999999999999990531506500346911434918787920899098195107223890450668484205227829549023183287220398482022387187471783874651026967044131244719811336026254678190222733416033489289005400050123232478835262944811994584478096472240564710057918847691506763403668556132046747246126505680179175030370996427156273193469951062786344533187975157358909776771548110773203090274293899180349800394539287346096992143426016937645719411397808886142140406571702228451300533351648334028048315509115370507e-01) },
+ { SC_(9.24571534386041068466488557220372968004085123538970947265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(9.245715343860410684664885572203729548315215120267831804057543540978866339096664202594269932211370912795350653218982000882642365237244249600404305700244927328014862611748001526746554506059092164501536643759890664608395926114612453704459144239584691347026238365854507751452736321791670681596336325165652061336976500896071019439446588933868092347462687452186449741017823671909949265191990926627715243096333589262122136605617460925022397146636341093254498916697354435840606209003811980348181296974774
37067e-18), SC_(9.99999999999999999999999999999999957258373890152083906642579378593893901713675765098318926413104745110870584186071073407804185704163908348012520912780573078297733751798245590050762285702888909088013591367509411470242468260490885859347433147346225932292893244796521699179017915375269683211891843022671906243123097650437828622789131762134264796168556176234658033104766744814914904339713894114835117307900457700205766539066206181496361808280227525595233858167413695522317781531300493715242483817542972307e-01) },
+ { SC_(2.51782594979259907296692544420579906727652996778488159179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(2.517825949792599072966925444205798801249439022617080850639660529589471471871895142416144497768309044319468709701592603604556919370920754662228899538408557718687046361185882241636243300629093016749721999872891509971461728631516689284389341405564110362531551636672820329128334057603034982757427727165930213363117520960631048686658455918062326546309208334111984025639421009333978223106256082038049162263885474528659945651941636225374369683889975417743480170605077095060331211977746743007401058571496
75366e-17), SC_(9.99999999999999999999999999999999683027624327549818611642405259627277734545779576176956905635223388012474302610177483603851865686459231081769991335822870837867041940841659622753593655014713940872093638971093240790482102143812831175709620648245763558424105881217295782262911565235585052686966682126499325038194102297320702415146289036055973821432912093687266500152913802057369103672457993874673452831732722685075424587280286221673083152862430730343082806366094609467948165260813432090271885255078181302e-01) },
+ { SC_(3.60775684432840075543946767311354051344096660614013671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(3.607756844328400755439467673113539730803693348582691348981347387567357109596770462189047655589068854923643340610872920003449701935134814036628834401489120744351035568130839828986357872345713617557160550185725861902984309063703786615603351917040157203712440556608469983681290074557092090718049716632745823009371175187160333949231351981189311812808142428883450847974553613886199321907272945361146903518328210386602881932363813992793910927079714063288884969388321561952466420522658268116601091896384
02499e-17), SC_(9.99999999999999999999999999999999349204527610078975893456674652126360120817771889688340590968406061460125038582488754724017627375833001324771430239571028894899497567383218424464834879205022318861495316028975968435726716609929616209942133436466398134427112551311140669580095176152342696145945467540112296016461483911736978651291905258534879989907261687437286731511535258583610086316346495465395414349916862854388934045881989849797218994179829942041721541151900222125391260679662481266724801598694735986e-01) },
+ { SC_(6.90295059018608417669704557795284927124157547950744628906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(6.902950590186084176697045577952843789064691549460346286150572757587675808279171688723940305861415605318720742348095602046714366930443434258403914570103015047401374121711397928332131018029258343244908246497372980516010263610596994582136725974726719400241514520858741118828819400961478360649824435430538568404937639637333054827545352261678177089598735159019507343040153978209601431762060345875014356257788756289794532975512052198634954069830157803617978520163216177489262590099823802231231801806353
17112e-17), SC_(9.99999999999999999999999999999997617463657472479607266215131600498895145019962619817073610305785121833967037170438681582573928284612137780747419863832305571281883014950124752373550795955181129976650681557447404026625564572824730218895963758905602539829994766072456089977592244417787627088492524928818145775370505461217658955536144756735086815718595245350443425602386634810449310841322556872457206827318110637949603603506259040330724057028251216694224515414944270384104053076948461167522911334233852695e-01) },
+ { SC_(1.12525415366977613387811096856694348389282822608947753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(1.125254153669776133878110968566941109237273665431789912484240639363671027971068558712366937459980677921838964923137409666980009263845091246094294269472509493367378274546638455259723268936990607309736927044010995343419518830686914542859105871035331073030052372275283724012634315571323304032743405199489183144283518599752684293733276582932931269409898557655429499011831956887093436080948093100904939389467478154028710077892206714917966356820245333216247536506180687393794531088427976510452017616679
15069e-16), SC_(9.99999999999999999999999999999993669015448244579190490716020688404404988716129435608800138080386131101191985387656303059757501675622372081366205214275299789803844591657957023425966901002289779390222862063087950428709151159887731980350511804536405521204092863537711731089301980213111230626506493072162164721222427263528034471459447079943925573395807997966484588698625396806888099131723626070423844207983223693719453345905264650308583103241187401206619743563779615806788459652582739288156225108227298238e-01) },
+ { SC_(4.28382572030007718194566379565912939142435789108276367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(4.283825720300077181945663795658998369452344203715037137242323716194615185060139530703089076570222231204323567795877996519172084554641250239456192503226207344407392726366060365427949887828540812505497622463183561699492277023506117110992109970390154386740736456279353190929380302231294821101546868193638613571904985767237415026575074501079910976886525054868774175431637218108163805393536172005300008790822213655239770160719196558196861835251629675042303248834410396886040366307375332670049708215562
50520e-16), SC_(9.99999999999999999999999999999908244185990477624499510226321205119721095058075021258431213944274724107301289007609545750918897774273978402826099822688602645967625721552721825145710869947821878494892043502042886386779524528742129041553615891060311231387090458943405060106557011131937219960743403970810197762094709961812604268256488146909044474591554749049806787202591299579515547894789910550353470898790744771998924472207450437412320226664359385981163518398216312240317301698499316137407872077789696500e-01) },
+ { SC_(5.40562027377591153287639258451235946267843246459960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(5.405620273775911532876392584512096202389358165376733868491006385735075986995707765863064943864961574924588506862856168758679255414743351597997797802209553168899312135107024410694431591943809928097907142686103912738618159059036873898291768516247157126130590461438617581618758145046435026566602007671898129499057366072620481978438050327216136843273736169083125421904612801416344921183378436272415115633523469239111750727220729660721931779076573140177782511006840935670963390225122564634592129827580
53313e-16), SC_(9.99999999999999999999999999999853896347278714196230278468886281830155045973395275720923575499461975468393288308375635985943289405969943879734175052611227437313547948709681018548507712575189908929527549469183969349762222426533435169077447468058380028005061025510296067919339408665667471629938407525632912450465661014944423084708195510683442318106580092132004438775938913243626094924308943984839739704805512183838281324880895887413435530914721449115971797745548216512359146565268873966691648325262937751e-01) },
+ { SC_(1.19902638233177101512172413322332431562244892120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(1.199026382331771015121724133223037016058565048194163139432835959008951240556200761701998177910861589828214145712452729579410672258788810947776351922029732110998217089981137323078807220553423053547091986352690060391584819452973508191408436350492141679474607962645226877643487402814092481352585447492824899118543181866206063849114506588278846938943894238679724480490922422168546154337911357063857607353367056252128164030607787773412096220921442315245146444261770534255862249418581922907346911158130
95637e-15), SC_(9.99999999999999999999999999999281167867236192838031095819701787916028865373804359002593710111142773221681390652606310884830906788286803616120473194438083063522759231894313363861617725958310805741867501842807266210988030666684760768277264807533625085500984705089723638296262863615123643927659844348026277776487148412530668062202507750370540981950803485371381729535175337385633187123449179301997596140088990341420027197666179279421047422739289730401845124093351489448033951720102033987005033127759823277e-01) },
+ { SC_(3.38815974110446074818447925736109027639031410217285156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(3.388159741104460748184479257354607808370772504051216249089128113754922790128377566944338257941773695713164231816237477223306270124568024212530435602531253367755629900919753565203624220743331071115887031975235352552180793592811802791586074479629677514622697963803681083942442420415128968473244837788336710687857730325754650475108542770069057701262190904066404142421068989823234510039437358147334936835796175338727678576709253913332763931521622976732664792958330574752524015197115646551297136577675
72827e-15), SC_(9.99999999999999999999999999994260186784379476757981152515209436341728036663980357387443440104175124376831511468547287382319416060748994665608544177190490182579191009837162920485796578048138194041887008869736016572866833834735218013371717851707589665383762610511843580510574079870970128972241540922984155443035750300251011010520308198519163161300610750853200215747579653236184803757849345278234749183060179873847789020021279061575836422283909676225842553638445293397586781889264388759259817414925829082e-01) },
+ { SC_(4.25116010644745190294457870550104416906833648681640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(4.251160106447451902944578705488239418163464572510469448650323764881423338964025517915792760324448966398519386190338158958336575409675842739779078775020092769535808550326998708077723228229368773200975903153448879377869154922016157671332929631504903570768684873026622147353667715169235216634804532494717393431253827203936286736783943399091149175434446972111493171582206032551769014199743923875771771625115801016169066598551265083490983089501392207568751449780902829173313687962884381318442980237870
69363e-15), SC_(9.99999999999999999999999999990963818874674844702748116475486084707856461295907339275469937291571802782088108504905557783890708671134426482936133958851489468696392146303515035649204741944920865406162487979478067491792560183921011153079063283495854040944848891001128521367934055151737110438100017484244794529588617295000506752734482974861081634028579480845943553032127333374137833767657979137594352600945447012794293469082855519756029637064798338827033317993968438364908937482910493816043402620465161846e-01) },
+ { SC_(1.31341538664973833672178216147585771977901458740234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(1.313415386649738336721782161438095714481479145518619453150228428119904086522970414618857436827660188646670588219016278985804101402208848692932413569157779265286231386879717773267043027930433101825269652056037743856533119693211733312128355473925872968452218072063356388439287498495104579479386124328682410447490763536214074884100732062075512483337996098819300000558232091650361933542448042089209910652765594117587521542940017753782266488445161564773344274672994852632291601542908697298987215686044
02964e-14), SC_(9.99999999999999999999999999913747001105585917346448255468667731418020687259389117642182162355936270894492609327035751577975781905511260534442528906521602550843864551447652777416530770961671413078170413492886975664947160713180489434110163702311286988054098578657891174616776498835271527908985423746559334439292604676555187684744172862013311889242392247626156810700173294404002606146758360658265157997396113740487595634539444440222461918086708882309162207691177052462629678972670037494736536100439792893e-01) },
+ { SC_(1.77789708411153768441437250658054836094379425048828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(1.777897084111537684414372506486885244786455809123150364224188397351297365618009125608359619820671943278737293698710168347426396115201962043967287856641286624821471776520031747191474566429955366887614940476020271503337313142262819092518917429193938997617674203687921231395839256615034623047846973917440911221158053222103634606469285935777020717952802778188462692725595407334867865387848572228167333843440972445918581842501973354720475427955601794954249203302279629940533570774579317074686034262514
60959e-14), SC_(9.99999999999999999999999999841954097915384594811735454538004302545016037022517780490173741435795675944555929465406170133641921828986499358904005969797819484344239424979764763194041013420519497310559183944490160788417032999948756260634473243130077692082484694343666135596322405044585526223426948443120980873050098596571808877217666689185784054062839744405474537113202401718707617992954377641581966966545840927315700676622358215732909299904758018931589113524600079145027881524323334695454152651376769920e-01) },
+ { SC_(5.55649412115402641099137781566241756081581115722656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(5.556494121154026410991377812803172844732136950303463035904023039319880463961903382694821496609991684750381502568007238295056604490593952313642011610422751633485085376064493044940696828107163756932798055790828024141582166421225108221655639958028635521003441224943669216639688512144299229138207439998863357383383110454219722458073451757267745978186263628334469733289093584288815989657620810425867741063788967815462455345306189139717445894593359018933041472429181152166172767908518472233494974189279
73733e-14), SC_(9.99999999999999999999999998456268654079037183233581732191235680025315867467018181588237226553648078402104412568966357460261758140705807969848157060264373212772583437857468570864009272459824286929152662453086520176402045732499654604160968831934723473454758968594200776188249690085254846050117019853832573195081897863789261857952979012801346898762681231872848791491800971643317036237879893584845809194076325524610955276649279179513732336594657763035295367706519084046186378639813891200730024664881194352e-01) },
+ { SC_(9.18614956237767676938688055088277906179428100585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(9.186149562377676769386880537963172580835572352121891632085412690919996696662518629495102053648122414359326027135409016565171510268833606004517427068462017573543377883074385433300541491048037157680675186200424257754205503839281175571205151226381313950556083283413208606958751031120097543852791073444300561073138632500168204331187592955677272181146043259346656049064067914758234293793132120521012262118005421378366250270131870292625624208150092899902395238835550612064695859434212298294455234516966
82896e-14), SC_(9.99999999999999999999999995780732810881420878824781237756494428642216774906860674262521495747901019476422529053067054804076342588867228309892313842590968737438559958533351462306136561566035343161310449667786137339299678900922238922396965259978293416064425654849017060386290453490593319953991014716853265314390480621748175217352424683886712175702607549061234175218581612412946946694618730133735506473462495392167916885413468468240891287057630611654063369552363308029777319668075166154464106813717530309e-01) },
+ { SC_(2.02237261225785003304622478026431053876876831054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(2.022372612257850033046224766478500958739091808922879185196636702911058925491067864986992400385505439808033461115715205307964856499857411999321238592421069537358651351438916641109014962775662797201067852148968734322941028538164908749089437962591513465666067977348448048714248413769317571094130468508015302401430162074497196583567851678963346663884938191433106698169814118758257620859818811531782561152808424668209228703999273884309703285178460347430613487200463673966429012495620065922041933601518
06314e-13), SC_(9.99999999999999999999999979550045085946798831307767615967815728269180214484619036252790909403641537946797064418773421399496826527484740300031970118682423523800911121951712600720523023938618836373759218286510508286981245064681398402091026119540125145271144222176557855414254314889883573284827385379124690381427040558491108917124358629047794540691235512374459271544852802999945917447080468309969091217719526175112209317700651086548969987910493118357567850475532204275002096398789155408595057632731154652e-01) },
+ { SC_(3.34987029435018790479716699337586760520935058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(3.349870294350187904797166930724187098360179109294377716679893521957658484578013273805372391731972011801760802183469856508924957740352959329056082504060426019825744235423583716942919449691856893404709784504887754767623849247851675743804844509599857236436969856696477260675362401456559950295014483152674966899671029559151259206895114061795788832974203252757054197342456161047713181703117358790779101116329638409852572489682957961015790491498985955412972759504132452323962323279627777687345033940670
78556e-13), SC_(9.99999999999999999999999943891845055150927223405544616685223412194532018312352112927452321976910999098948049508814822499116849784098962082807247240354662341685818269245714571156296285694028218930934948908556886283919439083377260618552964932511197054219874122814829581002165311372499459672863965236873628437256914247926307351641680837638533400251705920788307072678111781083295027335002395879798438407459058176503673480726665421302397190962673216184108932938297777524721561087126288972933983518946155179e-01) },
+ { SC_(9.03792015186088981693046662257984280586242675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(9.037920151860889816930465392157383217889860070423656994923963203162795437046565533859202129508909694003926136971021943943330890093022933568804205398287223932814294594407567982526904964930263579779660885116460786965192168490284815276895346011332265907758828719400377131464441532081163873420347441314838424491843137136836846396673473616818896799475440990719687364113595311187816954359462159826924889553158544596422251835703370341445957215819249018910093816965990562331084363806279272159647865847916
18908e-13), SC_(9.99999999999999999999999591579996642934151749028718876204266336384518057312270158991179501722094007867269513312491970576830983231405458466598365896114293073967915021543855661308978854719200666851617736145918857326995797691540025815161748308738637322261149646675082385639820462296143823539613814818378533729566185263398193570914921475394320955027638215702854032556452121005120074292215838023871081463612153498469043881103912304300914513522689206406089987405856445764613561621916375162684097661929892747e-01) },
+ { SC_(1.22932697008137914451708638807758688926696777343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(1.229326970081379144517086078441921845916140217737919403280703059075622722843822233004337452696081921055996201447904941247315851723042530649048895705127989668563908388477230389503227275709672164895064639881896965860885528625766763024585075830183782395380111525812766024653910856523487922180000955743487381101888318121973082389269879287968029959717752214193861587157406921752123541489299750790491903301524220272117999550687685494512484685230769972345432343795864545727015658484457294650864174489595
45618e-12), SC_(9.99999999999999999999999244377600315267972846306889896038052955037247802621151442469870443181687549662547384392242168552551586198987635666377667288491218214785084557964246070182324401939504153389732646676456576169283311877256893335438670498971513103206528391739503987826941965462689634528631382329044690235509449552819606620554284030388025785016998747768833817596505441782759764113304742100788573487452340669666205903502531701419783346606301970952783643261289551845395097138033771960548299748561183193e-01) },
+ { SC_(1.94194400143787859747135371435433626174926757812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(1.941944001437878597471352493795114030830448718973625110370501248067540612753368358309057257626213945509682353187983004787906389724875683625614640775011906617175888524257097192538471632929586800622911564704835955421289635605646339736337001092071986384759831952434242018115406064220667825474980143904647161480597843368858128750710036847093448047309666306726046542942658980136483778797841970042078835241240567800175700617790675862691243130284632744334368535564914049746362680266064484130732062669666
68134e-12), SC_(9.99999999999999999999998114426747639720283878342644563204203169790716021521459251173383061511822722138542525896575482448295370211190274140784860421332669802522548665773047007513535501337737342769293246553594052155484863347990751330806127168505703238439677398058671991000759955784841064858343931841972679048717309792670368465654719670193574986504622561882465200813531019263380321051541831568937340898838311445737284611598359421546001386821750750668783594967103468706500099741033123754869005438685314915e-01) },
+ { SC_(6.66051588882332623597903875634074211120605468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(6.660515888823326235978989510182576691902390279887902805377443667708778690509331034592594766088867777565799156908148592573454750342160991048716892754891564563027532850736202135985867811802280605898877023623129761188845731307404710112291596802109672448957041444487010152788178403144292201580197919095059669277591044986035163047298311064835129712610877999472453939625289556780792817451453064639907858404961090603620634864821362574171862746706236418395801288436245129123471891421315677684300059107842
29570e-12), SC_(9.99999999999999999999977818764047366008251915524084203751590909615251086260955508748261875866517202782687029477624871890438384002334203109091463704378174221182722376822335534340374142555193102169681841196257200130319439394836735580276154595560504229580621565183026575699906092001065134615587575775622899658383438321484961911921543293368782124716382447335465893719947339645128446390223095375192808481543364390062737788287402811325613827202640885016945267219061070038152413660953412231060479866988215583e-01) },
+ { SC_(1.30501373596381142760947113856673240661621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(1.305013735963811427609434096603335606920397101972390320571125130342039036983446169015242253767766736364152964542663671275364747895319398421976971513989310519546201687340155054094904675081154028820799878207893470941400798211905912570486025052296130174276759265832895490590198398638877880145621377264462787192197922785619232553887437922794083272917288969232505165719712573791089418331990235485841000797228649168415430051553590978390801147544936392355064190101705045749548074319888243305196644245752
31670e-11), SC_(9.99999999999999999999914846957447288773605522779915678255591462117418280286605417598269089175755617808165165915602683165476414345458269433948306260363854177529036902285732309503596434344904848730286616536266179648232912749254260921122177909333891770273234400774813916276696399105771617638759781892253016980274639868069042438911086857998849593859350294868259456585846305237089203682687313371760123762847165326247352229463880572729131913191062641677831432439574962099265732575505785164506006988730385090e-01) },
+ { SC_(2.30686234004018331233965000137686729431152343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(2.306862340040183312339445397533660598495726490876105116543422553811360417648432628482504445283441802747511003921687339684533037172071054411828061174174432339437160102640580153784842805885838021813891628904929558680585166843583077502100246542931942779146096687685275705677238411107621320819322536614925421917532983263343211622627808518437729800198483908728566494627494033236290218478188063514209682998191635565263510458320942450839004704419259915716809317874161622654257575705637554563578409042333
00722e-11), SC_(9.99999999999999999999733919307205216483006651477197259401080960096043483966257192343615939983066359058015411234573217891951462139195543298683130104275658252397201222054956161090902681981646889634021219639651905330486172099952446497605963028200398919937976311851278164684080724300523198038402357061425303530776059374244813248811828979039869539865200596606550574563921484875225783175485587493630243707736284879141253824075634607287034007852277416184589479502402414449884296567587929029951662730558004216e-01) },
+ { SC_(4.64061566951556869753403589129447937011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(4.640615669515568697532370272717282670953979916154192847581807076860033985299381089075586590498055445221661420893436871836188221836741803988026231402085670724022032283039561471911756224326343172878189840377517227593148307060938341211369856016341723265241942615321421658329141136074295910851297720830385109812780685840295858707498969263793595915660671467637341656643456642273814598092440904272393550763191562182719451684189091107856945128161659167157038989073023353343948616434071276275492556682414
55228e-11), SC_(9.99999999999999999998923234310392328504314665821502918105582647737643019746695356200341919771774449617719049429392209231285890370146966327702937705005002184280017353077487902270647087318848825953575460945669274016393435239996905422988310852251085179190521532751217700605669335225363776810282826832168168254965685159520325099422292341939640480539562839299127143241281660562761636134317866645828326358737604399820142244271880315035259321648287816929497132547280897354649873459775364006169123128552913124e-01) },
+ { SC_(9.02057872842476626829011365771293640136718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(9.020578728424766268277880123149741427909269162073935670007995367475286658529579400461045176109283401187438263141622536800487175976221793437400063352646964156568192128560650024527063232857731970028771811705136096452266531060342573539089336733796663741783266436056242959538039368940980938253908570026848726230737843740575175504491254744654317455731849346104211480352035909414704649840427230488403090841897713845799972439140147735115883121334505072544882748894747644561055910613471255282897643957341
21383e-11), SC_(9.99999999999999999995931457970214531344382763500560740979521450298825780214945541896202189854474216844275983986675930662009739900611201068149959653449557497416940647881320682912193115325791819947936258729341672087252057416024263812703049224805890246943526656060900271910628931812153202546207245286088184201636723675366258575793036560652857802740273426903311938076552797325985907156430651556662087903430650963838535614862310585721428952766908680195035699158214593729978819602348438663666578546511487638e-01) },
+ { SC_(2.01724303927619530441006645560264587402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(2.017243039276195304396385279715184028953783085931673689339380830978959141050978532209498092263551956167639496659766071474827341501774063966729528592147652269454523479775643270483284716339323597060661814752530903651897273333673515750605827694619134126202144984885881226743672667699952227893062320981447260829748998104302054040091589308927742443080556875713331944711564314203466490102066968582122973657636910180846314838176835371772983012228740905992578122563508562704788461295941263782165185265916
43988e-10), SC_(9.99999999999999999979653652602458691842430650820260993559156474358290259195311093915253527357327361693441729958969689754741626190671808226283208321176357071049612666759270261537258301510936970338807161008051696492329011151441024206711798673439297093922746120664076403362950701801472249600616977394476695828826008527819050665336968791102783867687569984985171685557174424584367761174767539614359167513379500439820659122737961073226213712482343940968286210986638068482869101288889181592269909589057079909e-01) },
+ { SC_(4.46381376306703714362811297178268432617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(4.463813763067037143479872444760990270099022245398800050725616230100993565408031841481030360013960782520449440264220801382402247682544171469310173233345656244518150999456275906073910279839421204177733781049502399853239991176848040608360178457451796320444570166764507964019325385610148185188455657778749099349836791338326866234865761886300710711489380832089384990851839772467951906694803690853939999400117703788388076323210776834376116463902899672291380208198146033148331286466846329727581687206899
91635e-10), SC_(9.99999999999999999900371833443266485913038040997156521730870275068640693475214820902318135015361433760915624397597203846840940746657939286081364605200713758595178692424520434822206960393490736772166491137163017541233795275517139247267410699507649970089369444931075965017855747225029199138401668188234063259525010428970267417033114000305412910864715637928080786514254241357289574781729733996541742322741084600110673688819799600144608849647324443184768061684805422295932405956450624750023427143250924393e-01) },
+ { SC_(7.89404319689879230281803756952285766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(7.894043196898792301998163322017827395292408765976844712729199800027779794846323634324658849315812987544255393854584621159868831811086433922761393027353489834212930582027577164840621374110392648469202811862197753136270079442544747457350920113583272658247527373925511928866027109436118905157576529748147806302774634199545692062906202865706559774152255827630914785964497571752443957748205719123065902647308838430567589296013209817267775113228797279467079249709660136710196460258543128521744533875634
35502e-10), SC_(9.99999999999999999688420410027479475305362157778906332143894166082169936942731331015607326922677730904125008992719151667796893832292596525226080125485663687387254462074817179973188165868637583981505405306392273710095595133094657390308796486677320683162477145982344545246447461503948259405992813915821707874476148435145178882368552160954920286669801651923953245324424846942116744922945358896352588428998382245435357510599957693421002169153027160299186706875542049015760799819878960550724185779068785498e-01) },
+ { SC_(1.19753096328167885076254606246948242187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(1.197530963281678850476320113729883668395724951660423791198783968669215355795415902225339387718021274896338852868236874368290925131694389263095391124684859016128265565546471313557370953015853312666274327159507862690024975312718562752689764922867721425344221811099563600707772308258645342288685991882860807499926901943494651501893740991004969685145286031902776725777190598903965206172923990224945998812572494615530316306179687646124702120074006251843991227088790172206721457415003732399988292735941
29387e-09), SC_(9.99999999999999999282959795990827170135614551023194240930093260762829569325129878206690247961179210344290146583519020530140477449064663472153477122196148449723990947674581478397862389652720572814459349933259175702680962896596786112183582392780523594102607808197088334429511356009699288389060708476939825983150618719140382258928526048553918913632413879435283278548406386086586092090685080850137974728621832392962549756584863779090254093942057791784312747925080865351451451980136949655068387207234963197e-01) },
+ { SC_(3.12890779952113007311709225177764892578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(3.128907799521130068011724307872398998430141211800200289878878306421360165634602692276484553678843534058205949497804787912504352707271589416051534515156132249004717440385063480926569736715813051488818396090840025628344539367916189681403604454386173785081447513890504143023280391464991486865008227137692535023702308751506643234945123432223297176896176738656583632159487652884606085855076711885225390915047191717397872257913224283338267628957047001793258870914363263834198341546115145646720517056726
79729e-09), SC_(9.99999999999999995104967991047919853288257931434502650824735772704901382256708715021400393451254864039132676058501649583756462483532603552799348051856624202071636323687874357588478927990651820778386282265459606160788426873464937091160667643766602768082383907777101778047612835332747498483430187110019957772023312922681975084585702702709221851139804864228687947667854639696398886738326057666662346670866634585482424442770349811280971220063596816378250127941112472200556139543776950887869805152051636464e-01) },
+ { SC_(6.54608101058329339139163494110107421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(6.546081010583293344640422707175546065194006760205737649959761157786933409793881300800229744238669352843252245919604976909695365889394526723657503791571062138531591152232325578017627889043562156104068957786802686680119738014868724572349953347870767861966671202041717523343452207911460724528167211407399383814579124983066683728853135412510709382965349956495855036680025132719064531564306500462878372684954541618952868504648822009383963849125698590732957249400167438659879463542092150481478140545605
47411e-09), SC_(9.99999999999999978574411701440404233691911105547524791228756909319836684728278557912715521020318385009945375240636666743026580394412900791259090936132285225037596739865993433693958701211417830265319761760818827268301975142733786084305836633688005769082569801814452087685765102517906826744994947215969543741061484041836019692751063794459856496528591823807106900483324218512086593607216213529777612655991996245466300172132394213898662211942653694107956279418132602626108011683019257953461179914335417569e-01) },
+ { SC_(1.03735935397253342671319842338562011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(1.037359353972533408107908937510258414037878158565053631004768949127377207043012443485784360083134750306863331927723346271763251301925778345754199420381674792413340174829874928589231771011997534049169394684891169398602423628292800752735590172353947800068396150934803334188039963009355204954150631456077601881170154930315222132772472292480563573875421811226227685720150763715029317401406910499997306282632613296732656707640492082729525218347226479223849893268543491989177607046959261544620496794271
69055e-08), SC_(9.99999999999999946194278536284405354610570430372345844458835181493008418475677210409811435500978199000936738380347156217172881551605742010246289295475642679026543821035644853655390677531816640177832243794051207478874195355431282643488079197260679386719149446309958513855351476668434360361836809340787797843883968024921763591812095900362002068091186310802402564913000326899027361620529514471492425167201427430668102330868055716754719034039207556779437459710875339678788681820457468797439539816776604272e-01) },
+ { SC_(2.61325965311698382720351219177246093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(2.613259653116983529765520857946748739489771367971897165878678295995587058668069626434058857330380394789886423645637043570825020939478279447973677726082258831662155238235552984187583186304579634824202325561073176676055170365735513474811828882436400815679869069255496232817569158864754511746059048328497707105970969358482511006014576753581537613885351452618953833771766821309335680746013650260039289583851103191278807863799453316962654454296387092062714141919270768653063425059620114497846876072336
15452e-08), SC_(9.99999999999999658543699269545087412937067564529648844277884576114957046482837719543260440895585699908131861178001643432695184748185712205336322075891023812779806400255307285635209660964682222600661763324276256706481766722094270367164876479959205752956664985241064867292918583916329838581852654001919326649998662347558813007474950774388834590480461253782550965790984460939938335780491393830813803651547817812540355485622875414796710271358731969408980506856043610689479845560715880583092274528220974819e-01) },
+ { SC_(4.65380338710019714199006557464599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(4.653803387100195462131014491291150331618480513065175041638524969992666479869274359909778907221244702337165350359904452286530008233871462718187204260845682119496503434841847582900875818246280017715078259122673789275620498893810220448160393375912615220726357473524931368711164297203378519506738984249100985296868622633472077013768005245284180488282505878048975792511538641927811317939388396203594740751752768291980817051275448682797599616831641642023686889558790189624988086632682990799797528696092
45111e-08), SC_(9.99999999999998917105701710736827116732862038891301894759899293767055928392225272595948117206501678573317153059878167175491018649556936748464550872544907856954522933464150470681110854065542390219844974968670264625826027885525059842104573562044746263899791837945122572103192121273049517060613765582028914775681100285591918055756290567968423433583223448698871995491519052440989343536966227231794085271655176660154985346506937216237832680674055765810058625222813752209386455645318051700424429635825604558e-01) },
+ { SC_(8.22809624878573231399059295654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(8.228096248785723029740314549353913613720516829570684406103204368015407619223326095905428719106368241466189896009606760061055522584070072063075360283117737583713842274981193415233743704433809375724944750128536904392396382817987151530786265113093090404182200710909959994567495912262902938123872795808728353041393218193076784496321358244642275765049677493909569826141371034591235058073034342602062285651472225911354354340706898169278465204722716329674159364266406764287035409718882795679648985759107
15123e-08), SC_(9.99999999999996614921606035909924093917868987200475849137228921444966119154931547433131311747286721713859993964713899333566061563563544320069396737088155497880063790400169176996226259767364154679636076351504706293403513289841547482443607379100708634166577212868961703960806666990381162806668658969679112306754390205132297815473144631413825060452445785272573811906319333663841292964458685149139890735787210705223580744560561707667329507023265309675234477115176492742999823352033168878910390869069602146e-01) },
+ { SC_(1.44012915370694827288389205932617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(1.440129153706943294904706321204888219608314206250972084527609677738996218105914547823186874047222507291094969203222780389800557174928319068156987844289392250995879802698786927241529573178017024124129937181312555973558954545121667909139780834650761433421138478651643823713896446075237529319110692384598923980363032161202037536836954309355560706694869876076843387883516669606816556501024367659172431529965028901515500491440157603415356868100612185361261581790084387526490281396529642386966774590613
10317e-07), SC_(9.99999999999989630140103216562700402577129540528603374109265955230536308597494067119686820392828740053320454263283957034972289792638690212984598029233291446961997991969126997116029008314129347403292717442507305281117023966514614990281472312184568218292849743703025193325667661349717298061440359197461007084458252138139784938458360221184396180949292384861603688190523134947836462720740001267066751287510670926330528553505087996619339798329208819107563086094981065297536727314006650691009272319462255730e-01) },
+ { SC_(3.73797774955164641141891479492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(3.737977749551559363401273510882743069669454993046873512622243270364850031953998761344040308985415694526986987851282977752538467400136517007381177395707129809366325976004608936397315877932117603977412723055994352325906710046673756478553416615065187932600726629045400361973439692802571171547105426299459094750656081113059171194856087493633425491974650357296191383906798091972428108698939833712988875529540179635910672297506195369792101849680321230266293501321186726247182935143887252106022897941132
81992e-07), SC_(9.99999999999930137611719284858340365115221610379236961291415554500435872388131334398788410009604492364643595965830967680631112341724704163694720399722612295634691371226329624623908442837416395690299608196223118613825405185261111911951537848971636572392818714982018974612977857238412841244788826676293170497835913653497769763927232690492490945784008368787039023716182343873542256800681402456564241935627923628431291698833219433246493125751712345703002417251750058512609170411880034738680935556902505563e-01) },
+ { SC_(7.28307441022479906678199768066406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(7.283074410224155204490448906667961581340754531972962606246381671198981047244687976205695919939341651542518942458477246573486798043183674684236648719176513734483893343315038824220064530943896771359629621314696343918499184228834937555833879147292538209580277911520342999491762071114978430398023813910803358749448497456581820048558721295888278428948573678343267166409123010408863969315620011527122659795907356786299140588131423325370794652902026716152906252306473934666342403835008761128001561322019
74042e-07), SC_(9.99999999999734784135675655199435477062371271904158802490932787360232684194206055502603613593047275332698707464520011088631566295631082659933586705030333526358496612387620984644750063897599725203398934908527060541521854556685436158796714198252960674419809228990516232542677961431420440764986615825562613851043943570711111775961182791307437967727617534370632679575032475835782635221622680183128935771393540477464095097827358860337546655974513824038524754934769834274209792801776761029464963487681454638e-01) },
+ { SC_(1.02601461549056693911552429199218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(1.026014615490386923826726643679809091297976788706677688491469217122123186487244299147170318177882907600897263366922342009739147731352282614646960948717143274276965386643771775078370448506038436593438221328837296463549998909095120985294068765503027014628576004648013921682601469853742537542038915568433664881521591291307305663524442445374178842346391631620779375744076375610142273727243826334314021791304823355212226195514452197704316995548002986631042760190093510561400423923443672854836139193602
70842e-06), SC_(9.99999999999473647004399918212790658478585875953442964686116107604076344236801122474185649272934613995743945730939569552300021365101719323998149781972994755931612189643480767690316499261003148488594493744111104485195102515931162213304165502158643932709516860360378708209085284952295320543183629161025237715099530969074626286839526867763366850481056477689318071063989591265436161763207215219865838561800778868728374531420305187030797150900783726793452464152222676753653006247167516863553168502906926078e-01) },
+ { SC_(2.67831455857958644628524780273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(2.678314558576384356570054122136109821282766046398660695954804964715377395364016096539554760911739842980183339928627115379873127133160364154837476838827062755416773847823948392072896483070830098707155534634235581638898181780517803400132407067409632140408597384044856491369951194032249017632273670179660255985318664206958414913863519050416013607402520463710606545936919756858232807165657081397180987694138389146994459510828587030773179000764404351613203387338648230555555722573264772018411809434828
72309e-06), SC_(9.99999999996413315562652461552002296120358356472133278078314440392542844209646953698240203500798998633549867504425862619825808196127841261566653158765476564276301681397741407108125586006528685692276874904550104105313883720338983664992978010697540996668822432388675633251819366000519391363331431034508455570735042351871115290237627556585117202107938696024469549112905592522041283932404634914222293377504740759899590438485366489707037641986399526791217155900620551904585509940641934181648230634413259265e-01) },
+ { SC_(4.02049954573158174753189086914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(4.020499545720750242600871184688264298146631533150779917189015824267590647390780524071101655495789324603765602884401044499730941597627029827054680816822246301148504625970621112245982354090912405768494331011022741619693298754251992651911589993396980452522970204746625633337170958604451169150741368158080828488552732815049876015237209921527612700848124237927867487289057187249252368914234617824733118681446730666249240405957775362170522831971121600370361373919997391460353259980177521487200006051198
97683e-06), SC_(9.99999999991917791701396959419313813401265180623673059179911547500949908302190117148933168329908690893202837285420822052885466203283802841353637437714044074266653743183772093591630593925853924527974309329870487833794885494542924974682749486064402670967310507687630404555758440772082780068787018846191231498609660679588396035862441583962343363796596673788481921721284934251655364564300464315956781078329012607834367762424242617511122928763782421412214474185216401731965589463411912546191521776651138922e-01) },
+ { SC_(1.03207567008212208747863769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(1.032075670063799644860591353179237651788846379014508185900572424696895970011433376774478263971795381677360310484224756317358748735604366567045446695040225307735678285798635804277385463060492552388031085405501728936953864610676092403422235144815378772619963432095353104751164686061038568877386306177703629947326919063130271707159511531216029309768533640574967400315277410445432527420051646541260149249827642554435790860803340906512283648725646418441431220490862031413032229596913812283609647755374
28520e-05), SC_(9.99999999946740990561699687835096311656569291167275749312185252030381383219899994380821659170492794982620386768812474172028293398252431135066349066538792647839668698102255251061620041845986018822889924627257362980746160722257168566939728109073250489334405824801674286788645760845367307942971073221727371765467748461807566364605758791097966471498518756887318016848413147180370466183250281458021428954703658743849818753824375557456108425203304608071735244045207645448919381735548782239335207831536854561e-01) },
+ { SC_(2.33581158681772649288177490234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(2.335811586605322745365037431582403377376462134569521325943696545620652160978779713201955271577301933583009295640317988287115956760768429390095621637239432972442857341940060072235563823740472579793187215004142622852458565570182499689793115525089095343035981549074962791690190262321234771338543685627925220994896686762996932798613658314933847819726118439782112298825416562955087649945148778516630965667183913798717720450830683850542386235045095745017240781239432423184422231445030418402638863740895
52234e-05), SC_(9.99999999727199211556806106904766880124422922887658969070618357584897186718873889930706733533737414920883255973805088255784903870503201137916841892176156804261940743581740668610287436174400116137484876377141991877409180757654824575875337907433838981829262228635400536890633592785954176621124567961998085107372061003574500599157091043708082332975297815142693186921586918415547768897948908381471877202194378061551462589503407388052810183783734976447440624694286163063940147901602691211823597158892680245e-01) },
+ { SC_(4.86091157654300332069396972656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(4.860911574628738965315598482845826377845576324746821760851723375951341559040335860703793150358881347347260327664085407848129585988069945666633267801247107703771871071088338737670309232277270119098377932562323915185424233357434564546521261930640848727612245991872955909337768315997531052536664065487667725993349727566919752786671980255570005296704350880275882279310518719915096670765073112505622046491294176870688480557731797522527628788123372642586193480300509018426487997599546114021594980565906
39155e-05), SC_(9.99999998818576932484137442598201473525328287104259159863210153066825931991341897043829111475228349045483285498413995323186917285933143000076937430579794115233182095826446006806557434845683429950622114857801966123846319338055787024498273217621081374284059134966187810875651505392521771289854146929405808060886179474334346367549605047691775074583245613018760263934687689325536147399232974306541392134063454728398424522096828357018128412581868706236434263323391431032449702295638869342133483754974197517e-01) },
+ { SC_(1.08591746538877487182617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(1.085917463254554781048211368199670579614425512788387523483433555662862186861139295050117690853927228800986148400194650667866270289574648132420845569279660282826291787236996480645754538872186585479312646055543585639865020734095166768180324540665187543297923318357265807583112111466496570481626221847206052552830445271926252577970880077770996788090697881875524370634891107068365099975366025857703492590331223273717630314888567121663538368332378058975110198794179372500921000193815591259791399683167
14978e-04), SC_(9.99999994103916297612061821589739247612479612887786329210914478898502255396074979076847380789538147269506577481185329419865050666328661434508868431416044477700542172646387026146164224487845332693392736684598893846596257736456069469932831303309379700235636614876092375485047676007220108087938935195867325054226395462569755020081184471649585143960785879580745133870280816789767884448864548351682712557998756420520254199770987894208326002729195396286471764230750762925411446123482196587212878858449600175e-01) },
+ { SC_(1.65569479577243328094482421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(1.655694788207770022784992300354236038465089555287173611831387643631307599341469079949951452525646582865905880433306727337365680886250324382817906652748518886104021056718847998909468732890973501328440564428557607785048895467837478046321663609614733350566770098725835162490837769888994884138784157705408697517619177855450428210206374861757225974187904783329833523868926020885228064622383127635652268843400255628550387355073377391836877990304441081604291274835140134971873054090792240934238406563685
00111e-04), SC_(9.99999986293373747572336229637016911015215548939030428628815886701051084032403634304387592163823574064764141161745510371323667165490842320379672149455810787341804779685538532337126177529898307424160287639638228578303059367219675887486179384440818508994233187183235425117869203130395479376427352212373583179094983956677855049181936352501675476518166852524409114024864211976654505328129329141275749256228504839199221229471272083720991903424231132100498001886103604278094475959343911266474062340673953856e-01) },
+ { SC_(4.72170533612370491027832031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(4.721705160676930756760853082840465483682879419012838492838022684070850013236033801177129930128874183200984701978204384308003754004610137424222521458727881578897456249506743786303083314468483890371055500824835160856655820281960701940383159984557383512574053594300695659748504646667428598812654944762408538112154709220019803907840763190077870559018061191506677565050541189802395359036694645809961539019947961840519667362421007319068169252053603270633897077059717346657645856965675615077494378872294
61456e-04), SC_(9.99999888527495665124586181695612446896055759076554914046210391986508076349569320784929587149658215798725165235431650500548420438784030227751958358265628970993501643962381317805243477469130674237304889359122911251912706271419560285910770631706849781369467753261971106878784188494585647101027739471383693003980737319512703901979613054654768752954440845304999284188711132746818638758530113359491822833435683803246988867483208003823651051032814261010407735099449745359158953284399378090005712210474581903e-01) },
+ { SC_(9.59456199780106544494628906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(9.594560525745545432068553393688217383032921441292246435332506138153190541981729957575002930342014945602663610409901329037998260878825243862713348830585702225743693627645485546213229852934590366810363509367923702634782636374366357854599603020520698879024574451878200980826909642846992269367487159633765833850635693551937836392339057462455281104027387799750780226384017082729560287196555483099011666529039562543946076653267950209885378564496644815782419904396214393697986433634728293334768067224446
83316e-04), SC_(9.99999539721935661078558358877631095592475113333838978294776138905920499993032330139337421241902110329995510935282225042250995091483713765893804389358404607462625442239227727503856365590616276283533013690912228413610654893588156280765066256573917595651391760595965856427674956693283638835311400506664007482874607000520400464981164369338168028152504872866005567199753620315631853218147483048084578609267463623678894563773075053269450532221366890374338890064467167184494935898119563677811132238676494558e-01) },
+ { SC_(1.10342400148510932922363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(1.103423777573813955727808134653473621738484748507239492801180581966047466970195723414133182159441451266959581287853864037683835390563186689130495805112672226687863965129873556063578320793308240716335097147630002281547038054203808412268097622853208592553384118577008404370973926702489173425300774926838193545278465782724780598172241260370067979244474202345857949716848671376958953520659567711023546762548118943651615608704982061185338615391972442018945884232389178680293529240085532047258981257971
59845e-03), SC_(9.99999391227798240570355499022960361310528390499881018197266455182809171966708398936554453665968911045993870299118374953720723952637206472112388139335340004035264857609225769117609578581537811200358127352219484431189085457465511011367152198078790212367556345107155050267755673291854354611601028709748042046865897310493248610005403267618655965229352763040418269822894976453122559521873062039563482824923611739885583070016982058054313658269935174171343198190502958661221270818484040408653750173203230643e-01) },
+ { SC_(2.25476175546646118164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(2.254759844950726706166994920585923180737319479358157045597728273439570289998336391783033014375348877585771879845900485600493091943625784278030686446540643538293125712738814046569748769599339568817492702579785770857911570390681585914106810184367138185799997058507170333961036299735910021159949715707900170145790644182729080195390356453698108747874787079423609919386574342525075020804099018561725410732387902838583887608693977616264058706604633005069492601029880700428074169926464938348068723237268
03835e-03), SC_(9.99997458025789982445234678521350046147570566747269097297006799068277234530960383891126934577579240030196329864154371255579971284092149965664359210957736971529173205042093081250449736372699216695844500361817207467277119512515305472466332827851429424250625947451636368646391696099091010507514309786281538269045925530297104928415277439273287729077747597056412777599320325937253062039121168242112708605401359148662225387594303232749296186979313529662443155110087020374951036032548173900426505478925101146e-01) },
+ { SC_(4.22764755785465240478515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(4.227634964405710372853989464673221528794380130771668511678203220967814118031016029672740808028060898317913101070854416304579427280832186288744810588364150362180790156081065826636164133429422375928777954517252185826907015383223775347688056728231785144960565629101141865299384446886005717947987074515170271961069594822138084131983792347713334952506711455043586448148383209063610266042510415244553147774243513458247753871987480932310061798590654186330891776700135564785087260049014665553820913225416
80881e-03), SC_(9.99991063511373452677789560050715373145149428952096904697886367712876086292035745304311300137665075775273598372499767812075771242786145874855260095826032408084979781582498496550763382567267778984462635680866130352737905116567138144457106898289831285799702043487961078500270822380587722117890745799126097012166609016750935133471076497871995927122341989914848865983119754151725078374043588790005160728009669720033867672541115407013710341252692207454447790955386571269789604798208580025842831790721417345e-01) },
+ { SC_(6.12821616232395172119140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(6.128177804835603828082135573291194660622008763616345021266541018559948734175034621719209650263166130282741779507750492334406696653026665818458686367664404898771864117734828136652533702739460039446056953837547369368738401063810683262417201493222961113621094276977626152536102231739617473285439428332776707035336351469965059942750921065921373579301864055128848367813142226431457206393181147290662713171436690530089403049173132355962408758028071545987661414547956532915997393788181689292300086961713
47580e-03), SC_(9.99981222542099697541143847070072546971828712330332098329770865072257185985031260314852113919032198468189307863786664906732595418738355515847783722029517753608046646105120123876154838707339506523033413632583032210663688541682592679914200175407756374745025341137154609317405534874067938923193059980542578882066469704789720739170867326643959200096981737568594315302314431892923592597361251855561253029981966969356407795627317125366633329796621808980454701786643444907402366202716161170312320402120775433e-01) },
+ { SC_(7.17522576451301574707031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(7.175164196612675828360341421746814652045469392401191081332482052953397342704179300843088599163805127731639318815078400684163453883902210868304557953811187009766331347668708426262439098345677445331552679452947164551174059207172828996844288002091811852526778701398430507407094603887260893852032831899381659539273933513220071544269598794570923387360539748618616448961567947837872602121176831341163181580486960317460035266374501339829203201451324069519509294639513764145547768729283793617570422842695
50869e-03), SC_(9.99974258178055125266307198014100123003566845596771527056984119690792340007476181043717952620624133322304853462699177805133923671700194459571450679112952110115183754067736732754526085407259235156594925752725123490577463983114254313088597337232878237130488068840714630832409931261169972643381940574573574251462173875076615043890492664417739484346470106699266972677891219384324959207370519061992691189768840015505197742750976116894509011762334997906198598219245703947633571105806140038697463949630336210e-01) },
+ { SC_(1.08977183699607849121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(1.089750266858682250820997479459419966713818184183155368701936696782961065329288077992509097184850243393648850378004502702694915397184768442758231769389260462939736225627763036599921899031122822738046887775924508619677905925635588390558403207437457435171248017768374011211134212700157234102362726025112020375115535963479248937620208942063947393126878639229689529220662688864845101714750102514500066225247989659712709549322306084749130191672032448407807655309162683294603237827852584747698886091107
57044e-02), SC_(9.99940620454828879176449810090714022793966325036551863037524364956170680998552985230627257441664425512623325862947910848780903454899838812983927846862074783892122375682062446356128198011466542914409856704675107268613669808806223468999915731471549560119508428919853126572110247471699299141816274992236135198359087865880841983233018975591367702314503088337980462078592624863043456548876665098346359209814481626968880920471651405777824085084498961422127406379393002743019949466056574181916058099651689932e-01) },
+ { SC_(1.78531035780906677246093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(1.785215519674645258121181935369984578641787369449328395089660624909209839779137314528603863301294289886439591464992385195335104392722122119883482964430648070830496122549607150047787009877317491553108767012213146432042304144996883272159216245089908869067258473688650401475517942230309693391128658514251887563352358674332938717339968912224970345439530974088579900647516956773563901312575562676726272108689610988413081014355823962376135386853214848838109141086674037757387420250772324614291951169133
04281e-02), SC_(9.99840637579225061689220616432075985634795177684838328799799378097519517291013941215385055849958064136044025335614398935312278776881615250387809724005390098759965632553311813973103549298175120350139482524465729389908312417807587194665842630539253758936784938132701160252206934489824287775250794380842975790174460246991944385024354743401221003796973051809502576452212229636093005330964395681987883595479541881975506947710338355137649374464671012035562176747997429673069797136234426619034789230719427497e-01) },
+ { SC_(2.03086882829666137695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.030729228297854127648410508857829242348162491369658567845839380176117900810187361882236879998768561014932861928911272246539073166341002882509022779975124848867512002219096245550063024083895447841015600930678684251119207275741108862105150036590020496643008507301418008511665126160803321220750806978425769392962584151227686074187981878589593830496716894813549035391564102010848052240679446625773701765306099536275947868485383403294238584236831035380890206440572682898466462762219700725364897690256
43200e-02), SC_(9.99793785677893519174812779480838655924731734932423234294294069992449425216385970005461481038863544081690554334303539704684132073109604649614262579053784312170241598442533216766228590091484634176673005320023682039710851136366207849186480817732574508774099889801516500622987309336021622394250832627784750051628496869920836260929136480639941940830972794464084948098223215601031017843124234960140768044637617707391949948127367933673498635487224027515795724693469515440840875190922863554670250380512890187e-01) },
+ { SC_(2.29592248797416687011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.295720786548069019567739621288737253172581992433223248330268648135435632987915827590673453709270132111317514364853731359263035458242056721004083881198366080139427237426982531588255046115253460943968214124036222559274939214818899286688379059736033836518056820867023977510937287769125077585711852006322720013197290033556515790719607334950905469947469638523606115082103011942679775337971372316027237260164934872859429768832273584253484908781042649906306535887363906913296916738923195862989978921033
55891e-02), SC_(9.99736448573833438551901374069916160082285485161657935970098520489678155282193702973150207036885608526804424111064981121646464459825539846765219169457812958666384096707176259278198827616355298087054529952352895771688201169993256457977842748577431116383131563229150919282988665267307314378159810855110884585840543438664714574577985254814341262596212481955968518620628040275972941893015178582124863257398330562940280357682968567499337875321971067674002549590662525412105546099814520291879786638677849755e-01) },
+ { SC_(2.66608446836471557617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.665768637165509405236438346636029033434126910272738528431359412882170018833589226655311335187501121739382566642853464009605045830609789378071173590411131603264752159213762156866479437183807837678543042029224396337339167217498431290155306445195282904944339302482852839113103987387201382217265252890623356774592120277836752359857214207225867194693150456586020497631704084297473169381707631624772146350529252445403025242484621640578977162444018610392831140106550315752675089205327612226347896895385
11757e-02), SC_(9.99644620731442977071074952503756513594379179610965927674853010103238383122624249337790075531392503903192894317965358160816337306507873045677143717869693639520801697528499751699845748033476777032067833843164251267038735509848519717356813147914406232186302906853746387101025616449658340377064049192334098838427810354558514702289969721445128620523303760656579431646500448912155533543139906061180895870794100250533118584128980041772272673997087854201826597188558589194919728518908452007643217258987134441e-01) },
+ { SC_(4.33529913425445556640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(4.333941242521824734304098772219679107978676222264922518678976103048262371762342050872365914927753011878609904822723973907556393306074473369019651059972330881603190144240293462236442389168434567639817092891621315372185194454532374049673116956862599033404660926922251533205820895872526456351919559106457986319885467601613877672298891419076916334404119440426397149427246648813914977508671010839893062879890199653187771793827534753044910950520750432775027557380123788613492877616868179000634657212640
64751e-02), SC_(9.99060406247108182433110591563949184008590550285525910681138166422995597546698572115332083802970332128616627121897628062691197069398078335651999531708939350394021171461022811848765537950565221073815507985663387023414130658678517161835653671716651889105148592561400980999844972491569135768885981972484556339777089910598305278254049157000511662638183390385938716919090639856781430202246719809307852115859635342924078122187579416517698884917122716280159598299212052892821404132658413827277993111120708503e-01) },
+ { SC_(4.77492660284042358398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(4.773112343611823705533467073811599935221276682284234716987940419169144625929718987353178494657407348453286330880539440121732257445226738561057900024158481724082140699179312208051290434738649932652960145362517655996192354742706383091619808408625772945678872305747105966747865836728062613306131790246366095814861263814448054598234767229236208648042279366055246682248003261957281431826124301378628377853681733856693251511743136537679335259607628175916481883592440766922166552269842228762314719743263
28940e-02), SC_(9.98860220378970765416666292064830637521544621232664286948273469114279815643994118299261220464425608197046745838168231112925313418673671418209258128341850371322883422387259027817868426171842847565005445057442801891309920668960507045036275491752451469501935202560886734381086026356191953555384486093207040581077635167409982151341587820821452812951152750188497181793364081579598815492232851725904672864062658468093007372919440011978305101459486087741869001923855853317522336571059851757312553762759660218e-01) },
+ { SC_(5.16691207885742187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.164613369877552308690020029336741171136284504604220434857833367844262475570223567319093974611102967077801318419515835789120904341401449898081738268421700968829427493746410490492812563654296584267025806210502216604988970604672828261111469845048580719767760108620448024406269830013849506202601212970699503326957750134046888658270553060774294542098953999189403513952589356546504069628230951461862307918426458418739602701238696694123761045424527548452953523228842832715575705329414743998619515183940
12477e-02), SC_(9.98665447922360135213521266796851531835766163012102217203454689231482046185392838489821970734399552125784174598237931177178099063321027279880123829101090102291996800001170395479384503634523326119052750469669124649924813326825830131301210568512199084926242430541410903632134473488254399271424441248952830602871668311874043567869499006057808372210726562783173297018290349493718182960580142111841000744070620479569810216657779987098922352077088309252329258306000595216296566049509627139117579193448663272e-01) },
+ { SC_(5.35675138235092163085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.354189902697262789536777928616794553765906546758161698482881059455736556822968998988691899379866815656882967383990753858254151913135221183581296314895967464301133412118561360810293119232543069943528035903754216227808913672342564347680071785564817302427805322914130262937010012370593120984098663237827299697896324602396660588958692726543135869732200366417500179331870817334181549970118635061559988631964095350776928110250648451639397950730471195209329891948668292706682172582577424469964672962391
19175e-02), SC_(9.98565603778031935652835648513686708834550710265717769750310667576425570795156384080269125053377701778322103408050072703031273382230423580101177233233637046691140883620617512339519592385040904452381281257315749593686899133043996685159638851121619705365155446292409398769831758909586549766267584554212254610789481269394405823437544863448131217831503558412097043985486772933184380606483570614071708902118307606358672960875898690760212848810279332764698105509738345245083749332937066279013972721999860951e-01) },
+ { SC_(5.46618700027465820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.463465318641856522662992659895882098304779720385963400467458962709657481111179154074128449577832787311335881742400480375240448759999289677534251257056825552192771902766603959843937397544277919276099842227371140580024497175937673473804127814167187201397637635608310699002177495696160971835019564868462758787326728630468926586750360706088697734740081256725679910974621369338444684026154566585777511361722726445081978080018179461070587777202875201484494374080401535659048312967034278373376512927959
82606e-02), SC_(9.98506411932942854108042459383510836576611626853085805857841828589727024599578729102555269651786073170459620653723435360146680969297857326420874817490649789865110476564950683767869711247167921681531780596807917980825034133974022054580775539485597880316923766328630105414714347920762036457437458978017894386560496656019128174531675104091105815589303265933653087805554087457116460752142693192884431966173438902253445039424420104100800153312932924952674504484086634204703161803242375829959949079328371875e-01) },
+ { SC_(6.32438659667968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(6.320171406985715533080447132122771273055803636759946436590561752666034611571864369727729356971867755844475741202503004829558527370952393985240474026053200858023605027344385273961170347103427135400594284418629431073934682473515523131058179246717505215721931818713593245005318384411028628594315001004857512005675758891521860679035429126890558204920414855862157461179640262018867644746793473992596052598993901161835491168572914162832921138557836275987952046022583499440115589293108776349290596702513
43108e-02), SC_(9.98000773215447974930857087008764150802722713855075131190757826889154050945553921220661121452365560389264145143901439511281161342450172975749282079997770447047962785911737177061850743521158087304394889557567640376240963884213622716828950326306607973087843641309155595671290107453886169528964221217684412490926872530448945494986971864760658616100419196710271977256795134280916032136610315122731856424655612669204766978915937480231411079284123625076175877311308405119710061909174916588652383642106075950e-01) },
+ { SC_(6.92570805549621582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(6.920172806844756129026039027704382072298238097054712714798286890224456237262387993869388093493440916465285126872470433321812043782218937534098909521326440200578412177404874494014627249773263262405885558738459384124520439505432968127541498011965794649298778517450614945589241178276869649933697695446849011444411942291648912371699790612947580720617271457676744404856500231057655076064083290894250138992995771650732648231963309954058169168561442111049134268856322865521082519860448689552726266431962
92768e-02), SC_(9.97602686861027172603564582943332105673127986071266218353266069809274511253146184206845366224173756081058509215281054336469951237433524652820574411529939841191369181516825328759338555257162658220329035742673409660923162322070338772130378093565233782382859190969874936467078560818088676989913102487523016799437156795510688393525166046823170397107091522702108912971248346576465497475646757504529354235293789719140147756309348702788375506713736572756372750138970931785579136687784786155541123581503410624e-01) },
+ { SC_(7.68246352672576904296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(7.674908741730091350698805234126978225084575855028907227958656967720477298760640754421958191279674152521747309606371804795821474743092919399329820655993445839209289851884885333118812025288941820538804156214882808764011501919614745899233563761464565926196694628592811909657490244206646374558186485457450302695933903166392608114033946104047596886325739167542716855829265226789388929744750432213605555168452484326431136408074344586745779357650326433255685192271759003698586362140192023035339644194222
57850e-02), SC_(9.97050438834772040838901364158313289434451716031250064153596345308272018821197676129084180229236664005399614878677876975471250325523150960303590418697802419593875967006452331656192889917521490087559820130552413382203751563210591862975073872269071197791671987098499838808586255207819747398217977453730543524500812800441363575651210847109655415586570890200280733024493168949243199540216485504542435209304533986390812843525686313059881265579087409955174014924808295795997240217218146624971087121410183716e-01) },
+ { SC_(8.09251666069030761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(8.083686728917040418564013995659774626331455412077841051956352817663713500417156086441234394936725419937897457152823397504650695294339736790633565546364816769698385316417297124157940204575928868997931650518388682220126017380896934866666633839269359175226272194386213647516465847263915589143718883195252385240466691671740178622655555936267061904608627283235631842957852357143998513252676637660419996604663145770956731425558687648981185035377428293382939487728722871617300139245544208290791248068596
50838e-02), SC_(9.96727345309073504356335470880926838901535446591427240450997135536600995694562006339829380366181693066021072124078607773475760189943037842585673090508596377006890419990768006320611612165829317461737791908612725831462207730332953868156044465579321433828199753603772645372217436238602125419724170481393494192174338226617942337887718845813995926557696166708043078610521363485223670975974379541202944258805434600100105554638957533334813937130562560651036711336483875166644356875980418013651512472303074208e-01) },
+ { SC_(1.01393043994903564453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.012194039089439331996086838768272668223318966570151193484355159958732513628925818985239691104134730571754848749457079881947008273944924849916660816945023607145518053791723989779944449537957881934001706748456051726171769116109815406811231488671738325357699532754104243399061823390051381306013964837786421264189029550065371698623361048129226191011655000805073659211586211438380376592911142177326985243583308212953738160255797283813764366893585187388156041359618837229082867799902493762277759796590
81520e-01), SC_(9.94864127543212840320288377821634845647085414624812202931183041261168843158195990345771004501686363057363117868426992237675460528773854521201920483305361363360248147058939179651726098593741851629897985101915713322985077003831521906997798395547116734574812939319828244003602124162864904183647670159780723265956499501655186584470976880921550426566136335393136640881134844219644797108944868300338025473599742848702293332135126250466031987636207455199516403656090507615110967455528204674521869347233184283e-01) },
+ { SC_(1.13781422376632690429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.135360748424495335730563145606805418885870733967804717344169544522663708152292140231678059702441968924876149068487125760355450510604406406969375784587533511492861986598592304910319133829498618421315740073939629255063013527405691951398175734601907309331244027964325411391112747149683319911590103281435336365879054598104580857342537110851522130692387269128583200159711920296983921323812840604024469090621058342215747025783717132802665380278011353878338071877104018034212539617410209540816380538673
25880e-01), SC_(9.93533874464967449063569644542184589167411915145555830925800925048382916374957718228156373711609029097586917146755989532376282173266030804470640098835579196241275798250895989878704696330453367858309552789068201155211873250074943597130122033727796915843325644852705268264420421834017375881556371386266487723607694010828247880528072888290694751350895959530491979302529696561595066224369723425657904124135240815273639834011392138971431371570459667652548016159381399021194622625664031635527048346353172978e-01) },
+ { SC_(1.45697653293609619140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.451827265451199108963015030655135540898116351813470029193609682381065252398491271060837234478846616194914763189961008880581497692367406175536574235432461262248056405785060089429547199198797710417638412625758492840954018120244520557151049538425931116989157757447935626217760468148331940512205894333939770775739017548402537768544462830750462409499803807295239820268724676774072775067412719155448331284975033770614319263272949086318088279405304560388382452207822047135287478001400988355347026974269
26175e-01), SC_(9.89404859454877012674104360255215697445250382526116686234430435111636180480363210039694164084560087713657579140601666008513347848135681345012895495404482313374018887800206381904740118067209223511554356762905416336552796599320637752873442358116522801991236920325855007630644300246736916456519031036406469453087853685796047621522776532546594623313211992046640425909727951781150478344661351442954782469918430949839815203310019596602225454055470344982907764565783793045739939149621215477845195650414185624e-01) },
+ { SC_(1.46310567855834960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.457891198834679409424526665998381033413599604497188287617192109575234135085896364394904419989450006900464394237197954968609750689596088331184821267529736859924972816835367282402685875879965570813045679029469696928880060234332599444865974537382166229847954129872387201741328360360973788795754287140628523732369461816720745745869460771589896553788578494352030640732332482547430272235999669586103078896223720633480703595400318511758727783873289893673083442170634591043080084679954967168375754703751
39856e-01), SC_(9.89315689011148661602733208421699488607704021068618550402008672427204988986372856602489837286757458629350642286967590178573609349566514100296374300421069016400647354574847125419309106253968630534855968665549713372062563646883184246277672032915339186942154941352874559377354486407977863425325175458300408087571803444300804433696034967764795880754888144181773120850915128858590327910126025450201565492100046247582395277159945474527040466390117883445528272059409080559643218070128411416452778883832850860e-01) },
+ { SC_(1.64792597293853759765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.640477416229270769392152712366545941278970117500931059074212048843210172949530587102213970423444709585850471038609776935132203733323446733437584948667657379625837015121499284906602066190981215649687463712441192452994808444061367128997759426468223230579295713038901798031705527560846640719101613928568443727370367782170742635193833188783082826867387676770494814005035979995059314800658375162224209671619217502981856387356431611925472652452449001496937584088514791623658926390748702667425751987890
41130e-01), SC_(9.86452400508213756079085881807272936135605003947860908459482770413651759106178422243846316436626721487369742516524557342814943387245800871775776486342542756619267901007984402634148564481396767251299084570255625415724967480494452602327750220935561537677562719487800489429908078112186638391572916817894043484848106365987479384651955220754065637423636048081167989226482466763849124771027198972951029669062947310139511886934376746339774134623284767012226001205043028480105389214119654265467805704996894917e-01) },
+ { SC_(1.68696761131286621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.678977533816407771964909764829535884675088316833727145587959516896721275537128980366629700557214974671474604426788210109447866650396652917230310555824895721363476985233598336325077279471209367092303822894818299077101456074187569676211082593493464666867301598137045778951063541191683929297472174982506512619201492178840082427215994054762282656477370026624349873999375915318777049047711110157140730212136357665155552100559718777893180749057444438081309386930928027020337747580426109108939144119860
93307e-01), SC_(9.85804414886339273471656447974713083827165382741323834224259676470752447152375593455603668369541005720264056620625978392433528478869903852378131490186154661428713627385705999552117875818397456421062795844691099250197140896284553382461330648118896559620824983015387112024605313724313404676635578899408594831199173075967069948429971307857666478428419348687818365697811430472301400125955439683148729027958378246677795263283167676059509815153284641866483046913274472527809361657130996884935738437688390849e-01) },
+ { SC_(1.78496479988098144531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.775501429478305552173904924922074361635648563763976916034717007588056205050946989458470038029982148136521480334301043464458838496358266098517924424173729173930772255041697660277611712898162041190153551228702965883708859414020840213206502350687172886156641620929938780806019557390987559345300770519219415038479303365451184558073537044481776124577871430731521524749129061283613725929531467020185725916958267348378885656903789184169267613654280560686974412934522851128380985359152096513763270870335
69747e-01), SC_(9.84111755208322331601783376284031457134510436574988472806865188081776835817350548686113681409314838853209555871734190921300414611852299784524298797341600773458233613284112776255935237880953315784741791795731746499567321404790697016686075710158398361815849761549871491374222001546515259044955559094074496617496483018774261036037936237441724292540322806453448653765063482075390934100259487001653040960036047517057244093701162162170265301510994152643519555751491036603128207767303628421845067766132528336e-01) },
+ { SC_(1.87774121761322021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.866726070705090182007691584671571367561135450548091335145990067983418381474283379159642554470408759934466010949483380077888671314954926835735492522667945043959308282571998061931633179440263299300302760181774677999473026897471860126186654966597524134116049673423919343403452142045274331517597296247021752542924518375355506475143404905547703162889499097921250711565608134100669464732745999464470629662966541080258474803496409410905601373039577683627020652043050221599121195279354084214997210861756
43635e-01), SC_(9.82422178989002337815610061337143809470232196191426172141227152440284416089850158360549098995569868789283179124826053849882848723627305374894506652402723568360198439729964565008020548646418669353974087094974102981683934246429517284904279436821871136249465341395739281782779316039327149652772606504080824861909307024955484203942865858838215635646193223373227875069545714813048165491415661891289071426040111977674591777031031991473152177396063672370564663369651796710946807883420881870357844328037459019e-01) },
+ { SC_(1.88844919204711914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.877244750070021311921929079095755748694681079404167261402625049020126866771376233903904400180940879479756957829543017673859933370969922658318229599835881341098652794538188993788097731259762089846828083248831676088082748289492886337272305534001976425651857591199970797410724914577202755009044288364913226590176147461447086985144976552733212706252011569083149941266880022853376490911062434208980186711074615377538422306812752815591409846286353245373595679460331680590916092036075508456414213099870
51017e-01), SC_(9.82221727250698436817021350854404602400242591298039572591014001362833626919487015527681343503737629906656769473041944230032084140575629753880323082381394405508949229495961813072980287617641885223163912931175425781095733566247409734381851802008224421103956525409424631620202344202770947172844441311566015165775590081462279294150426616367490190370747077080364066702877391332809076163131938938563303607706965846945894566447961844220594229365249133061197350601224127232615735975265049548774049804588028913e-01) },
+ { SC_(1.90480232238769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.893304632730831715013560479757384545198347113287756687992694182625426936752302111694840654838677524117967119441885618191646855848192391515959032683118412627961014147138268190503653867748226728465636128836060748221717878435888646522398342648128456604975447480086121805483843510419575578989051802619974354626732167543394828061934276270377070938166795050084196417820780972208449213342458439675373684555287970623665923337647846865687440550479586129825356774987602260679506963589169375656353927445760
96899e-01), SC_(9.81913425754429586682013889768017532600113847811291666387725000947456131091217295251884688576304598996117091444449076993919438338637549621415126694566727540442457041137575867954992620512786069817600004167654500318167894032291062929699694909648414253182150669496148723694315542902771679739586190635289986724110105904070094436041592234600515389991658872221604551947008209955001901499595025153606756488036807775907625811360112539768038550121486610887551305042579936830908885733477436299200628358975660870e-01) },
+ { SC_(1.94859266281127929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.936284665570831759377448642447908306680535989106200875608556636283263979187479174967018047123003899163755293222877950718449728979882828237791137339635603777942420082021981099205967629339355555854244891548253702406382382057499138670065391560125538353119201936782581515537659768470354455138694427291109469644947463097152185346103524465667860393226183400260363413645234381329198332211817174136685831768112616810424049345482265141428226490441186164539156888886908016077062374594406809552317002922368
11361e-01), SC_(9.81074929319240387502184662874193366494892376995268422080911994896932188938843218100678702648454595788195800459189480677724548072115284301366906218387046613476243458332542611925311671611202355995756808329738252593319348185404315688233584739120945457255900313939696248899018740177998528759646883140416866189013968416544572880129678451134992718322404596854003353515915190671579319691512530656126775340885106148417889476553076706646054806482802741567572180944742654675167468422482141054087377709351667607e-01) },
+ { SC_(2.03215479850769042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.018196826469200959237577182577614767693019896654911854292891582056032483645224553849391362944094199507382815050411263614316331766547440476443956950938333829446767181630928244288610716340270226900563231060124912559364477574707531472795751633528643812213184433330047231427214893430221196689596461218650646558901548715709321685289739098829118304491561651552415503547683402105856828039598405457834044166707024971829169904224250256220367366158730063669022678865160710730819040580124695989592210059058
65613e-01), SC_(9.79422695109877704279630115016162779341438729197653622653511871860857427665621496308005256225301647590150890183023870213973551366446778827045639583831856224791984674969152761667061884727276778725391290362457018194029231238622882731367668907983050807609897703313170541946017503082428616641673224025500577727237921678771503953427745799384234510120079570656146847344758019012266371807613472779375992191550902090841424078371482339253787081150785495461758875501897023881237849778458350386303488036080606616e-01) },
+ { SC_(2.07936644554138183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.064414321117655988986226966280346380081856958725476281860346533060911378427929219102718096767335576691035539742940533289113262436027827405882142971547175339701655223311606634493575256174599359281998818318449760925660680299552597308259528552666087007517306815015767720947364178346938377496630279147784383432989841354408124562594346711970554177240409059081685216507425590479748958428424291416328025702798763139148036743126940545724900441054582545392983569491767204398077877318980384530661265988130
31210e-01), SC_(9.78458959337407914880017857366240707691566796770579819059463425270298886098360523692900979968885125117268896174792597043925346271994102038730825752617956702096517615173232766171688879761539440408643776852196199211523030996935750277368506862219703970756235309064425023141236695239770048877371573690168695503939188151919945120866996252845385595169432390250574335809999951819900409720087947226987798251572790175287245792567131272039006656437435690023152451503423135850418689659516050248598574324279754693e-01) },
+ { SC_(2.12829470634460449218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.112263714520143912788748700710733102553727024637779687868438781331241120971404734596445886804404617064494822941232658086987393317520090846478281934420259740339686495424323481237462070239936299616253925801472651294001993137358378417939728392047327523226344429967429989851610498554466038051342339548998771020747342319666415277187999217045056666852382901729875282351121498568995442155973114608083991369877195643736294456172409529965871193319274216702522933115252924083591673745269217548032100770876
92532e-01), SC_(9.77437169337863700915956028138184587880119521309718402773143822868653160875229416631075342793838257456807094385135358010247340775654046653152968486378214625824585383995774198214703672411773216530432708000905914410924076763688720643025445894500247986983994857940703526076436401941590579776244250215552581924626810062975652107309232328773982583693249830181955081354965661172527831758216391460026530511489630646442106088711356971367646510599128382728363593410702655779358342814182142737020940630712872361e-01) },
+ { SC_(2.15869307518005371093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.141966405053651127869806856944283446572449633668763027142895017283186457355131538121278527408647500880353289070973656857286212933528307770036622936981784072441784343332812992426795537744790255463371747284417873364692715850233421635347795931994903135235225093888060598355836293294119119941681792007549683694664650532771898532436914000270133348991146438825478868845577051559950625090923708194025212096513443353120286051521971780400250815488117522404916822143613280022391290214163965485596254275483
07079e-01), SC_(9.76790560558513680337105210359946000639131660265038803465419549929502333210272302004423538883524995851695890751897479645727458798428416719156047191385293536035128459622583740134790612138039228883962636358032372726838818091247096202590945439186853892215507835182481988301876992478308045540062442385616914635141454198946321492170688154415464432037046812112157612157921692137918708124553009612313024458692547550071702227895302886545623596270022503303566442880581687999337288455147084218206433678719726348e-01) },
+ { SC_(2.23670959472656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.218106245972411328421203352145178343393921435956941431282744534340008975227567072613723959343166034997175428296937482821611387149868313109936643318900865216018641060486105036902876569264798434145145386412981868708532477691651258317496770908988168223998545102095719269051481666701054590359758369262485208399121082037191669475009981769062613662992894084293024059667819074317228906164678076936267046987732838533614052261696917170781750766470957214094939779860590744550507381533826361349955107207106
71481e-01), SC_(9.75089763465795884741527131038743144799709001486249188041326805783918794629379695544082151093155092077802612594232019135110813148686802535895584065956564082709443629066755383612577269625034627767644996066171592038545406563485710108199711112941937879356362448421804832671387840559048718713150354052800343295008040554106973215286388458315674666252648980563396332758055989177687609577120292484105909678934546857037299176307632935036447727717180599996592072426254255769122423991437040773975082976170615027e-01) },
+ { SC_(2.23940968513488769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.220738995602623656942867179475055191112836441706642067710393599269106303310736587429694127748259696875619668956082286689336314847838753973767376271058227343272440749262452061702931228546976404409136453773764087956419816196955656861820462256978634211642394154871325763684077896784918739034132639200575307443206826686163038765814656003075777359032970399972712742331709329903766236249096122895329207709874988090665960759374444206118137122117924727896260623893043864325365924996291267672175894946423
90982e-01), SC_(9.75029837048127723940822139588475843177309010241646824834890251549637760943126873479985410594784222688808386101184513250743227375486680081269879083496987587993892050541293998127521838902835032687085618894862339570796558908797414825586693093266928416593647501074052462459315194898583715110932923738805350182790175717405384839937757189467422189694843791570712808954321923019264560496148035150316447485360041658090233265738607692675797783748168822650033028609970920677845305526624179703136420672529771980e-01) },
+ { SC_(2.31657624244689941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.295911826097490771270852387301701067068577368134278023667526645273360577268148905163487801496839214739399663304266148809269205133633918348212199877071850703106289051272205066829792611825447554126449631191491405291345131512737134054821760727893745853519103634212316599044464354827369216720586065782696111589401835572909639960109714366453143635615789154710366364271663690461206431218398060767088373771753138299769081354862911589927836232346715134949931964281999142658826265102368269194617305529723
91764e-01), SC_(9.73287156428079478716002235261840740084659684284952238317074702351111144046965256073574026272435872923902375480127932863055570218099850498058845991144115236244780808787578236004823706045777816872726031536853820091469953621293211418659119493664242846692836341723477399946935585891718727826727210269898806213165073098754356297556028189303673469342497995341189516686033293401960600894424313593735029754214488412768090121108833953441556711975775178389200877887553119192408194268363451687882704343063502236e-01) },
+ { SC_(2.36419618129730224609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.342233494130563975350120026499044364148303058441900283054350231592737259156251761260705365134735037737614438138968601795662262150300546988843647393401754290598965023027957314308292681269137581851279142302900814661169186212927975330410729846123932040170635728072934394273764180972794616654640821354129050322171374786656831410936968290061765170722365643993621655137315163885623756698397844664842943802569564258124675518793259159667799273145930023219210216187743334125099538344061883789436304206452
57043e-01), SC_(9.72182813358541786002433931175590541460042986543364086630592342885383343147001536864805980731828619596937794265961718654901510514211526139141566031421543677149169475559185660751374091780739745412205256535077926002018568915189369879576144325949910721880001449576228384354311343808510925877039105192748773741470732514283534463934140640280674768143828127412493203855945797591134707019619827976778153234830092252653180994683559102578078078112922678991500372142077874616293332485901302909710329044805275133e-01) },
+ { SC_(2.37086355686187744140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.348714880977394993251829314135053516942205935787610462859194029003963140389814683176985137847287537076789040878238806799013532286055064932203152564941057446456927476078122409207262570718521612054699050874868667581697386951970384387405644893855466721838921545204314621867917392634844184816468586648388986249465503382960598889860415361248627673197809374911639067321484642369883715563308224892396607669505612472851756807594728149305158215425217529607229199696042128268258585210921838863103387488810
65702e-01), SC_(9.72026431779894251196781770060370781942232099197921106135120661810632188271447767998922653780711101087245102808499149689925215265153567962454784863549632555036609694179109787570991771070663299652723230727682947164732542496676768999691153749799756038153217247976912922241000804288378011338863184388596886818250778639888527560620930279032479989201300352288270935683655631157863204440552655928070032781156882878658304467502917435388924019356549251639438049985256013104098155541508692246870574344519742925e-01) },
+ { SC_(2.43917584419250488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.415060911452770882580556446394413585698179624820071001683263111258750638360986206229596514367347018824714491404787139007159092798785001293811835141182620249998064484082720508003098732729305338107854736862088365392085189726388108934452052603841530522015441223707113320248753862296546331351164300099408206602711756203112400073634713908932087221129192970605484359686825203857554283400935660442014936515387928438991627138050172570898056102272427223624527527557126644074377158817452500284926883148207
49267e-01), SC_(9.70399303348744740629281777996064222428263418261615513535874548301569309382617106182778792029170310698906217117798672892846704087363302115493606289878448928850470701791100588123422811681772912832747047311027507693577117550759576184158586663998125715627678041983984746242143715742993728038685477261982457848406983044715860265386172457355491196156817728778006847646901469415351803533371713662907224869572879545133363858740762107694657156648981963196682114252505711326234507610327782656200028589799542508e-01) },
+ { SC_(2.56780028343200683593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.539674761979749483004701523486308564377788536490469076944986911344997019231431275044697443240183908425603735256074389870811125512260678129982351009356190205677905573439210368033998493298682176897509508332157940537988423320779664487436557757062890283082032912439338832173297421937538361707988164648001839203341868201416254242266515374547525289875571346354656075642145996588050786085624671243530380440164032202869478305665994980095408910724582801952844786803725822768033445096188659394274332431868
35188e-01), SC_(9.67212758928267564909913781023042850649210074113110150779555204117688346768013381733678013082194846590955208239649965969631661476988930023126634900965028238708450802408191612909963009729559467638514828430744779946263855525266081909443245556093474249189026431060834809707402911975224217225893793806041927048869332697822498929087665975883008669509854597503249122523872773752290855879726093009296214739100119212703964980457607123946633959558534528977914687915954938045274688207897907901409739771736928444e-01) },
+ { SC_(2.60797739028930664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.578513970116843816532154935134291377965680275425636880656826831819258054104988873348301073154977169410691266258834441398037098785241729567708086978060286114817523844746935643047782091377148252621896282523116175798794319394652055658961091332235487769555389057051459125710380824870998198049761092687929018461067235718536321866123205501539569240851484922630018173635025648909399248125029522214655698602639985097291781292102483188397196882651896382588940204603097346943691001441153396913390843456449
36187e-01), SC_(9.66184587467178925054039264094455111955839447116830926670726695111056480734643576588829589093151750938173095092013885475613504226596420519468505671990665350017874837095070411073494200828261854901406233203038856164661310773504995966871525893796073964171780940959271419513681242667294030646037129134794487249645323271597514346135643239350470405850128978217907312787357546601749225176561132483998559247022954834588628902720040609501476406971711684162585915398239747400812327533943923544201497396858592127e-01) },
+ { SC_(2.80308842658996582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.766524502964820071851091333796649866105587541406815862076889026957537790351159364204679355456478168663424608572517692613841098221600708220658134124700219990902760036502171993113084124740315319592358814029334143287745182978088488444460105937582030026904352964170194224463488696886634928676910858469320640196913508188832171028444580715009534106159674462270014058525168152946440325843842329828163783600380562588653491970652180453424013525675667019664100854688890248641792055069362221904096569680119
00042e-01), SC_(9.60970042064242787586616146107116426197837340865418091095527345944895322898303059643272818932380762260288437483034417861243469274929582394086567541874872298007787708205027386061888638647875009556202948648007162736259944552779661019144892638210622883831588324760346381909877348578780965122436104866880945115333116909739647331839907523858068914185740875256136194033491002352245919072705583433053970894735852186581105174794397321295820740029624593397555262163670489560045281417159094407435052568544583826e-01) },
+ { SC_(2.82572865486145019531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.788273975170835014713302689737939820209560430564850023111286252034809091254546082667085481539804510850524732106012862471731300260312295256963227459550734759191515652028960097172308469628534938392476259554079988230367757507042442139164492087143683641199341166919727920828382050320774220669686002005076198555175813473403687054840482904812497156898251468023253278929789118447703430564883913468105806104655442181576366262644967161591391730777247181548811449940108875267955366310471476150720381662189
03597e-01), SC_(9.60341232267911267381183747437916412664206145164440808035842262775205190353599826199664529625608027776265256698881777090330134881882621301243080560629047040706379584629760415449833531862131285447677178430450969795503445162404785990634547384830535281646944622238215968178098765324782398030728384865653375265992828298473324897027995908029167111445460569023719561109308443466971207024803868610011124698023157985663134329675540970828039088533857954500329172829898440732546662708726879160639308567661975472e-01) },
+ { SC_(2.94892787933349609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.906372677178414919495611045353645794805166296194652339616620884297265078624328287077550888946340848116140334400363893823029357857982274122926258775436609820968421935495910176821229509906828669663350407436200855284724435759189555193175675471151888215965251972894225324472332711716244715396306994502365456601143617799392582474434076277496975590185818191967428448581020336947454031833978122690910945875004370898128518642236112105709992519905670447043962048659602232304810308753485908457290750109475
70529e-01), SC_(9.56833307642197273737587591887788902883665572636978591492719689000054294005116111584930889939634837715671167147624840625565369350659889484795889431524480465624414463011497751732807591607039510326250228891745651691444695736686228212611256519708123525260472804829095732402311433573156680016224942389308080982389958686607782516409251583788265789714265801240259587125208043655617146669163064294419760829759381222936837853395161186480505868322168426789639562818842156041662627171754918917363217994882867932e-01) },
+ { SC_(3.12102079391479492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.070598417534059998318747097492531656000728485129928446358352157735408265190744422262316348680556804763831817679279056645491632357634218731875660266820561860672954162453642370118240466334658523673853331025715621245477651189469519559796886739630595775714045549608768336469160519470251621433088386851348786672837594791957536389222428521161760903131589462243420735202041977624409359943030583577496933231289484190473435840576359447179119260309221975848570791443925336164411380456860082481461675557142
69123e-01), SC_(9.51690208829729037576840431988604462673713730884139839166679534444816195557573539853339641864393360660504275727368557568823262838299991557009265270390565138215230359107809334255713836733104929918340210504480125985259471413876980637442771471105254330498206205878359629897338212290265053486914375204242144872790154864198319326981914100262103960665203670552921064019141135434898985176613523157296876279526400987298715110843171312881802185002847789634535539274790806820388986630862009819666177780928476240e-01) },
+ { SC_(3.15313577651977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.101146044864523716022441482188168812238916350193245291662874485961516391116429327169349980313218877580818221052063981271738059171784218898382677088236083220914625474826298873257143985791523731183916617336319569356704249080700965982888901862999660821874578543793594280080122219814876664352012676885269338311116405459526333834957302375679156227268145231041072882358055112341978705402431633677455583443131568249388354373246065287738270624812676058629544514621153514478984392723645309654420528916727
58788e-01), SC_(9.50699180647701628487396566148787086923240127099513645066330648238578006503678248562865690654153023205128969226084861843000896121071452674247004201594177477295365880682146363659658132961000098514414933707666096881539616427931595066196727129449358218571438918172767600483899976768586022179968871687915301710377855566927304861652670623702239418492743070118830570825034432808087497781397107161393707647233534139257467088129639462402890402094063987132136815195270053434040240225055479367979728606616266096e-01) },
+ { SC_(3.17886471748352050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.125596236517641653222128078705150136293240291477332831363681574466067781889305644456092048864999617781131057408779743221351981141418128037659940028064608229662549118674944815807892657152082549593177091572416110343132017978198679738633080038898632528757680213089536983420148716505140042866601212991471453339791512954173170405231364897946476876557505183697310365889724625964724750887503595715169606585102850902281247692992180772913634524826505427744678251153168596736195650659807989863743094524851
70930e-01), SC_(9.49898142783039421065638698949823517999068885390741197315225792223882369515799723390096969334365360799651944990990126008736260456275912352502979942152551441391703277100848388597129862238754948539625430194167651244865488557343514835741689946133613892883144839999896471282632969671310466844604095590514416359901407768042119424637583642405348701870119240322957130956609821641725423853445963795969550741785845954269196961410704228281960935161638393923018793106680802489022846850256426254909441722034633798e-01) },
+ { SC_(3.25856685638427734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.201205073532697818557534953798780390660378540066661004318750564218384138044347995385367961314013775860847568481997620021554637659178906904632782504147690804847248987698875764436477122770408556367368607932836735052506292134352632430109525106563509408305713184889776003803991907978418113062564492649208006810505904865607314007125117246535455210794736073898574261025238108279175912003725684129683638715192103980758937828353258024142544081550134445804139320233119743157266209680688709956416059310141
40420e-01), SC_(9.47376831451922908762838282957157442145992857786296235784212495393301704460104847354739924979541258506937517027115869803548217365292294994683305525441088520786504133711569381042592814747227046691642156766413306928961886122517550515083018577582754286916121647946117367658688563677805002026853118734799467123603953437571908546773590375255669559554195262563484850221119526769206964645745371200283122087981568125996313543979605856609804588391661451911736704107832279674007979966459328784100364931584175637e-01) },
+ { SC_(3.31551074981689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.255100206204299869370423646859959698989654604424260618337592132716187755723325025340899766142181296386677600547015392340248272323414879007440150422290868833409424758866707482189677684553828024705637545763942859263489809774358679078494047439161107734909248265313894952272096640546162878632637831220175365670847037439067744843774959150588683960466721437310612434537726430540969753421879857273677829273286311744313097155609751241329060984832548748929016223077389856800217708647919266809496978148982
32436e-01), SC_(9.45538590685587641765146475422348939326429323171424621391898923841241370861109699620118035342769801759409482544912117998047100210926071569675065306266069361724656534365587037037868110606988888827981568032856808887256355100408672863943230307292336810456098125754092279702826073831888005340499510809313153503087612891627341062875052751636176617417058464678078249954552097871951771955835877730404553836456812938118844431736505209097446001441186653820938292010753906907384093172264239077979415805009120406e-01) },
+ { SC_(3.34280610084533691406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.280896856070807092282170730138292449800868786819490797243995204876330276383941904345418145384009349050815321801648164203880552854206657328642623178154755640393163554081187017617164440271121078251649512813909005761581916016794718530894529967500180863951278437640807833372578249906761498869205638497489657852448238914733057432741556859430186296440868072435318463691239996732907653903811035576367786844283083059432426840441625344232136070600460232894855559068335554933911036955314987161697930216462
57608e-01), SC_(9.44646578461091414178776104696863057321576035366318900946928701896304565272753568134499944857053310401296727371998536245581622116253817033069387105765921559789265574277799055105587127575674744417653448482768341621979927800216571038767329703960510700455029704060654386415669464439544055800082527669571331791333036873476255791772619645842425077726695598719804374966376814363540378984520539528376950546852227736557661595457652530058530010384807128844351046874339155347485472200170675059489215428103783219e-01) },
+ { SC_(3.35717916488647460937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.294470928245128149369098573339783915230336171078452242999600523100755055735232474238068947914541730149883403195772014120863736054673611833697130017117326879423380047050926531890776988112971437429523101324671879681953765075252593597600530996581772964777001278702632268983130592098346888764075220874408890411663532662038043922324637268422688182526720727187586961149634188087368034052708404508919886500292689280682675934063134149003028484926081543258180627553805354036964995691006841671440165346224
48204e-01), SC_(9.44174037468451489365267088035088591308914231862690972249200442949837785950407535409027599648599285502776226478256147933109443887177193380043180048082903797204441059665700123928027068350881895026828260257751054653259489839515100869333027571748111448461762198635703731207762633225551171516871297042884419072089644553053235367393558819799679458992088965895165907796551275946174973771996164630689803536114225907566862466732519042785081005181299097377872608409782965170572073375788770099631685964443078209e-01) },
+ { SC_(3.45234036445617675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.384169139377337095209667578130753853539645219003900942651927777816291809767595431549065438367225782972252069003913448798937574918011802284126193629040080805921647737317157709018121244650811326832569689929834634906917968265752966038586719861563539811160737060442502144304613639245656098428486863110302358439929062744086014278050125931677204872679195762419944208030731552639410363320625805953565442075420926039818438017891504314530284662939529420334581960094662738357592005148635656393051387313593
36054e-01), SC_(9.40996276486182773958200681776617930878019625164650782459989674721685786733581681932601940668534891638624819666126614999639608538389019139033792924807887873658144072477439537153459888339322514858220157931802931480799204440924867456798681215615902875232401509200568538258491816834661886375031648651053695695008518747665629066305896997139102057691144830863318193139443798505854893484971824361515308653303166230586156475304484860728890612192233269198727803441963654040189339709235023467037077230210136452e-01) },
+ { SC_(3.65287423133850097656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.572177685078946625682049478432556758079379356007007293020125876965247833578106073970488110658144989679382268371846352620085976247221317692019713967236305797153812133295964001813633356575773515316991090524373212876804450338260346373987758270653628476804836936817940056852577713937443222774977342138436278728955299101241927733467728533427325648568185638726535960380770015558824937409800969005012696145105073416736970894647260732050614971292828109739025298616734746241881738491721056730560932747738
28338e-01), SC_(9.34021127096298705697968078480829135151809558383637730911362229182562918575674304188846684078772850195185983871489264274885680433213531999184880930953027049908681630726745658816468630368765358193438388444550380824018487174292352049577694523697545985202828138906216082567906790013271192556165028307746636921068023709736571214708295379075646659675734920359518901568485358630990354123359427090885536764271109786114632830747506518916681775364286220930917538283026948726952104248202947677212055723332125159e-01) },
+ { SC_(3.76625776290893554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.677848415935787007506745885552900095068337851983483197215103134415015460583214632191479683157525778984404232567136914484435815741926916477049954405052557007516540766482295589418899126019778210376481845902269485905611214814067005235145520667401756763130667360464550836856773334442702195826963000145733949948757871244046090235287114122210655111928832826877200360867787544434335134288173919199346791270300051603158514127866943358674582316067817520831851637415375319161167867974234158116807044259134
70479e-01), SC_(9.29910915246178956526127762996390085290835200613356307328386220167870557042453483854688920463534735704848107614579700250713670021607230520617663103835363172580954471811001208312362172610537525644872697074572921104882182234857955896468720884006442649267334904910635015379373768510723551974327520256221002373202064028482209593021722744220780901469462072704535345501354165333323228964404508546659907713114416707717373662856960688517308985925955799243302609395864738074576882921050328851524967663617819963e-01) },
+ { SC_(3.81423234939575195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.722418012555147801416452559869387068761128077749782095093871487291693182907256067607006536819133324029625439560386348445592496609199585692164589905341203827179088574258554939419997280448142880589209260747114872065147668105082411977850366964924567120637442788686530386624786254198831841887611974780756666870663720362014672467722725147109528511512735782676665625367741844257605720909074814619651871950847397837319221234892919015334610935139973450501661406277178689116858690104598831980453913859264
59228e-01), SC_(9.28135788232546194521132038364809995469390110444963627733003823836878564741627652253894760903734146992929661240763368047921077487071511504258052886480661022417869838293793674031109329225882528098987875042539736745335504700923216449394354443076336899632696517389138146947845556614246814361499391989253510866187677919616513098995303183374067848140596880185394397200828384737411722734422037179383107166780417945465829318245357854600550219827881612091297993125943808294920703332405152597090926176383075193e-01) },
+ { SC_(3.82642626762390136718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.733732854194865847439726582956858031906804778628221347391666661878391232309411974901017445696174571783153352661661307508329918789098675761567803031160563104204661400827212991012009207025873416798214540213143348465142842421736054328315499549096719726716042046764241394372295200932607657132305890325084363147999667960282388741354876537553836895132502702780304242846949640922424389455260303686787200802212312876521715122799653946036328486693438373168623497988450153775780757935341940036188311090229
53953e-01), SC_(9.27681189706387550241935391516788441140986263214363275884321094395171137913622380067740793234692019438631673928581985674669506916341156375623168665333737228363700115091027793798720619125927596016451913658533598902824347300282112219023964174055808582619361609375580562926630694475951148344747973622432995121921328491332370352018238045259859104891643718529474561294212242144058064169023705465099799598255743376952428127753351863671878368910927582778614322123906693275823239648107835571442216049845322932e-01) },
+ { SC_(3.86262297630310058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.767287326951119952097870477495487895248012028738011474146479464801277649157163340619850476220639564653720474611695138404717963155321153591733367438734453060053162812535890577064966747036379360400098632280616561334666462432876016068432158984797269997912386249005483094387384348096146707592496153536855324413598409574595748167653436476332454215952356566006145087128724856965667368539335692171313611403612243468981373180463817449229665978568644442422874653469021144842393492315357805951667790448270
33795e-01), SC_(9.26323627012684403552362441816766844353860232235455582510490392971499945546238943437785773235217661433283894687038938985447511929341894290408129096863458949295692036268832967955731447440343561805616333244588222790288419597665737236923593354868829890705441309176814435749719667609906194049295915307431333453326042332981889559360874887602964847967422924588792838807113367272643542930126342757662817756798637736653902160534644351581798443570915292325167093110317648605200947026727695940938373926472433313e-01) },
+ { SC_(4.14037585258483886718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.023090223588043347574550419974613335661405050786917438791585379461975646875288178734994959320569146649758728228765419371595263090129646254149722731254770313000999089353969878565929156080562016972412676554734044181717505472834881881165808651185193090712870543970954165221848571292782714662395966605654767664420474396651022325809473399051305466059432995227021674916658658610763736705046433740928085005899139726739587945391438999680067440276769549246754835261133591502978381408303288668160343276505
73685e-01), SC_(9.15503932557748805795905106327040154624309109701469277166353323330495047580465013025792659440882401238426239102234866148304120914512259428508256188143971352721134308110915372071940331370587398302755815933308805154767044792918730422938424084182623711157576329336501323833302695423872291003776628955935696475315999936581807634223263656320757954433352571965156768392318835020186996543923793469596505462054756265809715842422711159634535912628317197753269865492968844280778333139750719502353805594952751573e-01) },
+ { SC_(4.15384411811828613281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.035416821095782229807099674405285172259850487391810532341512698242265302976136485138646255339989095241187886682365387497760891107570043241464295347166511364485418773884869009851476231716940832165570785698322758046109422893536723511832499556418296187261089263486644578122121867377626003072600744351506640919518601198672236575285002473052697293974467175786345301816426973573771645028263082770175767261405657387983963848503791345646526519020375179594423795351787464523902006522751347234876567385888
14040e-01), SC_(9.14961261912312938531757251963975606171056514942473409705633306647449354976379445925883627419334645798319079684226691906378008685660573351264008078882588903388240223429432390727582752229567332000937331874060395961329538558312773141574847698110453487234957120645662388905771842480604587202066148916563834063955601294103619888302125700623333672970104702059659671918785799250960251049309415162312990259195375210720989849071824171027512824769600511128542169208024958188843927510126581850114332992578859756e-01) },
+ { SC_(4.17747259140014648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.057024673753392628302929615099959014976924008672844027387625328342504773638350780859659345945170621257685987577665268519228336317546746478282223208698349091847592332493817271846361487789198658781362693598380892313847565182796650840421687646385274432221696944291027561360382218698665203489239782954357203621712811325799607233164888219977828121378756350014308672527920963447626545631574434813141802078194546734462889934773600643449494984581504620684317013958981134025675540586779086212099175295112
74949e-01), SC_(9.14005201279271594646377346252649494298094855187886202187175311561295118776486501235354805261697066551835374680825865131418933539899994837700018314030655871117929178075445220795873239047434025597938694394502337464256413558388215077611141956094182176309111001038031202569691323194114312105868329503689334322876507456971856138524924216804206474505999929378281865606690640041390901257392444895055519693226371911181192458524126880247545501940273866502248870119369368065587202123602049180417713932024067610e-01) },
+ { SC_(4.28758502006530761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.157420022997060004203507475925526879722230457411131203028704267130563487851343339686227908312648651077287593548262264579221476450041789789068904663021338949889979100460955589920723395081099222758930593006844038434034692085474910537135578515794958267540533368034981110749343520374130974506010640075162669731309550343549856392754640691047756023318756985433208895244386249265582197773886824313295239103402311673896696403609115994139591641172964792511349125793866282451815591498306950677919652659898
25212e-01), SC_(9.09482593304473997538693396104501021330804905259321616290965777176758565932026915430359578499551755453855018104008343574872469655100484191283971052910960684234579468489756593689367139584789587966575411667359624750619523168195322985712252979133849950930553365725100676073949846542207245503600835471380015446062680593988976586976478740651122179506841813035927991211507985430856749772714779898018916484970646645074598872686609284387685242249795194138385627188402736027247052002783295346662465818309068700e-01) },
+ { SC_(4.45544123649597167968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.309489483631463007231210928980826645096383521665881400347278228772358151614243521089195400420441125387627243215006211014497397145541945939130098048140822143196832366832353786721312922394390172434502759201714088134527546858760724580572898156116699247728648163757136519668640944795910196324620773691329360387358635424059843678742676197584818994145669651319248500139834590724129545714311796257873905481197917140221299813069395221395247567661412428043019745217475269878471951652370027748281209290630
67044e-01), SC_(9.02376309476649693441524341643113425775341759303426903412911273366445409015974195367557714002958404562092936423592261308595113855232080165919809274780820143580092975184546098062572003695941781094812237267584142325544572854177059090387904225847548546592604087162701961190008072455837295803252923772102729014511396836934627011018807054959294568326023254994571985005643935955842579796563403396030474028550374274698865457770359922325670148823411893173811002205405063320700662280071632096466284915759116824e-01) },
+ { SC_(4.49747562408447265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.347382135567736429266802144353951361652120795977364264835771144645749547609427352444066216913825026260479304551077969867034565397994342056365854573108947756749654195642598097636633168045131799856326014672991171820006530515248245136081568085529622161893579482727857725169890944735158477667206172689879182466301210969357200331072166513696404593710862152495383800630340412486145895790065723279084964981384878849002616619901498042318436315720497204964873166358588616632152291120200316949628131711094
04925e-01), SC_(9.00556875312972708386219971645514750726407028236990166826545850690241517101112402708386772819738278247821223039253372151806624483240868170703439164500972016802825899173423975206096499267656188494467490343061966750639625116172486836412318757879291167804312026689814805881985161435878128369258978791474612039898718575491126104848948833513149233754819803905446108254996077234113802957319405644663301288887608570332657255734673102012379728597740044611750650505636559769166038774171113885058050685760522703e-01) },
+ { SC_(4.52869653701782226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.375477109749948975847051877530646971092799988703524657297912858117759497834509843694141869760302319979039365427307722591846021508769518452373938101625378786801474931023349217929734227251286425803437841969164822165717593149515462238917516013577305212648622927174595964147480324961139981079876779785149087609653516535390828462021411620680662297150056990572707131716355196542030341425388540777144509373358072161935875168404348121144633803352472988140016030540895952744847938039131963487290679324874
48869e-01), SC_(8.99195196061757399361053971564480269499531017554558188806333532790012165395566350778235469914291403214368025663247285422108383319133726403092839105467674583216419489996730319770017782834530964004420191763527478616501382056309331494135424274941738292844744198027230566152257675219107464838859525235403944781216731525975237957756110906785551166391061485422062979524846055589057024469448090864935182011774817757038151966849853878680226230008627334013666482561987510034815801678655762497740517344098508436e-01) },
+ { SC_(4.62250471115112304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.459635213128476548643288653217101538349502509325780740803249868653450013477574779803800373076253243169961408690182447973493743144647971119712736403999403594536254481044015921602379310915211346095763737561248671336668785682922682166851750560708836530174655013842146523479652248623236864991344773159264378278909626978367144161295833173660241146257193086081349322587247078618384020870266859490367968966580729840615484849223376512966565408568772534620042533622541389797539233810253630134680602760156
59293e-01), SC_(8.95051136895677751924617384872825864034823165128075186190186597441499402594610028026215446231506707482496405049193560314497720776949998204342602626498576594729080138214268311850150450912069884690009285781631057732878261831293268241590115039762894904299669089563069911684151632786373315966907384512964784420116764033039210775638548338742350110429036452439780448368390817796260243838052068698870453925512851854018094826029153391333450112576463179849305395825697902104526169507205246156780703291651512347e-01) },
+ { SC_(4.74825620651245117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.571833659406825999759895209705925868204861641816860918464972675598779317181126644158497548105634022644215552053083682113890195143117270901147991601112334581811105188869273254941531504584558013683833211592378321901813970171797887885653480346717924740747849516896365458482381120917155616178871926208792351136307271989166551369444953686006083710904433701590794670762962090583423296138099332833067116207040022988381402708471292139187369923992340359007286790548699950375710670127545025731228584106483
85207e-01), SC_(8.89372458482467232515984882706268766316392175186312413450500984156418092064222973341734033663013416063605391090026250094816551319611263513570756366575940855133970988017874843537293831076015304335361026846863787886532344841888477575519000815281674674387373130886802697452616125647564031430432280728588072646726366057290517226076579554292387459886530913543780265990513411010099135364163024190628978406074455036483606737916437326240976630201256303072037744603889453782870568782425202552340165074002154219e-01) },
+ { SC_(4.75649237632751464843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.579157130535570197127105710411576244207874452807075537678776081457732743768233497508148725502232752492924081344871433781045248680969547258833003514689744641792359407367989532999370732641537403575628609792848970041735658254916779160378473546538531556973304999834180516563755782068546033190617459266196920522755368168483744322792732258186167596028909296405671337900225958854789219077284247555068100238169642997393663905115722874607306439319207591670172583103227259470763241433815564315365514829129
04556e-01), SC_(8.88995612890554386936750536483695852513476134588276854940621936209484798254166731221556577381797747107009996077607638797281282169756881823806605504914655485098662478733008167757208013537007605205995390767969085354280041451305854109862952210025061158261775701522354478989910552534967567504369494925409880197034305655329641794883644933639429106847302092581964216122603833735671572473609141321663618765145993837213168005923374608817688486956543652958560596935007260687185222881835947991213367235624530633e-01) },
+ { SC_(4.98672366142272949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.782600081038985135417705399795452529648230855931861479778054823719360900517891948832989760446631658472310995375812721512686404034503429752115691930689931438846892819560023195939545846704634864385215375938229859136436211222871019319149455998541606799951904563695329926854278785828894788071396059780763911427506362443709389453321226622467079512499012416784615939752098925881643662236967454488166309111221295419607601852630021964930230801644120827383562644769940257308677352430226110540823011799123
62960e-01), SC_(8.78218289862183938423134673320051739785499965734206019255453944263680156104999722243484431478559982894433211165939525740927677802481620209787987469668196432753183348602917650360351196761705324639570894678343806174504972464616029398441977168964174542305616645585564890203491919072688843982057716214127237367286250524167686496351943954136209482432227787458499924910595283308987464828136067964950498523525151712485885751332694062133562868735135666502557385948862113323459244344865735722400659905954097980e-01) },
+ { SC_(5.05683898925781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.844058580175771059862677602674839165853385767498568827591728956266874140236000232733306909929321111667054192940467376456637485364838003378132733697882425013819821155882389956014970936641580096125294992194989976914196319366957519584042755192400899123857577764443116942533667942244139251572464247195978510798697244078087125123528377014274111978084390564221350112718740044313235849252335467609017013183031236108407093807260592022868950712491751182055486983944216028668169592857490617363529651829033
28770e-01), SC_(8.74843394395965551309879575006994293780170209819355112069780111612973176064466490116143405110208953320912424509429632141945615508727433835671823209591595840027117758435836418746698473625487160353463202211263804287657238763845717958427514637781076681465849283293563449319792496466343071382848353682561994442500049737084819031517295595081500622131788600851578430131514229865791059536905654539814085000247420280886316611742047606970990845403989012375369636742595073827358323462326594252382348796306577237e-01) },
+ { SC_(5.10578632354736328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.886821633396412687408309939034997133331032512369964997160069887778780157365249234569570580324639163993817960369905991321003562765356588835463053433376967544640616761885671857771274665240695328003414275861537107199126649555986184746307111386149463737652738777604725820854300715769219526459616986532724136085034531531978061131723931988443471783300764297459696981360225731028895225450904951211726374713562106164804342025162598955600035495417291347840902646484508861798478145715728886798281039746611
36166e-01), SC_(8.72461886407474060714407841408344103310566393107946054900278740601639720374550511441120502252902388979754468889400577378186176037091714805093039021955101337802634805647926475922612749821549415482888476878706213592331467661841014901258491776322643364592301082694865914465905995266182295642416483243655610737136004298484481805105164211720159011364859704660695558074043648664464886946042750820472298682202778339382014672269839699188939702066594156121240103071280379589772983226226437628463900506596443992e-01) },
+ { SC_(5.24975538253784179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.011918371891883326942141409701735832720724189820911710999902175283223559087016010748435742206209265685874271001061852084241417944634683185507498651989182229334527538949831688628793950939728637775871628541613416238386832676345144992737936348095398882433511537773577118636488021127208606749106502360883265576872446253522693313477525911874310842680526250473106910144163047611507123445020769445897673811227186237380295597792485419684132157348452168176293352380400837265592409584935720453759496764226
40901e-01), SC_(8.65336201909365476282264952965879813708728978060751127967654913609217370202756737977950828334691199199976926417238532043794926355532947481142954461407252044813719568757784382743516894146761032400992386509481533113010581110801833850543938490300413179047145173264679839208757360189966101065499739619788796308134610685979722462447024950122740160145465326704016943161732826708923981690332630029591524534742203726563441280505345615124076805639821503843825847147963259968095571638786355692009671769162227729e-01) },
+ { SC_(5.27489185333251953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.033654013454493834088603334249137802079885501002045900288688700290820088154315047584235867054152911040493176503592156759998507930311990686632737022226421533204237891275460175263210831637250486197109173034990089387061603795521958983386478885964086876196334285693394353776278469175990438954306794688764289841727115171577850796134560688321819814071781013778475541894944064052986681463147818909962297305429604573468207296150882348616971071770301731837311008385820705786771946202968884748921599545652
73594e-01), SC_(8.64073650060187094044260451547211688700438767712561600570577794828378726394909204189762941771991578220730402396676955636744871614391751352329593543084586941879928932358923438955814670349084472219097888970353931097795949207204991643980011491931912057515838687636408011057380021854018301724623343646746214428802010107396186526576456932281434816548797579780532292096032569488952258398391121041148784934172900458255768654111061811230940022903378642763134546338073627936701731193377581008095280554682508859e-01) },
+ { SC_(5.29143571853637695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.047942236385596547140528593570907179996222607848554098086349890788874861449400149276857089825975328340804694575076329613615746623471341402774347962176957145016653254921614280479903346441028876538835122118804981810563407656781141008672227755476585922349833672809784132405697807759524533718224858926730130276264278013967872488307442605395022049440141043755160445044284924362807134154687385981191149276222474769936473761528757287291019474328296389762068202123334454726312376754331825640959783296156
64320e-01), SC_(8.63239707022993597136893322506765820034361346112663538463972414791073370154305164478378003111211836597802305631320518420581136473884404652772091008668276365589888289444996661499277415993805087615581532633652799512767943967396863329599519961592029296231874682822172954305207266939493791501493068017981697650940168348078699710912960970725464127937645010065872291814436415764998136905354545811245853507327765948785155015610075015341632933686909091119377821270677144528894661672118438512863633219124320223e-01) },
+ { SC_(5.34517526626586914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.094259233966518276019268229287351550640882528564260827865261908459642049883169254190448722545427096214205715407840066038264118110034486394083840477695341282089113691147858007034984433211597902306679671329789239696863042171452454478912993253038016071224405805398614706620637513948599812128148642513079098085437558758819804442822778761041510403471757594867331488081865494505536648543481365008630539048751536079212322694452474071803537280712255249143739359120462749841682779510046020197414697798063
41241e-01), SC_(8.60514513864506892008571077192207221249060554026029914290576312340240258880637028036909369321348861974704776026746365068619441047096898112000033846266863807610452759734582914614646277049293267980030326298443752183971203489738755455196461434851228175258681960086135023742465121275230985955002403734817537433921953870100053610664908725632388126059875337258857523149249629888488047691276578125376557074285503537637244758876151932277452200896536592707368519003989964434924497304420869045947916636586185059e-01) },
+ { SC_(5.41940927505493164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.157997725530891753224295468046265287299844029710959868381916714375598380914007644561863036277998437638845371620411660878141060145388133892861335527075736206851369642490445961569417716051535688290897066630671546262206116106885737411819556471881948441644747283755270748237272450431022130302476017237393828864659006412740051637691904526025312429758521185368222575009099490217788806480880592302663330563838402625321794191296961098387280041684756950249701462213630322552752208886800466177735314092435
14538e-01), SC_(8.56709165723223411014335237353370281255069331993132041369453793661319800459427331933541840549977376297771348346737288581359391451133900500291090244022962821184927791851021143294497495159928725343129789287753994061178720219940683024896165695812422117725701849685285221767838000418978261631909106043845565174640775546510270806417747477826212960857379830622034161031711153431645404985440073536073344356127003444050336984235043061917702296234719814367574435512053911951724834398066173178051050112431061131e-01) },
+ { SC_(5.70668697357177734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.401949049992175216255018046908591710390672478807107462342084260751986071834716113834082023082916143947713783151610221209393616833418632453282393110805254002319147591721336048946277495853603515722388098619015985525620642296014531000011089073231356357094083180630485902990375844752179976960826826432462773032672053865406348077658924445969457154025107235404396602920366017409053030505647147475733501340034264789080634044178457341489751824879314332524668614065077858996844866912969934224517834262802
98401e-01), SC_(8.41539936433730016393560004906422624915938938115325194490676417499454277363257513351717803741102759502698131899495817149812454909175331973883700436174253569027354446001310497645728117157402769598212946681008744824515769796806799794169428154993163962915010793856563617839979899789147308534322116774551895925642603030657985033808960856990336366381026392080924808370232298262132280338670172394908359719237017432710995566031980474531261480441546418187451593636619852940900815738161505085936768543613021562e-01) },
+ { SC_(5.72337627410888671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.415986233288503934376330380620213230621557381683413518334360280519692590198025001198438276509047708209197293747043518213590785946348872443234857473687702645073587492655658563679074295186977646870399468403622290923123431895280227036439149144335621343420010227785274317593099374468528585621974491282361702644333467116739816471982946495876383186172095465215516470347797935142942034443406045707975137628170064976510854533580519678365295791220580348362735025208140684489800547457615584579569106564788
88369e-01), SC_(8.40637217358530962617166869970573153775954370007516064477940281451417234267504782461385855075871355157179288974185941910150256426691364101853486231269256472771425076245123147503280465557373884684173386719681462663766345749724735744081185615292127240794974750109376937292899249194855048353532646675177599991950894912833572228079283360178968590319455475444665383695538491207634412121327239846638502720531644839511030834497680853242745850920233520996468882127230891627624467473374628176256541247234848953e-01) },
+ { SC_(5.80943822860717773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.488131651555098441924540698973782552220598003188489712141815227125597523713926944396889504880082792950337783308514074075385235667957397996541462394601783554023480233341556254594335345006030566815262338246296678725884756601743607174092903467771637810040212374118562607931321184826619039228929166770448100156530725541451114112505945543493460470884322203468927330291949478493800357482058718776745269883650955396523822973188957090193177701783686065777792780834795084924041530898498036877692159652813
10732e-01), SC_(8.35945039911112263677095616391004433124413495567336752167508906438259743069245990282913973214554571969177304385557106963604907643376708364394277256629360667941308687198759712832908130207745510426514303099747739695715739450579154667857648740171678725754478281782329679391568802376848420455165726573253805090116019404447208067037349934527135867262568590898932612843028746601037322593214456836565075844042126797907841397369397266754100931894716926234857663254549747660361282112980225408873527817007427990e-01) },
+ { SC_(5.82854509353637695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.504093912981684915961504825703531864732251650748692495792300188421577156806137717646491281923147003789923685354747420024850114218759069573852856573243007262779580780362983649336032134857252692188267006486448004186117376064337142305353216835042476853635942381551260693107470138188228799855706279068865089784083949828315479562579565365445904090458530867131794108008611384843800673737985022937274548016491550595901496249177186279382173730333237952373051206217629480473944162648595426182642541924335
51073e-01), SC_(8.34894904745968397122337143288036538697236885805361244093975311074767740052020907304944995451086032530150791095893934644176994383991691599271559032684425891447484026866957350929544470806453316870804998160772266105931932446680136021999620883072198820874483568703347245846148122134149561292328463469229261516928882818387894901878049370770830895114699946795594153739461667478785018799954247645045229378473876480527746725169467194980012963031723208736422455186147677872207396000474362366949139854735598959e-01) },
+ { SC_(5.88340520858764648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.549813287480385943894092221182964933614067222043166010390800450975617463672564204571350645485264277681645607644975389724610491334297888030320117146313324356088789192102173802336363793827691121569989450469696201933487061783927027088103997351834253784963616154219911104048403185689452064014367431585111870181014340337716638535256246498788631289439667557403622991296462094421156120586420892070042320900227368434626583285193334277184542174827402863028709322101904378369520382409345444863274439801790
39611e-01), SC_(8.31862804037457555573106159931804242284656404384485071335994653733473005054884858296577229285204654906976630312250918448628259671755231029989458048999183555644405516193443670517849772686240891945946039525999988429248534398424025093271276531490728880513255793488192330389893779683789326076963100529203447817457355637888154612527551686629330928079288557304750909983330349509528372839396456227835571961111453638045659531283279746393377633392525795321762710545335320001100575629727024680780347585595575401e-01) },
+ { SC_(5.88480710983276367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.550979422441320614955315711656798712627244997954175131730834134850550197724273614685525006564872652508062131560090357600424778033810194825028209287132194775955024743141871262510627890239213281779606620288078274159383481046146143750289425630550678049062946506822696719952779557283740312833989213021290026525232689555066026206747983879681961268167300224886396625156523494316616792397992884856529453028864437577906892090205416564110275840222298409773772992480515281611477233205953692286913424158112
08773e-01), SC_(8.31784992961720983534359232391305188584063751853626211735857810341353297240324549055333935647771867957433112311280525051166735373970035761464744610858062803351708601490642216194702218471579830292132620536272778346971800827572537398578189594660242145927783320871528142664463408523731435595615813644112256518861511592562839704037855278536568685836654817502765844816585425626008475692953552493348690999667725721103065091643783290643380737951921116821247273152701349225223838419791660101143482872112798004e-01) },
+ { SC_(5.92362165451049804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.583222882534390517445575342675062868850604448617325975539647943013199662170383679281689519035357023213123274020003303031802593092499973848700495693922864023726555382029266057273124804260257147463168339663741669560306399261615470765718328033585390928943421945372618466462416459954701851187441577969844477710240320928806132505330787925211015383964629479885405496497274180905975970423693597003029762170461515259603608937454332552094417371599750294181991670714626114999452585309392794521453064872294
13816e-01), SC_(8.29624145284745020516215455724407888077213673743160788252677680220684699002053633204757665277322687553558235918282689862240807444306321340921280927942735138774702365689856787083484164468516551522355741319231716986119476001913931681490030833762017164619862117967111307933862130716575515431340977126892141889221627007181268431489962360421173167336434798315226930647680073783873124528566080722281638117951478967706088693998991575443387902213162302286315711337900394259691186938803878903789406657834635069e-01) },
+ { SC_(5.98107814788818359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.630797756694063411643901138034574268762188907146437059184209025702192935338950833519879015361669423451843726637067473501406510147441134211535463964626317960310062172085267591174779536880622772027592682336147254014188986660079934164697036423581027404474340804770067857918757406274405761827940017440193557664994034879195146692258120734082863182059707843550824719739988318684678543637044469970878042722110092122085885852479862001046427321413756950263879813428219755231231736419699538030661319749966
48408e-01), SC_(8.26402544909011658241432585065175399903821756918495896750301886981808712362149771940549292790542650045147545087131705570423534902313068039653779493898450768666898915232115053623498506902881479053281044503339148499487375815668198415204385288141684801981955764702648853853788870503645633524763713779262558003952462666882738272366662792158419831973039867973436791725975558771042770624392035686827655124184929447826740277132618212118727354263466185605275377022580858818482725012031583671742511286356968707e-01) },
+ { SC_(6.06312751770019531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.698413269546222863727762237947513754425643875270249873876007631712574738465632313832560429511267442379391733356211331741265641402037837221689401606939033697388742202389904209579625707093065952539250421849738489514812827074358219904053406126158477147607917025487648151329418369443079963291681830439649717070473107731574594589337343734882653909967536825050889884250408049093317928333930363378012094814430966812933071139839193266977741714633119724019150966446028442450068936987213343814471703550336
46130e-01), SC_(8.21754745708593558893877997210453421259931832482362161541788802678473040052084610746608123448789164569464037819997816728512707321503932270814997135283224942751431111955279774528079707816282945989997447671912075562165513682745655357171785464101630243159881468499507267100858619865385365378153126523299388132186668506319523531631609433771914896664530437720612542897542396620962675976882751729608935582973299418407696895956465945687660264361883010261463103102557157947538917975921761520492381028453930485e-01) },
+ { SC_(6.13096714019775390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.754029247583582313346502959254582671879971743843314761027907404640350598816690196489459174953303578321991174433960617579066481481438645654866559972174443903262664236563725817294124951342306056327757756584762780801991060415307644316540189176066330613324582537259366721709858554141389587792442336098114293929061297248132004900193054691028821382821879877588487076470842878561670574753846289606366106999896465668396152306582916411801863259809607699498398309317575008197700676813599815312603107393915
28533e-01), SC_(8.17870083925024815995359911687699926394910179663053145399361592982175638714351229731592822367031107979190069836208751007928500526343506812250399499321292994038539333622880839450312630804560038815300432575283087889439566134289676657146439855404820384685674238529876396699346001212546362146669165127918149018730694797820327381382869648762338833184522726914408835689355455865656334360248829227226282107950259754120637101606226726958719637090515583876970735442819938536217801085805639066391598625734381401e-01) },
+ { SC_(6.18999719619750976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.802207633404690672523193543488095255085667866636397065474745316098350938105206387775893780501036927056990844638514777533133248113115321425636700091629186555215497548668209829153459925303553519381722360299633358667811058551878392775674736612030894235310173285807767132796468447587754175268973249872129074706558149632744746483970651297859996433166389141246589626400724493924085943698048855472880855374255853836790635708940926762373152397025511708527761025357176284026643274229297925039867467626799
84372e-01), SC_(8.14459247469511753057400936713432968553335008699570079517618820900093799983757685955255000345600952230461680637343901677229590811516546365848604073614715769779803264305390559219038249596549722583488785915653953746125687426557192475272851289635121215421678870884842323812552055139391315679645514791432234634867654564749569105902510236521494312939601544245500760676880839934466297825827186225790770259383958886091365471907625416746368992933084207679548025720343035493993024080822460847793935966129878775e-01) },
+ { SC_(6.32641792297363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.912773404677815725013722571351261248303126350972668445266379896106970840719564681231405106709661190343982115879713271450831520658500539283522516433441158915605842074220200804913243645538028117267239842539558875398641204623724679680106854107073520608773470281356202122318838918267224683773618236173895834237557925417196340232452309605949915943430715269635473025947732649037650301237571967979875226668619645446224361496888063348257809466738307745777725694102181470608347704592145183008160916336993
25159e-01), SC_(8.06468292401720597243607373643076850834340099346187496135107605436527121943597944556982323079565414212179242634055279668924865287777492580167307947076770033365812533884726110826320880591592785941005328200888816051713221955488838557889813329320366811437654737145172121579310229169878585583506116077567673630546054503550524440060601659762352169904975997908131574019740393377568381882944867982968248139190044503341642391989065718049393007583854820241850044293966116050194422903385301862216349966179580820e-01) },
+ { SC_(6.33131504058837890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.916722065606838616985403235028016629109627364253565182881498739996856302409647501795687942471083571606909462884811697139405705474249476155467781551068012670433633214922171675995273339529187887522157735643569184433719166867249840999287778030848876845420124148456249110801836524141536052528402755674618563708038775359328988396350039699894306081432904035895154380677165187483854347851739152785279800076711481429947303597763141737538303535875658284518364320109167569521040140011399118972909745979365
05947e-01), SC_(8.06178640242726505993242967926694062895717233265734674638169215030194480752243897660577492537544366232156759749837560312908253286224387082540538400275543585442286943985552382663607758918581064299617916349453746809306887843201069591375384341794492842128432850981297373891467581358275207844126709085873133207125511792634497429296621277890733121173684425000350842660734392317571807218231702881414377327633225177841877645449690103409480881383280862010633511049174847649468719070167967064564429876144436423e-01) },
+ { SC_(6.34747505187988281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.929742190227060101089928558671837349665836283078826583210957012439009114171975585208894893491405738366639551748243801131693795332618399461618346565240075802002530670875544569715006501274730471206004954529499727883834517862211397772728312954101077091554450382203771729694852279701551976363886345113819491870724499994442684037967046132507101060858540680578226845263414876841939171694356207922970814334738361230123674080715015199946173889017640255529059920367177874254252585831715491063709624855247
13660e-01), SC_(8.05221445053726746419815971651888518671645149916391855552948789936704566336934637270876559849890401158717510479582527189926061647034445841426220869339477187180352878239905783188709671871951560328539881083404045467288507567247387366383779542043359249431790499020266939594575410939230015987101843244838403909034273579593668568094414648076559519075205679025774159395184845727898759689983721106347949365458892435974166757049922971026861665764014954983365451676686431477740484946958024140265760598858990745e-01) },
+ { SC_(6.58116579055786132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.116278774919716130715870447729120681673833163573967714370614276628445028974276204666092596586211233191266456824927533598634001000089352488271536010014260801699826974122397183296242763989006809938898626685911904673936049886869206498672964873770767661974673865533833669942507277478805459936525423663870602487010218396335181538318857582820099917403865202649906137889852815948293504089703331175506531951569203973886785262349220662375473285987808478075090033899059424364321825741007029947624542787791
26657e-01), SC_(7.91145586775699434706682325152449132619505292885241407040398261444638165675241801795441015121394868129782183647525514379878310240059764779307080503506048518850465060777594888337287672252521112896981531471145120562580244467829046974149957705801022065945453350900334077892966242546656406133204748800658419775649709440059128375286344767464588124626908555642921898233852706827999777042876474714967504251148166304922393615026590743022270142067866633081636388432547812265438968963733102573956969507972985056e-01) },
+ { SC_(6.68379306793212890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.197148375883068425430587181387402460549267149103822394852385029708569700975386611135899821650671871326190667205396402682811604394455629326705282983935563121976939726293323188499227001753191014932472688656595911719329512082508097084743175148614246838267986389532265263860559152550295267892149364389843931363643588912725306800104189762174141519971977018077404672943115012472130133304922903656265940016476148609541128441747042515153521621018912989396718421859171968566543628199330104626845973274271
26850e-01), SC_(7.84827063799980379211779203074982361728059891779214152842305280398556004966511746571802372837688959219310907474890329036726089422113991718114500383303663007778344198446438007989934781619010896796633674747003624402106368817595803358545678907629281002244851037896204259330272863561367660123874616721196035359424902912316359766328561961112087692177004024520170858826342186686483560937099248883139544325049777616232022358653962294978208855164667855551374367419008803669675437191041878513041619215093977207e-01) },
+ { SC_(6.84049129486083984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.319363533729296663775341728580216690163301165489277164368706898427674269698395324171613025970454063300549399216411692320299323916155783734035720262799461253177761205107959780907433245778463599891636953671132147382034198013421361184526776700087070257643339709675461989635310586832588024464933284604995923804596927029788914034327654651154332779629547292263995180701557835793465100489532631584147926734761606590203294002788215571909184195875629732762898172589862586533264674504957997500006722756555
61574e-01), SC_(7.75020287015587588914578411771195074192222224624281637676262362599907293785961779059986129977211025177830784348442168786682183450667953136365155001785832551965132555642589664593887400121769662552071171946634504133253856348488980396076654712434606013146460571880041761226638371907081882080141542409394003245437988920143100898825137908543687996968163501342562315851663970885479616359018385950082689104218686603061204210645171977533827915317644911647373597167897649132335989478522271207287702127764972518e-01) },
+ { SC_(6.86983585357666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.342078921309061851382179955210700609807711345958142230284014242685500284148026421478879355167164377457807439916635249146401013369802269107603151953188046573772468414533105979413505728747249653157331174600662001566787881099033867467568628450609840645175639089793156081786030889579645316855609824564122732873536480768976317289154074278560530440197683958909954451419337692582309089933202888432654543693176908531656694801481784070973037793494155644816639373763680584737555238811220976225611601347175
32533e-01), SC_(7.73162563474766841048483415887815113128270668467243021121425122543440004967601932517340170925412923140648469189427391493032322424298025129846960002538396012061927491269154650119691626990617439396114342524616971770389759352447109606952151184472001811010660213708603024649577978842970502993544673075017954455152924365371723225635025754836264482382777266251590714034776765873194178131181718759634161918136432931648140234489835301481526824895759034614583345030384106065853342198571446960029902288705166826e-01) },
+ { SC_(6.94284915924072265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.398360528773304158495573244844424852469604150976755878177291309477965980886793982119184184307827167614999046082126904576115298283737515162809609850620724504106599608454657746653704596402450230791490088572825993379945886987729613001029324706704559640336927418228047988943727049015821848120039712943665651240482238508584054844839189467656583401544492579212927656595702385172735455852446022166566011921002955689293954846560087140820189693717326630168803026605925741451282914548818202367959962825474
97677e-01), SC_(7.68511434813014370464071069339832221311083583138535155987163342906384134901657393354802549369389890372582861852791541558171094773595275468892230556500115368424467831259833594084903054252311484213541678484269411902594249145222403876708128400697928924522816288182254355192372916075954493920965124086228091558841373752049897442849725930050350651938100137683579995803849252482883931876266606935457585636549131596716992112380751040967416114021919373289953352841490346808526597399414353552864896082644783968e-01) },
+ { SC_(7.04085826873779296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.473373140343752673112537278814389083249141186555969035390092376790258236098070634145195727762187935792168918763427057365852051896774731502875452858854074651636072350720159349976481550395232847011307404380703191748042884197206899628704538355008417453070678394635346717611049178693766328086026916032614619411613383301829196160337422126130583317381465144569783220779629064773288250448543502000586033339166880491902571820385753462102855362537444044485924490416379012550732704271643404395316319072676
07749e-01), SC_(7.62203648547263658124556003919108631375059729455752347315416115221615289769809363766341996100406708571842804474615990281624544657474722340968058460824215775408209176056732637981834602157220055699450856816394920036523737063558780069515171775820548685613535497845720729171156701201157483359755580485996949045344633845078270826538922382725667656783623857614425595386019791584646719482830027977561461206521773127678313382573998766556014080907045322829632444997663307108065388896464215295338370168272490364e-01) },
+ { SC_(7.09933280944824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.517831723829298414291511010149832036275783283335735925109806329521081437677950397620680837541765045374760525116918644480143030533974825456518220538322877050584994149960797830903991208622538993905214631389245932453945627936810322486328662667668955099300321231994104755449727135894494798931089990971585988599426602683426368143090529634468612452706165199087092769950090507130568493852354251903992791807457209172928660697595670848418273333359645234060792092722687827496303193709184622310831247136477
08027e-01), SC_(7.58405364035911841501543520471024032415280607540389078760632519463303840329020571045544960761585578507657880881719158444633178745177097217632381274410178922552576393958541137449644629859679438925409830143968442835575512375287556654397959631087638498982572638282648212386560157945725763904932732228614132924703510889158885743657357850286206983294111169997088528262884477065796101760395290581798087463364077999452179153508035671219845061724275612416469431248397257676448236556699979541960793793234354297e-01) },
+ { SC_(7.12137937545776367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.534536104215588871917700379540126775200475426082537819114144756331357620826489446051511272713720053914475994394902261463586141149884443387676073705299724434327620567233554120148184133597585338940108298163809969314091367165723969905387732757504590857516477992996867430297393893241207919077754243345419663729015623584412297907799838158728775771117085483550323976617008328142402564547410653536526183173552443514373279248564349979499904972720863970078265577631134957859923344349960132121065633518210
12639e-01), SC_(7.56966564008628816064935109195378426911911472438595933112354357748505074207024354053911829385588364448207071677852917245130645012968655730226513657764473316710014319131523151887741595944009634322876870833038475238389767311902965604104789419520464629484339752652742222247350707958785496125375295437037990398818672449792045553554805101541785038921513194543317116169605636216403146997656048107702306109440921721516258305004378318430714899908536008728011634964756998246216104383496283612208246712707809890e-01) },
+ { SC_(7.28063344955444335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.654252395492815513879750969587803758588518926125810183645176915509866250530672009275214340557113119348583038435056207956476990949911679620729527829402737820314127548290441545236856275510885163061441834100642109569273238559493286796390130601570125244691069900667761436008310389751434693746857915012111295153348106878589241991241849198325447200395237387728345499796788962441389238806411205984531800754722334532295632567981215187100916339832734448046382510965541476947988850589141968545358643810457
01914e-01), SC_(7.46464500542913469550304482427483604981998295473097001834850867024888391361681154549551085476420379252215393733043723887519290343750467446615492574133174914266424284911131646002469252866740075071221424899571812395871594617919523849326962762794240599720695713605778048623064419305383185861913597186339664175665315128235844322682700305036708590451177189730578210863235483538381358838871934839801769986818109659779590737181465381969746699020808152545779451579969426999507214595377575535319512818498620621e-01) },
+ { SC_(7.31353282928466796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.678774558493284153136855112524073614752906649448479746947483744704305258205463117116330360680279176551193751096694563637808792040229922714720468394768843648770598863876104854255705419100604684221586980501471643374502619121180835472084310505354575713560395485399936219377787358744949355376044782095868172464154263578761173419876024972579749026194531117724266256343623172008656550146045453406899114032834569363847756761074311946758407742290257148825985416593983482763363575161964041028907890800142
78310e-01), SC_(7.44271256981101194346209628134504606702099618005331278155702255569736794611306017252420167649556829316737944208883220062940525982827062319833178706198085721874692819642620284994022263051778498810953118700480764998742939090561601606284588646002048877898161498445470978169991315741359253391616577330147012226863384211221768778133768652882840183361127105099183092604737447476797351760900482923533200976293883182732697626771002910636171758241902951875407238841238780899997688911332446119841029304425479636e-01) },
+ { SC_(7.34646558761596679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.703249201780834364410694716780098765675316080558248792760717363443470391037700362134322543102412839015741753097108331165099806780947240769359408604129252326774691444384459140097703030262538319515474283287610031647485930555726578167849817483333938301498290367525820486734520378417440300770181279666293620726223204598068952469187745215002579367235727153287165602572288060099624957841850085294744731817918092998456677643023865666558122061243285549629895124639162255938074718302630985361867900407874
45839e-01), SC_(7.42067720217128208561458295260588188538883703614529506403332866542499686401570844168065379119686678412121172275197281466837025752106843152727749804130330019398565607006458973651927655708121078756327411774608433581084836662172963084466807457891491110306028947765023619026441420363688723939400112648843886687616294780578466440795163986186190618677996846555348224767261142760875403983928512707788875476531712495126954048108942578212434188855740383855884084742323564540464861291379994368969288540451950217e-01) },
+ { SC_(7.35883474349975585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.712422822896507844328248948884861518382074252438210648725788165392454853491699070810304006391401224800037462777746719819651409059665020550450962674840168610198637145358572633925808750838966378530227738906394631411396015466192801857767930763029473697312392940259870920876965787588689309522829142467731956751601839656331007551612790468464705802275634793092399914782368191737093582679855794812026934513058095724781169218598561675694264080049129472116373085845272986556052807837447321639053804892149
24919e-01), SC_(7.41238017418548742413842257768684553615834706641899661393734845623817313321543239084972374770481917354445618824230060053347683515049801885699977994522189688560444826046327608254570779006944178830055126966799122232990289767677705366215827296184520130230453169104436487644749130788789590578134797523361818202371818815713878405573658388136437453814494911814556871777282812555049415325042882677170454923162907543967764711047796723580024692887761925274834178826463996678615559173056991061779677528918102368e-01) },
+ { SC_(7.47545957565307617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.798411137686073406959441121856237548097368424842996467279163048095814176912289569691402072517793866976915777415467148606638545661182195880350622645024998837620547399054245699367299085464336625712482739316468313540898506051477387216552084935751166470475915903185814694213151626345041957308389745289869622579926249400012584301809862040219423324536892791217558737128015047970170025589558128652007078310559534518111236712054392217908454422670423793164476242538448589193970674310055972590870187475821
78424e-01), SC_(7.33359434404344109336395962586828145328170625700473318543788063807067543247262286190805164830755305055267618419943813198649946951834556772016494519206476727461835185579311139486423232373044374013136769637717868251379282837922690752383578796965266903327115596677790452452974648347092046946474286910607295726282964624682284028852420742519914706578260046372907466723896662431770421690941601880002968886771614517398489952077636798547497165680848712519474408905758365283290126582236138958173021236321161885e-01) },
+ { SC_(7.55493879318237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.856482633193703430528349078090058756261916518892871194467554351466597586921478539535637886141312301475183328974134070291306807476594273362041461416729028303337679034652931437745793437022378229781541833977637860372740356123706015495915660463934216883409455418112712444464719928936858168444222901073394745820316007076720535060935709916272322775112476162423192297648855716134050659901511954202139668335306431334410810484531515683064713877313531453480847615492766059354318181276697474707311719488539
79945e-01), SC_(7.27933004477150623008809972442600651954692477743538333356621001503195937504667719700541942845670031454624830343728389907907347912403665447373766506340758222717919268080026986771138260024517905388101442952981872598882504479570588596424852623521866672390156090453185231458894061499369931924249576747238446542346316663662331729519738390267757834504744290361928534954604379267936758410254241823802609817231482104502777287124391370444319867894433306323868979969521772048460043626033860564960537038095938656e-01) },
+ { SC_(7.58935451507568359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.881494318090742920390114796363454092728211598782391990631559011004675488532542581105020081400023761131886765287061297093154485252908984312722025615369015962713446485801377277226771930460087091713765492475481697207570974752129323787658731675768072400718768998656675660271616206384082640830077289861715218705428900633336551187128118091032862251179161615506316775047739241854585263543187507997106627774780424397283090449091596640463641489858098122586107691366283346507737344411150321268183775462493
20163e-01), SC_(7.25568990173124895338125876594655020996196799336506719347548207108773241573013361988843912380042967173319980848965347758554096264013024360802944654983722000331612085095493975827321189492026812256223514482673900792147489176478762598983238564011300475061164502341735461598546965603251492600505243119182301013494029540587474258886399189520179110749622455444080841081454890362686228212962087454598613627230870475322625762519069603723940374929932243553431361246951367793348636809564558449766920116867744525e-01) },
+ { SC_(7.91057109832763671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.110969171797768343028125158337289352724686471279392953512999711491888336870566249424484545121391369925299603739020173268749147747496038876733303214238988806059714571301461573594069511103001628565147674022013135623370659703496443122365065620942366770346393848777289123522700034736039679184286456379472066904441057325938252798367112819926384183448582311077645020071424549754306950214773502715367076266227313053967841314863823343755392978692100704169334380232765795205203907654430978072987136227151
15891e-01), SC_(7.03094001096167514247452987566287284250780249387962704875473628545617541774686956469062454651828607591249279271245274397135059565688145447752251614500578532608639894834789582982265370817785925338408376851087909205953300730678570975044663837957505742441580929432734796231676920571015992517126640510826168319087313544058187812809896079863947088018101287123002496421080180476087162715986713471824224540590420685566491565864250397615116860667256579933004489120091376491629218063464801507664268777067724241e-01) },
+ { SC_(7.96196222305297851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.147007902417342107187200543734755473317704180319125025251234585380030327460623282577411146898751588872481925216695348853926191955127400414422515889038223104412511902802448082951761150395760947403700891223663459374614782236398914540031391735437968409354648089762230938985870543909703300879606898940042597169458393396452367916634475525496593905328646085281104433548820791835882367493358857173057595870038095382585818263365603516734671596294980550491885647197261959338221753041369392832439679082424
94550e-01), SC_(6.99430325642119007199077599804338282359678696992845283199385067785523316357497003279755601846574384248393159269985358143471633926612287125404225155548044445499184262453697237728665071432512161845503412031823157453310693426644414151689312780774754757744034146765706240859362206302826721474463009388112171549014346332567224941063583183938496276118915668883695302262651276382992275711085438741067375802053372839441984732848254301369814425503989712195275586467060144295441465488922768796892003329447608649e-01) },
+ { SC_(8.20322275161743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.313656547041427398469050195846963580360473064281800594293714687480594829911109825358018278670512668213113764397143978174559935766208790960081370682308694367171305133684958825626508563705593406859597790259100128527127074735998347934470975914607336371384410283997954279988531359457980038501750432199133935398069287927596117760501337061819711141948241502482355171357562544184352254387718348304224049589757268237195392659153965829830039033331879011891903760441001556083029094727520131792730501657261
34671e-01), SC_(6.81985541722975717095534445767819481908864976076961739056180221697736132141265585566999326647245602003551277294117508416627907538030876733016883885497005656713622185232867964646776021117768267034928283519921750560161271484197621123938042103057877171133153181306536200901947837955079582005567762647046471690332827928980954613232524604877387625737395340351244820721198289997787185454105134445968462217536369610202581676650929417732788588715743220458135214003687206783391270487189498386364945123860360356e-01) },
+ { SC_(8.20823192596435546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.317071813814107007758524139446232563582793628634290823181760946440743451989348185116044979243062550577613721482906114748727247680562338416330530577592696255644844517561723608908627329769652514351260077703298301593230396014685089145470848832610464124905380126900736027099058627776737697605398247142038917588440995061770245157865382947258561830829070279769426010971288861588400721844642385756943742375707717302776207059783631770303116519693946422656966648883950461817932218229258255537978300222168
61812e-01), SC_(6.81619102369403480554305225830589669749496286393568170235405441280278381355502071404131720011170133029142899451867504224912313601433029599167624590909710073729960213379239331488260793038841494500357027141640185106376120026704091104273895547141376917874461252188333037699289790582218493452933614232800683564196166644334061074582102278060215612103232488660156166325779181387963741004387571863137929241835769518810981154518776634995901657416266901576969346164884723744461577404233270130572283559282001269e-01) },
+ { SC_(8.20830821990966796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.317123817011671812359404050739720152130176396800826673561120292056711390345218523743549065485741179971880547711191147904173521013005808203151504019625998642297116630454997256156247697017328158058818386860069380701455752222976585263457679131893626793058989734678994163469809687522554584350268416461968046799325763378208850985731868774893999935207260059394707477932378995205268530093395081382238530676231068933925969357137902813743841043220604604034154075466190223107682146650681432931815709251735
06030e-01), SC_(6.81613519866797700233561078830285348868909728015824467996873436863083948946792713662365645207291667275891590707518243675662095426503292274413226380893079787669115620493220926707096054723242308983595288942728615386528125187163599085233693989737313878754308845546547871603235046915011224509231019712012001921675566002620394997684099906522793791517970792998530561520243658709327233522695971109704887254996024093751518624146215852953903992457981183041783974253387011361571840065767392160436127405910006494e-01) },
+ { SC_(8.24585437774658203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.342664150485806016011716143281899454855233483391676845528828173588724637949472361369708133273236393427180556155538997927518684683492205891844939752457564654871968218112418075117774427362897197226398918588599353356510847590337159488975093526696732877945236476219379691764762334080921600979610041996959092641527192870522798295890655589975904928988376382093470345039530690347949721384758446033808153795471395698545689985772954662051870881659373097926175178406304193283088591766815062718938635287892
48027e-01), SC_(6.78861423069322423142287792579947877264054945218311760117309756513802596452752265941644672458371639416650177013219274176072434763072510338862834134080437379766218972620884833863128184168443684900967637836984797742269511801017789421153124594757787251028286436667001509092732247658107436228355788096082272539774666132684178084465292359871687041227303291674144130444761955366487836773097705032915931079300488532047764679474318554807323227573756378123678236220609152577882604414124351048800037673338910072e-01) },
+ { SC_(8.42336177825927734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.462003983773934596496808260811754278687490167774793916569466153574011687692444881638855014400545647646258846322080925361543274778439442912170716401867926953074392007541802181133701333021222719476482192280339255373318038868564860786141930433944522972642144468206420874437848611947903246159807331846328984684516449489075193941913848021691549376322233356371900994906771708002356661629438551624536457007611761682923760537604353035857583090362580341043405885536499408461042389910340561858254667410678
82072e-01), SC_(6.65721387264536737199053622485047036959155178470601890364581116448749188037417941827507890537685995449185191055999932249913339748939836149314270084339122677529396816057499007557737481859203418779490782222223935147785268990135438875913775527887167257753754804880001533585490387945085868364708189831954961379748257097179336872008456812624559823103794451262576155877557164818892518890148246723174790434123610728214709486034014405859537649796728092585200795147670242992510582392423063209695060045435639049e-01) },
+ { SC_(8.51732254028320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.524225358468286343297635731624677837758352261812790020754992468629527985116150862238521700670314220976722917273625515146025152328586503342661173293742782995537389131372639895695525446706580515093331425487379557657216408971850162353022718262299618345074969596999465220659963344716872402777094846061657877095196548248872150139694276855120238928516874305875760494522044262291830234987493755917058722552979825527371723343783193474609735916872332406526095748151576828934282628434300322556622996521140
89879e-01), SC_(6.58680747820845207658025673099654398208410800146063243277102180468596975359125822183693199476973064425685212001483520724112988866317082004563755687487431948863912142895176713746527538414153195153195902886992468372105263034943619928953111637060748803014031715925157205650185348194095196433146735511127968345957898334184182275252020868195423853786179773905957452209444524740405316126300170571443431668967442839329584782366429851699443487772336859741150158436052721645009323345331192414931319025563193732e-01) },
+ { SC_(8.53235483169555664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.534118334451841588361401635720645902947521663767116141378549116874833797057735389843106873529287377773945945417658157109114393340465549409977359345466781215693216060329832082957867070079642495871805298973284685890368691055581737860111121066288172645544956985754516493547016070983551169819683140446140129687841885441679809279243278292031739025445817816170933048117050733412517150423206057625637515704238201832007365727161054363443064629252793903065464388239580501351897360371041222131943402651592
00889e-01), SC_(6.57548940554819907573257528419300834282085959566971485261554488964967201945618235849231884529358874985523899727532768461452843522892545956567443976145556104320240537755297697336571583884606812992554738345823881726286988930443989691129940518355496639636521178039189177831792417756204567633195849709348605779519669211602867459041809898937701383112387501471360860974137298579481666185065773825441102462503880766351019703882097283156754140486193325603364399157977161246057275078823715656758124740769286135e-01) },
+ { SC_(8.60631942749023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.582547146722027340542456313007772366831590960970363566528652083023501097430736841524109624676006549337457405718947803989918157187357376744658282907254948581949898365345531603995512714769181683632294786527990663229506314887339540337259991119044142027059365785370027845266067048595982193162456313571661931133102545293115875982172657888259067644566178822972675256258110762947674547614265891341591076712048028766447190935642065491298702183722564576698079376560259721293475537508185467561139608417510
27002e-01), SC_(6.51958424807423145724681352366893044913213138350124776252984208258289594390333618059154128345089870962156493775277533940863780236374174323722886635230257339343144735789204877774178934520266472338942566719658189212879424410842064912899039411532389426668819500380572357870722896319650296336689216304697183340394099481481510010815179251484525103064808750250346301956674840478464617935466799014788108180458727627901714888446114618457583761783239371051182986228026484951181476347027474567524391889783918188e-01) },
+ { SC_(8.71434926986694335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.652534288399365978945961236883105690903896858616238077479069983095849794981116117564910217606887581581772802610574146129927743695891969515334028531372628454089466111671070616289648177447860331316446420615117407899264083936633440356622397043315265472766605655143111152402091651883485500851178278158539495249000868025774140338340837074187221647135164895279696422121602781151951423441681071220129812979941173865441794207725885067966647596519567901258379072646701783320846286242871935635460284473760
88112e-01), SC_(6.43729127544124799494617385424141789231958756626700658813041071428586618072421618554123624352683471102337219690582915815457570760436788158308993420812005608224926825196281977060682929608339080881610829922835036163838266204844465833776530324738412004194818792577411893967126443956831812385983415880848530409188330707192180880606478355189200581927593129330039998521115777958744436380095343335367391348225109459340647897714560715485246371205710624833126032500096010272581171199733945341054993950174852275e-01) },
+ { SC_(8.77896070480346679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.693966529425028066801631377164082741936265051792610279905894551045140996544458916868205369579534252571436440490152073767093029191176536289628993009926521657562636974340311751905034384769831709695343187646379168466785769092609312666425259502222409204469504713765334092586005183796091758237293776645666811714247037482266174771501064408284665526040088047117740399705319715794181617682543015753927355828918120012842741656219059384904436283387103035662792995152351546793024707941889340921693629812519
49139e-01), SC_(6.38771313101076798184916637234037591631630476518693506025388154191480127015986530208615984654102066160223638744973935483082365448593055470002327507056651767849014396832146717236805375433305757070883314307096701064579347870155982807280470443786167533770758312379604707343782359552342226011090633160077523578145167810262263830014035520208938934257324947353709830917635397437518132188605070760628344358879794443634580776390332446040995026564847535658561531518738815456137767206748819904544534640439838368e-01) },
+ { SC_(8.77901554107666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.694001557147581747514639563205813564134110301849973298853369803473564844176495751636111559746829609900747061771520828690842201352896756607130318545446515889611524873093433417116836240261911254524892087997902053517857878090811198474662373336276483549360144794602421984090635878365476506412545532292475956347614041676675287624343419746363136297269618054132629220947697259721571423846589328799338600141614542970807767208520527474603372568984053418111753516995280393308977849791317653079397275924706
39742e-01), SC_(6.38767094006967357656721511247182362249968335273513367163289737234015746407858671691537030222365046724074960371995585209481034408116108478891455599216861380391587550923462076145935873889833750036290480159091501120762411644650573651648384896795839250531931008594162378543229267022201252857767447467217098240469413303271704255149771366309687473842534080354893076656855938206360596197074473714118186747774946181365116197433273399245150535866789495922270957506694650891577421983522076341204063582668149071e-01) },
+ { SC_(8.89235734939575195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.765904830089180758281237040433791328784683318019677255916056736542983580018402063266844199879266298937345128657264229381463426200143969722556489665081167627905711948598931718108103441581334332562381496610625291616556873648224347881531546013432562873611247215777521825279275136049666997369963934407734665617679343213282875812380241219370646968391310964152509778818795289577888748954328466739439896587768956125352638329442249345996387425710235237888823941308597583321459290806255346669100775345181
51665e-01), SC_(6.30005731481845588273036576846426690914673384479600856701742059324050612829369196434797628379175419804925394509968380629103231661724961641777260194329213816053275791498400614982137324243094565751574074781317228207243051532251035366786012453342678640581014349843567477661892513532630021150492274687780375569033734871201459611566752431721742424256015626449576318661533280124185966359039977200045726794752617623916091606371771736962437251873603911510569433817985133372013360763397076481029831695401715002e-01) },
+ { SC_(8.91755342483520507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.781753834623251635836746550430422027282812422253669351171573252251814766560675148370389259928091756585303682667763813074905482513071036307740463874846326722662422893116647655478215628489720715776842968512904204157606292719439582850775543469282759508355633284639129339490184306115968946499818469143686618433566892956008985852022549234882125195523278020281311506214664198427824351113977564406085454046603252340255150925777894673510854557506967229551219222265349310827828794686073739238077926312059
49763e-01), SC_(6.28047030542508964660984155843210515427976913195341299397416880066259097497362083346900049795444015853644951521277472704361379055931891605371832291636618616517177726378221958317024446964676152999346744441923607521882244531629771088311460630752446686692856778162970446447509534204791120267039919827654922453565156209163873599425863243716981444860656074593325137604592825588655286932687854692292092466450735118048208393976096856497466171234771756357427282306123858046816566008416672777532403900088297464e-01) },
+ { SC_(9.24067020416259765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.980589163127353478014395861144927912475043567000353503726173000354913256424987384254107574984636808397494050418557520823861069684765364436194205027745200543421669109298808366247893135817228800909849189861085377360570019037013434128757690734711379820845100715483086741441258325800177986013212601417663921938976119818496083906215701913493837708028987790742100235253812940567740825543279365994427116813287632576906068036316081910128836564860221736211946708608495285503838557696466702489380508913509
39424e-01), SC_(6.02579427207519654945448773493218643267792147248371754581363473609795758074173708675888611453910760118715338469247983915920902988424878326449772922846334087438143568846425397712506600724800259903626436144750040497543988786284363660844256167811788822919038705711937971087151329191225800553441192050916599960240802588789035166708012627077407281815309268388481235738834736964636229043914244433488779816191329214444784311750898666557245872423964610573173614007380193002623880636557775872455442732077202276e-01) },
+ { SC_(9.48538780212402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.125646698641087407045264842077578331471961457258513016594252360685732759092344031334438715016384777875271745142362713698710775582504704713888123417528318842605995061190373787624428776449760655383291944280992005248654740420015141347421969037040609547075135459048844642296148304862302269888882942218778020211829150743253697187222957268975729345570264313054306870038823839208352405580501433748982639101163025934891836538197572586550431647400507112164492092448228636021135901134778744078878522385927
32150e-01), SC_(5.82871046877979668715013686472506038570335511014029685667146599013044671091360805600736750567377723257295386279133021341229729624564952052341881681745532136732380301253980032056794607614053910168194823631388805229025653111289051579838992739177878645806958792467024000124031374521011702353300856519556067014730143575223461653982478513321149281707480959361188721812110134045643590586089099302264567372058785685184102186595081293450343022216284635973331409511742034734523393411078859037050754025652927233e-01) },
+ { SC_(9.59645032882690429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.189879359593520738756143502214574384873236850419143896904485925135302205192396510379782695081612674909451546701665344060631388411447463653137420487425468628287730940107956676075177943344416806081842416124010777754995086975099037586918307685804131708349392080020454275872213657873554047916922613898709452212062271699878661040282918353843983300451124540881918688531332310190911084228469862864600282788428139134969645873020413010090652029166111228496888784848865202240289209805743863841022192097228
55994e-01), SC_(5.73810736003641035253230826727130176962684890290455248696750116766827303422983360120185965011205954543173332229412154060647120027510300901757548306117034351503130130202085092968416847247811715273727937511806279023862537563748813367037827626060355844175390548989122146048668943889392616278176867772582425831898960286338108240256596607770829334879298832455356563498708453483619048063771908372595407532180041349800539325399287092471638125266915313546537055155682234714560615363056319665309958777686371598e-01) },
+ { SC_(9.65941429138183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.225846176833649922072293340036598914803997954609928868871860497749170248077416964797723026216850344695442881465454767893436807908135450292987668756012664186081500599150902500704962201818220894915788488164218765196419472665678721308285566547824267001081531099761200846971532301206987324127668441086554775619740294398221550468618121698071444631163593265766130371641209838185490536526882522571881814442127850106667116489744876861679656087842093324369553844623274423889351870750116339976809365305066
21554e-01), SC_(5.68642723290039340463788908562022024375903444433579040809686968815987000773842985996083775322299516895433513241758088005769979020979884462820837775199929822542884367476097461845417648807912438092370123891315698660843301159976154405357298789332468698532196213669597486274889313498220406935743400370789951032049095520369775978550650161707155538699612971113574623040689344171208145873292268193066088579319566948787164894940602613163719118941837781698170157843766742315044243719982001719645953102362474957e-01) },
+ { SC_(9.69469547271728515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.245857326207098483695046632678428029457131409315260553036945843502164447814331311593357102980755099280619212956373308931617007385980089589330887271356513200826188941713780626809883135167734134798198759378712390177350489173661361885014964870097070952592691510305320830540708715817766449602700940289193414050325307251133036704431685366332751683544212635367018254562586248386061545407302255080378574279118870769411476942863822033233006765054553159124784827967223916100906506596484991879065771861577
37056e-01), SC_(5.65737014484970044778411229540371735847367473436622430603910050048311316724172043446931327368976907852993925629246318655379949415439703717508354184841540236193001008856676979113360314219485181368297328528332958098894637359296941591426628297169297310200339047343894978498011481344298400110679380143795548248514001432340911565558270373397329312435370958143775911560520015023284874302778208115584385775213841761140000781186422079463643822755044052498499982835998207187441782548557791825513942412399991580e-01) },
+ { SC_(9.82646942138671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.319688658652273239808175885340121450729569181747393475260601107843474962142432498110215141684562083380958033682112361018728632678517085202998865855584485985139075716489923562843865134550555074332195739056465452095580873016173084850288771647950436208935779918757893844326134692208758742373635550581198467487046629875798708212303961678780446116497929612536894466720291684738417977279201749317152231972526282909946817929261088309752733336251015783311525865805551176019901961263976275740742087871893
49152e-01), SC_(5.54822319514029090084729982333587114741858196394685335721946904277279159971925853766398940004554450358130664133950870452817706012609815744578631545675150846874896545586299851385016742044321351006651189895571335493578725988267159464590787613441298510791278188261138742850430318264030952823330623956793112834295928275420379877586093404930828104809080519247793234083735911543819805565871096192190064772523384701149841800290179816133071704715005293923596635924030624539013903890347671661902299554760202174e-01) },
+ { SC_(9.83216762542724609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.322848798582179695912372550439801100066861338157762029222718527768567713503321013390103247038435171161388668569082576144117485526270160619402810282191278251082846817879390223819589048981494448310107162903540114028766281971274330482910195720679035778993080977704204132124209884638263118226293386116863621931990712818780957642886187703568862836608408855661362779687608999081966027391827664629571251448554602412644148899002412253760900294954458085322227330582726827599742869305236049725915419384620
82738e-01), SC_(5.54348156630282013522625791463277163031019039811554196308380824695427495715350261849345006396636896908970353963418749516078472471112962527026429006539719950884742421763042926231859443073464873027715096369578135064095865745463520613858465435926855006544338822632391199100108760066906871869656435735978048783045865402206282833748844644409629233161318525829336270222617930815810267936525385743714996362448897523286654136619104074977496801222450463284538962297449469961368377755944588348099574260345963541e-01) },
+ { SC_(9.83610868453979492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.325032871029616412881015603543778423671045565672309729116224779033749539123559152452422407128491087129751964986536790100313269838134578511321516620654303085366993541260452529733339110688099387650748622488680662489501834963917660606215647022554210804830362621881224799461393413818807990164467143326669591219984886633461161328677515651901509972981308633571429378219508468149139587154975863146568348661858229642522648677734076582863141979671361871534051462575569071747023843396833518781102014773293
79447e-01), SC_(5.54020105197242658130588336922487025506504893915583522168469404039255366646111382241684933345969643188484322454205747301489360618730048950013527222210645916151377608244930275389952630297948885962678803933526584267017432976830694495613544874392202201421177634556433257628036811829533377199654511854934046963490441917900799491948518218492351408077283977664676923257870328730978442918374816705738155924294226672938193936714425640217827125527711078010078149888140743747761531647128525612808314747478972570e-01) },
+ { SC_(9.95408296585083007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.389812149204977047178993734186714469284838908550602847997409713048827459209089357369439397045892679419898302443735518952557835880736791135901739731145849881901556998251084101213606861958837477190070078934689212187272748072979913632174660386646571373676547230849734632909462566506268367942646830042782115138992685519203123427562665158262592597265121897578727128533056096676190024759128333615184955119380474408183395055676769374658642142075737859168858446081233125475892075807163639203658612851437
64375e-01), SC_(5.44160381698746642203232743195166366078139632851608169818655383956057684555190540842709659974600662215781778550742641804821634170960591630073806891722462368887780189280469596950221091518334725610368627400853243854101015413430763147562200343691917920252378433090596199174851325731237602783897610447664865875066758800548339826233645876541728305686639074840192077219628286646161024241998090709536557554219707070398247151276149197837163311776708081751732490183361938952600699049554602049842531852153831782e-01) },
+ { SC_(1.01810264587402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.511134782243401128197694194066683432969971378521250850266276010336952210272216807397592284505192399067634838136414092052215699070176495449396511240702005672533119237252556853945571152881476513307818548427240828580863453054893886592752015530642046663243841348404427241805388775425705223377422753879031829434878650401503065627530087604186068121385371674029193548248033734631545624716589109997236076113478556344751551109922371622746943337361774997457945361496131513189435826486999662296520053584964
44489e-01), SC_(5.24981758906788806720321221493041546046536853101112224546068011604066251428211928527397002568495685344162019857040043384725024419519787535508177503109959734124106406089378362511958029320766868127672972643210490560131971265057069410667058521515850110288642291074881668261518014868103948599442592327439087184092477973618634763995106587135252254198900232994974891591691575540357713853493587106149036294617662585229941327315258402172912132653620060621681600736287201723171700062195198507667762376876900942e-01) },
+ { SC_(1.01955366134643554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.518743386254068987517963760824143972278268316889459883673607836860177195696534986794950958869991877146034285242814897026970407390767230129749366318796461880876843882062137848417492409053224624929647088677747690420853119784219005632157804307476427196144662823518139714979032355990825639734310893207457140747122387305030823823307568576728614299270763602057799306740442026761733964354545086247423942506172036984653752005722496005896445418117309731024485239827394020198808228459064434542989486322204
96623e-01), SC_(5.23746227854220998683713255684654580420349623900629957727586767135312869229549505909978296996917115078905829360331882501779993750493598375098975060336863081613594923694881885705251788938200175364653283701562862904858617940803729599936402634714305971022089877816493348526312968794620717565655039815357858048838314590763290686976255039108541835565430327578529839018553312044777610181376111606345346520328973885384006538597494774490276543810336811350585911692458465560280443001411399885568556041662167070e-01) },
+ { SC_(1.01972961425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.519664801117743613990693287019959350713720202191433099977871136383939194039681369151218611758355387546008344239635148893051386304337316087106036529540694006062865604684077671071070871904872938339526639770076755065783236302397135813243732459040269582122139919693357702302360663645563674553901823587665865999767132217373606749820193064706737661635848619786620235665813664378710053569061847118664342141647727643201317032748701311069140607115345916067579519790263271618231567236752315778613338423183
94569e-01), SC_(5.23596329977544420065144742862516506591535240888055421546339421107981141699964339304232991065563646931999786376875813624393033637311422887716774299128151274880500637675282113944004049643846577609752770470220724898109324739773136018960486589825495016797038063092491896424124930201343699338944844182394014862004848223072687172743460980013255184854002963549706263053554276115375457613032065224733557244235021560239945266210789382637676232772997067729369831317445346394982926087240786066756007065976865199e-01) },
+ { SC_(1.02203893661499023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.531733599932755107692011410675944174763150711446908125956539971915972620713733106684272740187067158168756026169817346866234492742321649650168890220727662274850901585820775327687575534012954458933725006145207129811638225073103265643059515249285904394527552774579280644640614179963753151271549800213977656974099230572561868087800465279789299186525020646436869687878997767115394563392281004465630666876488562125110314913668825005843090719460654161298445628572126237984493905815885626074862284117632
00912e-01), SC_(5.21627470325120732269813404010316165592480428238754867261218888469888255657619814460908558032950507230122405786726087773136456927684474035194236890972080578053974577567271612823522403564086609541956175796055431451651302515819459184551928562294838939499804848508446524019874020648005304158480870967982703639307838393841009588105053700130042111134661167777802421383209221609204503819802214845033946879099849476229349151407266021771468544538449977330323950620579696088984722405789899241692475022421773349e-01) },
+ { SC_(1.04224300384521484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.635375108692556260066396496211755987355382160490960471283146229181301212057717501095545984762957665519594307324659462752175236126004713700415725979957819713711395748214116279669477791350638720492621422502527386674980805408643129338108900408925881077535491434699638150557518558431221507852205180632563170649767257725869613491527696501561497249840374102076782800180058600172599903290833469570465569003597169592296958083873555516275535903353782657691459419477627442076814624792322748583835822583211
46682e-01), SC_(5.04284609443645644137677327061934533419774433045359305110392458573885056024777806215829688978846281239767920668722056849722240308192065029841912755982623384774057517123723890362492952826228273224806621806848022766917062904511082784603260842696460679290869901569222629711739587027262051175653556877760863288406690317492056664849858221206006338415521392424645862165044887535133202678928311297187596359205254783280406914115226610484936105009423715924949584882457354022994692793854393523665552395861099271e-01) },
+ { SC_(1.04284906387329101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.638429790026632384494352047012967744796558261069672299819224244577310960658209300757800156019980551417766734348964077048949693550592398681849480334059375508730326433886634288119009362760625064813012077866123502554306699904907292152262351212223497009735454754514648177668887606290838102927162110702632599272449826258035106944875671625463048756306680452466989923651475639683394646194977466214081964952033768017506174319251181036537188055216769621349717502393732496041633669414438877670022039834208
37004e-01), SC_(5.03761161293528383227164965192425790682824545017807701791943125349294184971304713651260221666354091350373720273671239823498548250306546674281103764298601227442025581335391701007457061014636915234497930895368532401260152887354212476227233684348573925252957161208187722137191234610043021535983693195925363819124150968863527869550047518806715597667180909668244768170869617482829743029747976901530078386044099961964993287601498583919304961877326655570710119819762322404343568305105919239287745118584466384e-01) },
+ { SC_(1.04861497879028320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.667332473778689514472521652969971032759023233068256032860254208119514331974649557408990026467431623066070944554798347275161636916205843237348008205532322306420571669479590087971226458342922789189570855301378832491257182011919814107658626672382918091575258613985111289983027078216596667867852873959936377130491980432392681208754879827353665144309065886614712703676513308149973545830322007502842472909483907410872398471957150094099171563232201635324207820836775925809850135459120226989035289955140
45046e-01), SC_(4.98771969831719617656313296373814635897071682918217378300535179362133842502217650129347096266351936125121723618551438325664026121428000063243627791654072553877437816025406826832329511867150127042335149389897303965017841207076047913283061462035024660008951807614818673627574045268003412329001964254784115734537224971653343491403923664649208156711189624863323988440483604190657287900352131068098389460854483492037204020251328926921040829359333356258262691810836937317931035145533664735541511268437477996e-01) },
+ { SC_(1.05866098403930664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.717000929694936262795466936965513974939914461497943024858551850715592523041298089576565343229856192155307035953701482311446050382447626014995580860662532982017214524581398009243195252159927002076314081786440675388110947576396721628836101868647833172169385833201409272453966241008392237825242054853458904307229333644611842663021045669229186445617898917842163363998241100160963250697803927998287123604986927236295187724779045628785510879791531800161196606616297144281711525951345492449216693576373
78530e-01), SC_(4.90039741160832963536753160205593132037374376582430495044622014080102593330940543147968970516476557812862892251484558355747279918010270824195900052852345758671435269294213984729937106474238759954744443173560342611126375754001378758626835355417533327367416358134292679789559890041569110407731964541608547658013533427986766123173276022255728761713441308385331757886687513503928228738633573577685286548823375042623755093322781458210089213265443292059658113438004651530124637994621070590528663737218059825e-01) },
+ { SC_(1.05906915664672851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.719000411480869379735553216043302139851408868960085823368796804859518018385367571376801472276899990552811469086297826336262081970371566263515908385199382276448432327987991512698677307015922573713905787926200456274978696158061062926251440817380381490022490837471417785332951594393323655482400345312659358254581520816751350352282760146164382146533298409565841969249471862405480573753410232477790016459216785130175684314153954758772806759236898173065003030080120211218112400387248564661655131331029
93682e-01), SC_(4.89683896249370553462585077764343079070425471970774934269762429179697954755140596970515332881771953730866664093747597682883770922465296585756705379891189164474550828309710536478687378551749125798283750925804320256316131484501216766671168200003672179899082617391804064193590636351604598132301058797388847653654852045763239641614760898092478871627214104974166613633239197560113865348299157056473943881709690798686908910527770066800305622871129681295792885174909899848762633358144516547914334749398063424e-01) },
+ { SC_(1.06404685974121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.743267303863228181654031838299802312207047586645287613874207933181996239881882872285621820151314572642370172270647466149985913996115483498717112917958244191645291653133130210834102129423833341480707172044281333486463433763102454425595511323433337887731893608812204993496686573494676256600111120748825917750337459411847799216791829738429313739797278647455587018790464240846266589381140803860647667693382281760439039946132851224037493737396412067900747515327440110642578812357359119360104634270996
12510e-01), SC_(4.85337788073381287161887688374158104787121431696676269420939153194208236780343659176489818915243470660478303445022418521038772374464737790940191013779627823755948639551012033500994958158596241638089706174311771559123609136179569130774973500169818848750983070485708416951959646979887204315285378894267769462886898693434976876822042800157209311826110363162979732940360749999711522340809800368388340892598573711896105070909259272401472483472934643092264455000104919075952371469577743222764107855405023035e-01) },
+ { SC_(1.06605577468872070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.752999677908003269575794665172060357263171027163692701283919082881359118521957658286508729285334862353967336138405883003448114746264586121759894303369952981546862962350442687477999018957097108054202553419392630594767013527441849308282901065591843256813551738747834832920644012329145788149956828067886890436185038552293386305257951347181546276429547615546111431127715484185657604702365462695601674120330823746310273287228371212537125187952186998235585844732980105147613819166632500798311459276371
45512e-01), SC_(4.83580361869073329096825498101204074277486615445135909310168681314825584186657157743805083975295683484952524011405934900340956505003827546459728857790961378812777211919246155282298673275109441911741584594258370232586494882599141950379291167180634978982484743769885908842514792665575851154827558487433305869590301423981877540440377311878647101784216763854546447711696835968416389178865142487352325329510548680565244359142338882708937974756485549426742727485384836573096307146944816997897987974865088132e-01) },
+ { SC_(1.08875846862792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.860520411815568044201578530038092955090203810031596326783300319261556133136976519282244545534612365327699475002202611658331940502440174631599672197133431908889408729240047698986680546149606120677681636257089223358545255642172935719560999934491250257602753997246466414652792359655144681630448572668248254210111340687468592114311420304826540923897889844486616551752182659165229662485996351078902905160325951366349782328556732027164592453819254847234760804489433368869864526135477090085155454958175
69844e-01), SC_(4.63585785284662028256719823759376681906286982074268964315510196265728231707894853818039426659059071662329061671114028654510223558493226539111242214193138182512619106471156301700943201023981145277827931214941828831485183952462840898818541019222917041622101466393157750959830184099117253138133262959308462031622066276723882938564922305305898089637006609621812072121630293042477785161605023273181599435075615845484386493659177045916992081830224540648958182405308981792762102370113493840942771604418998517e-01) },
+ { SC_(1.09043169021606445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.868264822369216724474491797067084853750433555536914402735933274201682394771322772143447207937116998446402270354190190436959961778437529809656595076367331140757926215566843393798701756818509934615592129243714820173605419754496658344117629153685909528337256171005229563686008994753370467644785779817438404147522279427845208931845276691001418335541909418213100826650455465911310967322423664040758795682328225889628165498257705352620474065322203978843497183983513513456311464673299043389882777814123
88604e-01), SC_(4.62102575629358345358193278220239912943762914155557091630440688880915027260681567495686384307691236098241669002192609522100608971538797481822468296643338310413267745080338888521763724449703721181525711685961754882823506150496638839603163061168716786433832063182624298206059756860545859311345810189175501383844100673642551575982167724888306813123033872261489745668071968509975782852008866634876883678069222670357529286372112832471386556313264785227932452858751012982478420628900495737432680259485050530e-01) },
+ { SC_(1.09919786453247070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.908432278526364177540780236701818367269698885507159795697615824217888420098111660753571044093732005293537973562961947473291176338982845957488849283775343871042179628095205967094610757490504421943207441095430383603035712066555302549725495091915778350613856456624043647510708250638663141228917421922555382914200084465126832655156754754982670337913367247277150865346950387666361053943075158243331792098636135280553674648227689697909703669688601003987200981617048013492290241359581029072839283893232
24690e-01), SC_(4.54310844454648379873120607006670548106504273936308344713803781953816202878153053648467912295067031642609621240314406106159323935686078031887375872538432773046877998973015349829044676649690256098999812181013898252995101567265319895403366026693535145332532873655206578590173815426496998031760122181314810388522458497891773842101978471976657558938033312291904330254393742169054653345552739972745892889286687291515486452550371590537891653627022141132791592981991782894148906882988273880648621145756781087e-01) },
+ { SC_(1.11097049713134765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.961298065252779315497469402580540384979014856554424620011931676155538996424233766796253809570069256091164392192248580337897990750213112651994758147095999073515416824596550814791006371484468009882915443906501395272465239801475997601941787505233784338690061582148295183723976043078621319097176840832042842411983982310891361809304224368409211411206369856529418163921798235678685045975258647007253173776422288251935518840855240276776229625770731844638094859075173500005383740623100773153662559208743
98518e-01), SC_(4.43792034467686161435066158920582937499712557756861035727252976848950110688968604315912228708353790253735179591661368667429164980481829903835715257840075598064072824002764782072845168539256496422996300665292347918368805696122560306744840297116277600434841582751477611680800989873578927424627380500046081155735784608784217047984558403352197070648965620223868221536453713383650286042124390749422283505134734861735393518918432668799277981357022864234465981498457298557827308215729393447123815324719923535e-01) },
+ { SC_(1.11469841003417968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.977779938440698678830618338809116220068873265932478844346632541936618887342815088792805749382012456020834497325736695317839252918486399889681251967045539535893669909189446956387537823133213238901180109222215738024746980700061632982302049724834459367168161689209889700671828096819924447022812591382981230852313270903248106289118307662773707216411821587148676795219185261231298933162470101903594726098515121683786095917143362955745221330172336680014709283207448073640318939094925357803115371143963
97383e-01), SC_(4.40448264577483885910375157946717295915588861882827699636627088893229732284307726315707187475199224348391643359726102261524390968202594593840733279233687652418354013586574979551135946054471473954056758870692267774395976316275443998231016071492822598582945261015440379122802477725712247192982519270953451354709602577554144286980143085436853223623449058582287231933171646155624518683292834351505770838921143886420194465409487151334011900040856783736776989060019468666458059591569074292685623764135347602e-01) },
+ { SC_(1.12690067291259765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.030854893853914321382536483201365848819727833278902369154139864438011678445165476034150751505168295377238477114833563294110265613034379783415381378361466315308399070605781654846074552197379672024267872880654301920257563144051293161247926006343873833852138136223277889684265368412774942111167311732721418471626516173099445295418155810221238187051070381520330996188461228870433268571401519452226937437828528997006351615773342050063952144569852568020549054164227681964085117729539886059955768122406
23264e-01), SC_(4.29460823430435921006266197584528037733748764494732686246717505687114122156436032393588509554223958375815536774890597205754201803789763800242662124185976046398574571942282147255557615032964621564822171042288133276038438233227333630273947706974237786924602656504453943651543681466245760446369633159753930120725421033471338114511183990802815831071292367895473665758738680222262438292573638438829073833666408315924246288193759142668342008705805569331144834511547498169751495542450410208917334083742163910e-01) },
+ { SC_(1.13059329986572265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.046651673920493196203455345866906015645671268216771572881791462012325022240384221585908941292584276366937743749917185383317974028623177215993586456801870660394835611962115103835405147567836269430256456176967373185710802179356395786702830511673649572323922056213601199280290383868680263010338165677021869164139450268589458988844445391338857450120297623712050092524523535613584546352921749821698823653069444178335719131811924161999365414733516851862135961481259029689673704045306305587774590280743
48239e-01), SC_(4.26123145237987963991613880409153775051796291409747115768848883186503992232882078065961622999098345555682662519292123005912710960263209200406429824415675430100909189286037738185934817050387012187711110624651352320496017247435142334638833769478198107500195021860665003684853075795687835166282633358049322641609672922147273478139866808881821932563138904972039419343160457702042396592530159562619762244687437043963692192588118989577505084607997788618215259359936094268526404135820006637208410406899687037e-01) },
+ { SC_(1.13203001022338867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.052764490417336720103941217079864736476503081547968209884506679953714277421628934897597014411449727426079115987249603886541841348706873205105327236582738493886883492171114529623572945464266663064848134581918476242090082305039331286579012486875873853399745029427705487044464902129530587212986082003514998745871394214330418345085019663398701895808061514312806301660689715669709730899846282956338807398973146103697660876380708218036844831769898197729429854556608253113092358765532375360136680653050
00950e-01), SC_(4.24822964080791397836406140553655164285290555828753133654215241349128224504862552665142530358947448313244621905569067742835864871849030965039778594300582077897713292134045831590878909923650003553010034665210041549470686252200567670421755471525246662755775220033654481207248039696872143349607384217082384877921659747747396282196454772408193679787802467785949018949574031801864194180099340272507112889456095629725679569306278784200415308809374685045388176886359807464124186606204017335800042421388130291e-01) },
+ { SC_(1.13580036163330078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.068717426148260804265449021885529690978484598062538413121787265017399387555164442118269157729790905361278557675258990826622241146221828158156123434658317263912556079297340821432381534026392366497345313930509399757036054973110194194941344592613211315074170087072074438996467988103504521198412136434996296204142110300840939610274408027326008317539358262764203354215698303257314758274146637342554227929087655233519370645352162470759858140837751659140305727415043803959137442987286448994100102746482
88436e-01), SC_(4.21406742289143540056935238939259708541056211496750699572410089673639210208041539522174047279155199117564705822879329351588563719453367242375358674638504791410169798932363623003826047711618787025951475619627355652425326365677533816876071542203043388625599667790949286920973946005101230035741719273016087443767907768947724151049369977302480232422549185276584371407614838897669352323162936830603087635485697835568603231651771815134621466815124052893383759994838547910992828230478070297904246533640163446e-01) },
+ { SC_(1.13661003112792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.072126455050783365925469933420343473460361665264241068620791388011014141550050797009692084425784908977002094245994755222463772492972447779093886239757198051557169711657822317682038993265601216684529198098591338012112113070560506471365799666296958488779262822676097934655712541182522807525015212621307779419831501439018748321131353350723443832709343693719925122779503103507477404182375584805256884442333531876477391641437862056626101523868670317508857076977353060428084872924637257154834521318105
54418e-01), SC_(4.20672337854151122457419922618285571400958915669271978123671381721041860797076368560676678098491061900075566981882144330319995537031854242613255071424533255100142882239789654494110694602824957866149242812165087773509386357927168585463500271966119408996321033682473168219447765947440866337522704235078470443456337386648514305992195750299860401351353849013577922401633224537989546041958482707453618435788414778552015740127056056170683492826198507074529366220355468791722411059343918696159230187827135461e-01) },
+ { SC_(1.14259672164916992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.097148081467867660494898018649420712900265822306889369684893040051767876399662095703415293481323019818853214756625281443064335932668048410449186662998595752820041163345252534166397947497327387871817376287685369402085768361688946640204602696023930487374090674754172779947783886678222509281512976751110153566411855950527353840193153074854564144772272706129166437202720641239364914520098840981696797771058729455432972926725978461822758402263599974418487140508710561951102418727297910366256216564863
50379e-01), SC_(4.15233630428045828571165282003422139712498001317957511686008534131679635859864183538546177185653594374218335784773172740834926166657981604452038659779134984969519272193556311849431489541170367150843629073886554832945321793115321801590597547238379687982261245564993552355427076728293723743931166369926846082988125088930254643258317503216425767257590624560371522928955957185570513735646894542449058513305304736526991548661282952311223031495252853637632912517195447976026206965381611747994754319121271858e-01) },
+ { SC_(1.14562463760375976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.109679285054494424770814220380754352626208445357331836305399490406395802460471117823963266321120727703176018623162828535911941951280255597734509724736831122480386984112518617895519264938852417183749585495138709602228360156856294506591245636146588359427466641461991126938660595308621185894596491243205566090923258288098144808629885765380196542668972279754636707117336092747261112544493858006396644756042515356015887206215977443118531000149726434634602211719556341925686534775107941828425499762911
95423e-01), SC_(4.12477191168784935397589542884325027388357689085498131947537129681766142724657274514830840400491483690289714355599661512898778855332753696947337182311118846864698871919209941904729470689913124105484612422836802503073421988240018713959679754944896616022088589357690960812847247905388912400965711338977743333908776275515778687477194087747920739357278304117980029841210676526164619193233342273088978741163549949119443274091275889686142390637733620167209522300374444339487273724884402412259930353569845255e-01) },
+ { SC_(1.14827489852905273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.120579001438722180679709829221922146681877951169485116729986547204403439980882598156871658727323715449820854147158991036594389005211945916001819465832545306832538699147737588177298765057666509119812732943942463853175449140098459725309462648822549296763627090651434117147143740563569263035620189563945337043596473266393278149041249786412400512514979493101611326734650269175920814808192293591017460145668985169058147668051575964679839772251818540876661562173973124152443733013358331038715610070797
73134e-01), SC_(4.10061442695055656241592053545077071469873703766913194109513704590498736621005492180749270920350467016099189629802475477376987392515014862532685086320893762312509118905916882348513232369480296518941886810485931101681991846575827285414850722852677268262077026358236462435033082529712139434835674072710092042900091838274521865048762682145068651151230083599431929738579885687009093402528423886269652027467895932317073488434254279724863916498024223536756341449912881006114760096653887317577800794879031173e-01) },
+ { SC_(1.16087532043457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.171523075567830100826042340625074161688622223228058681265129088743504443916240314765197901277242863506309186616548251821572306921028099690147359761819378394858228388606528460310925834246336413916448607708014910687319153305480367066680195311947689325141938673865501180510903516254651365213872531672987694840992547838550808872826482576705326894777402875684413394076979822927797085476957436449502834772110984505986168873972285911081407806404966176652001720777414391820652743015750925690362917614258
72831e-01), SC_(3.98536880029023294278086460148693023952159542068516426102352744170696664558788735125994072124366919705847446617560472546619823569017866513210849521064383900291761216761561162785231326739724126611432626880545467591218595745274715036559709822417247333109223675317648292898183991722665201709066965713530805920987744018060213090984936415190464295866173245814907161799185414469513053299582009503693771539080362564920256173007163387568260952162357027452986740446686993641840055667439013164437546688199957800e-01) },
+ { SC_(1.16834640502929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.201041863281352984969572485153809255986824450834189729942715071288996773343540247383511430805207587084886674153553122557757852702326620895535779679708737364219818041002630264900205683718883465180336769239361682998590809484915385829303832691063209619337041013949930228666295253120576292144373256110431081301158178887493575396830626253500036303318060280556681058910890904576342371628170666045896807597606973034963575839243707884676668476484555306199095985636669987533008783869290674269131867367578
89555e-01), SC_(3.91673698761405321464513321854133469209236441434776579154828431768579035949142740619365697318411018051757099441576277596809431746185297594423424182048115058393371137639111683011078346738805323243265590930585823423972969974096869859395067920268358674806993929141535131498160046100298751958510732699978972390385447219959583475405359231842797831501966566056834990709022102530031667881663532298096407254848006625574985191288563471602091514320519928910561533915950755452343557100085313807737796666507723692e-01) },
+ { SC_(1.16875076293945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.202624874611502755708548497807094037479976065901292562734060020913979263627256797003147690115196193631706115964789884308299660314228916912204391600703743085837835497781497715610589346290679544297859927144639512153610155372233080028914535488560254594513936596323619236225713013822215663184746338891060566467921040137012420385102371981947579916683510950636141843021130701086879397234858950010252539957639223381620597284743004890540516729861711540083254834250372176754908948352070392183247369358885
48623e-01), SC_(3.91301615345268197670216410259475825479249814948784542097263382780490667222684759025749178892955351123015057685619256664176699053210800289407983698386813767660647021867504064472580409883400638687828026689981725185305365366518569508764730815075227525401705234916938878520111673256164342830245867994075805093498516476012702512020012631774741281921364755873559668935956266229855973637764179253709544696893649654956630131135234060288014322494402701900781641804665327126095941387136867878734833794824793014e-01) },
+ { SC_(1.18831062316894531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.277397691911429076301122610546724084338270742350855264214824025286338278959449237141639488626851532603962402623401455275600631554055279406071469819935732665642901509677318785954887272696170508046011449696873671699636271587253069677112031229293411898330541789904225551203828081150084104795625074725672259589155060702054713881270868799383123820378495592067588209283323077121393109289579988041944129144525768471120333460937138372297815430825219990393973035558915817731418222387406806773639690566219
60270e-01), SC_(3.73227706181045574613892029421809688445117154458049890104744406554689644882750279997054135059574163615307509496387105911854259028657360416931236569295709228060537679801566224951288390179021321788619702625697075265845040508785342707672119147499611162773659507482557860755116539100333611957562095234456233834164399613991535254524932170807619064048654686289232544975838193264702607218242419552506465332505750536654755302782459301575073829888035473070859898459854288592606628531015905515215328965859623271e-01) },
+ { SC_(1.19039630889892578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.285161864549024224641420632532456178358319933220763646931172265474960303445602330639815536926321979062064574968880665029922507086013416320264735766756040095803827537781046089677145678252300812161746267174665949250979436612838212611044323829468169066424396430884333435117901231737503119561012535601757441843535237955400708555941967308961877784758431091460322205096487215922273000006681940856252242647700467431649045309858038546683820329030914573670689373603467390583821310297009697665990275538805
87035e-01), SC_(3.71291922200369017368204717159193337291160314265581751304430097275815657042961764795772603591106890014199979261611780010990427181966397890965023529008555433311859263133002971046765531291467046041422198778207159128153061796218688191455896913293767037947336850496541997112417482121395773838067935117340279113670753379915713771543247146237271051406985023946047916102811069959567507384501135518817887548474039934107670070502429665488964979540037453791016826388783962172031111105650673657315136169550774260e-01) },
+ { SC_(1.19096231460571289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.287261910596700088059023345844542395485502180038659183877832745157139822713654567219079370118193223082476397694645246424363872032038102790991344902389943633637821326211881750760509903111146057917876951245847958688454609863099328942300421703466852423369291562214695070494697183154974378364896778550063667230743855139468453729462217475023281573583913539909103452043054998472524564807524809114978088893239102344173987144629499338669795764684472488938560744876554689966730698316748083807733835971697
28443e-01), SC_(3.70766317294056957066417833495763491113348627015635672702274459845001395617942727417604473158835895034446078418116146503438699088887013640040997993396866348083748879658746047274170403869051444308176371618684989522258324871577825963013946350547476759792863601524048307707490592682701522755101838488421372094179515294608847143712947490367777105233444576897531662349328883091349236022669451957605736146691710067849435432231268480058722914653984610289840504861644546434752499763108252506066044223619930146e-01) },
+ { SC_(1.19279956817626953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.294058149592285319722818721155778487442413304765394243222077329283710949872238366417811730657646934219628346153415019106627964288716535471761296572305844640019614208187930972529052339605961690320654698788136969663729149387895918242366329309181092438003936762643172473738595328127380373823800719748563439724726885014222321354728800385780427201555178476100511785104532625812020978164096439209564434067122435364147700697691046155627197969338343765654119433823687239806277190290124508070533474122197
04017e-01), SC_(3.69059386982599663479268899014918242058146304796244059493852041445394639969033313487963675689101031682048803705239313832756670076420320497105412508794711632075221423978497396573301682338629221725782129504408874038643623931958659624156623372278817482189559731742170140152759634226143222489507613263475147517846822391485630459802157747193534639725043070387657299498871201980115247626547063665279931867790323452576604332369833960637356251333916740127183701321319256002780080402637694714766766303212334787e-01) },
+ { SC_(1.19591951370239257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.305527348321258400529740154594915035382312845180306447094058326011146558197860123368461009366802077771265964796334024621556889436618938469043459313717440366681134981084374338812364846183823783154729572454466017802941098053379259264590358133305807017176750216952221692032884051599885376777768064822665188483851382589170562945897035508319797264704771153288965546346340256137093098965989646074743080360254721010684376904899085626309280752593020775920979643447176785903741479150765409758888210108585
19035e-01), SC_(3.66157899950897266341204379353537798419054654796604975177391472417424105792604912894740645390003868771294538477949014951205228558913570580253857432999788735617990786196602185473100952466926540228987836275968822023067591944084939010810167083511169035277797744091307218205228104199829296100195491260033447590647463764333346476157327673006815488595244083055259415907488611696454882856572283242204473890087698344001008271889415271602016935370350130295114514382937056980246894560606589697741512051296983056e-01) },
+ { SC_(1.19689273834228515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.309086479721810353064157178636750789100167302110252428420749514153466665585171825306064656526176025905031031356676754011273846884527606850479511251608933476188979364147602302947701471244040728228173086896651385674925870937861059291516017432177831704809626876302499779620669295834037679360825483931403315592084246236622931318829092852705623190022026629318975384759594775821925915132146239113972404025751087545987735092337232845743101019528899173150262743701571802566531725082196770509146152056599
80002e-01), SC_(3.65252089837424373938727945032862259240929210684074233581248975290379302867642149838224468303772701597352111309102217895680362856214434627802079638333831135765550971400956355746825337558988814224935287422777362046821445133407585196406260734897665635734430246512236439325599322156781662484035732365087377434537435860795506489448259273991060211231949210335294264543504144693688588523172409424441977492672322754209085937265193527550849457330550424215617614405156231791817612582999509373290207256377986403e-01) },
+ { SC_(1.19715881347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.310057995175894378702421968143332174769958076494996935290110707351174357830188919606545220709355420306903616714390206302591872767930808451123596986983295198690087360536549311506875438983552944132420135995852260950766075062772173780102630426702615241751688326449955546776882600091513119543040870584697246419967796424661878833654045066907734617913537351125627335762540653275749966377811355847284396606549620807408064319276654188709247155652059769706148817809488209527245749772160255343683930957179
06537e-01), SC_(3.65004385267648616527954865992296715275029468728197283298369369930031821727862070318709641875550598883423006447077958239050946694834283128158044911447498221867204751900599261516784488761688784555629755762916704867361218920515635517453763245342455078305608967286538908919851124430404639267094726214081305999445008172503091250993696611411571069568706856976299567635700760301194898486438742662857713008686781080202029537398830440958546777053699027918966553421725537665837567022045705930444634954470244354e-01) },
+ { SC_(1.20042037963867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.321913314301113392614498950865490295414700037412282056468210408046868516211468718166514008944437371770184630082402046388304538406741101256232898127081696440956293250651490102009050122684664199122099941114472318098101892316435669785595541145519169025203626245639108805684418848543566285025947367655716722650898924683115809352936111123665831772102818083787154701737223882066252079520342103046173346789648651061508272535125475166340515589513748638461011085354174904654316144324260610743160728522560
48091e-01), SC_(3.61965912216269772828200120428024811920456259669546381965248128788391743437600116259321455141954281630073977684422263911816649717453219170684896869008765512815585782466216706979121600952302690882562786945071216712298460527846953632063971663355824055031885453974118933514177156551266644969344183771388988187700954591832948468792829626512593460301367220285789086705214738415671060717347435359215246280542287945602204254892492098886152245370062298214430839126574533251827355360921125829063528873727247319e-01) },
+ { SC_(1.21129655838012695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.360729252732370525897413541033741545821795429219905344205658531909948710613591803765740534673337308680887219766742656950001948200046627996103490948460488240617802095734545977040806112995281192565776467633025853766028034502301535509525191963499018759665989926330612652430753942778546930433968439892373173784062281340607368590053838611361969084768117628914974525798908843833586288136534393291119843774028372327926976514092637405991868576643077259637743013863504287151537560301721141790916817713599
27544e-01), SC_(3.51806024067816042923452710343957815012239304381787658203322727361903081924558982395548437902680194552661545970996952914544963432766599983263188021061667602696823019854633628005351974297646059178922893378662728758461925073548375986644842575266392632793345025076736067246775258211147285299896097131511715201194597912854700786474397178696076586495453199254850554056748961865026453531107999621927404659841430395128647175395965884488845322038120983810672480041843000599942586757533592915075486458021630309e-01) },
+ { SC_(1.21226310729980468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.364125257052921130051811229916240281799428615031654699872260358963760474668853199023038838393797414511403942593479263639752178048863691100165536119271934867314841984890889571789308150519311091524726211085757919310722172936378357237373139946415900196388999449998089021138472859212663321957622924168646557793431360995591723329637071232083613728382189789080591288934323391100617685035982065945989468079801305463082234309082844881199314686338600154725262790700734151173537623898357279743078453402006
13643e-01), SC_(3.50901099602488617933961662609194577832551303168379986695120681175473236287005062080455575167049970587669429800258767273667243277503972476292879911386422017336420102780155154909666335311881195241771041240308554984076113094352112043029341814955976936909466185721106124354719414139265857104084452167918558350056175176101945356049631972945089068579910004816914095211003946675102731776786465580977726763772219149762094975256571732700846263127621206586182138024859732939097232892050622642147713701363141822e-01) },
+ { SC_(1.21460151672363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.372305151706659590853243054358165808243340607599253112350959885833636812108829713610156399155004387906238728660509503965668963329213247132536586756179814741095306637586891501812124821164433959678055223613201739483667777775491940835877651010139231322824050663349224270138817357095186985581774709652632746899263174311803759530815250976084647909614850038640503696540338041291955031995920982811000813887968933197748939105094806881055604243959376340051878599875362773872681501818324158828447312644996
87596e-01), SC_(3.48710426332405618132227540555903517056786716385788196839483490850475902035868776849242484073475814113679351593802158471206518252887259870568005759089726021896451567470580888732652672079444087984700684961404157116233065933905865181127124685548895000573634425733126645685362196697441178043026624272299059779697880380488364435795548619600267324209181423660077472428253880775703087620032376724562736076779072125401913269088489020843657385728969803849312555076792481699941332776210312751607467030287676880e-01) },
+ { SC_(1.22142696380615234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.395887700858196918658470102750036823284907044282345808435093621054914281634384487100426842841097970540964727240127514965365282445227380649078795739123861026645877000211039314921965026347787128222264197691828781040764664236356180605028303202997735029381486017945671848676860701872906819964303073419657453528108077629767578650558339788601223388488019722740495579207205396043177763249570705433076600850928064295451404375220263777829545743917138077869207553035951048553198588991102693826686437626614
54669e-01), SC_(3.42305336108884902887927320575279559613447444606461224929617092896182369164661070824620337813821007909772304866662213350426972631574890823317729042350306113005691776633881243301450523125297179600210819849955453532967854941727134365115369864028598198604524465184765997818343891127520544365161238551649752264818554220850963710321530446994420439978205574105707505176591332458227716523834711613291351686308332571358688396721775880721873257679162552336092352441386034121556519027449256660873800382080061980e-01) },
+ { SC_(1.22208547592163085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.398139785597620477553224559899247344227407365310838731051688062627030821040064003992434511042693199975899503356863163309353130678407193161529828211176364522145169539377456339869971642207944719961035137756282490981090146949146850012530189493494158467586517660913178874461067081849405282306826327780525596852593304367356422213246613520129028394786914543694612413497134384717822323869178374398164710751850816050284867219315527584947823115736393350875515251168515450753482337895204846714432696827561
37400e-01), SC_(3.41686531346600084300401784614799893004757161767735513566812293919164675411857921077427802420771871729690257003944133859117661387568350609422772611494688750011640503072888589321701691855742721189777588064092740430186592868077940180336134880261857041689621936378609096903010378220341856304235083749800120130002770246847233159418787899794883146762692009200694121724147112767760692147537325878164475152361287321256285655447786743373896368939341494404532390842764544084149054784203820907870728211517025269e-01) },
+ { SC_(1.23126077651977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.429094518284985086064747093752647233088420788213397776862173205089754550623001227093695526574281977991044819634005405198171212095336710601920448196540742302697379513070560215482248548060222842591038623481243048100344651779100572959387381145197514204634052723418896178115344029885250565383843480376564287583406756216344492784363081258626207459191166024302813382226973463771916327136149627007597463882549965827910408944909802099166645313391550450338692798014358615169738471758646230255174861439698
20319e-01), SC_(3.33049194042682605175241363784040240910285245708277205252748368685755534290141711394993998500991014686784430027546221468679903420140548619407963172914406334035263949612686570761312298281247646711316376182219248163711930542803235076769721715931348363633226871451602492708928131518862713071147775206684552059843068760118425994684230685879647854670292765541806378318880699327264466824963254196260044211725225547447464973750115240147306146083186263336647077159866504141860017716353241263363657015139726553e-01) },
+ { SC_(1.23186874389648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.431117605997095410355889269010949975665027188111444274783251744816201118458615912971739443983130171026524176328555346960664650131055571842261462790675904946334409077723285721704753980141721182829654091950330288936047872320031949568470565756533999550479844956549190946344817792040101574247192760387434192546602194692586102834320108539144322811788056399551418195681973384916003269738952319480281237810444737358013119150115078323842375935415069950962569382408404121819385428891411171847101134191610
88416e-01), SC_(3.32475874340554457877202447234475014625989155433126288392599830437752954563599902656557040540286535124631296551395636307213098940140603482531580069603155304081711132781783110299772832553357145878218145112077910478105454877237161308232045592413393717909447388261991731950085718673812733427205738145139181209503016951452142299343473400624768159762695213151270652676435125559371142019981631428959629983259386047734915266850184479686836227393801237648335275044395133503637188941980982471598895745239031016e-01) },
+ { SC_(1.23285484313964843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.434391562176381646114360129302283826897554389822939090567487097652185571251760351168037100340774511951473830266450418305894130440476462363971567736564361765604878966139104918182836973487600637588266084574001505352528548909895629868388516957063258957340512549617201123309234998141068008067744838082334237414141055834919074544663560272915140100578644048709663223893721135711532219249174426898763896506521683807034273941134687935214551080816600485588374049536986991597456375397140868929470331965996
89263e-01), SC_(3.31545711049548839257000706395881987887544852335637955820041950634792349777877146091793726646581794280066231025664093730708988019858153187826134750956235714639167905729537868470957660612761971312259990996222427866783399658798385953978906208383850722176584774703718987266959132557807629489026453894218196169262461930928017614227977721723176068755996006303058069652596783549031021267218301715854961427011462057088981815919420755933964243770657110629374546019598030758679903822363458102609871773705474429e-01) },
+ { SC_(1.23518657684326171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.442096670961236979215821386693261769185294766903202504476782235989463233620052458794119747990459207620588328329851334874474854085095830107082889465466182594516794065382124876534838266361285405296389163101131403190366938427013536143119520504759530808220805693460278593015455166264932248570044083048548434292964257921566375227616881067825674030438351548166969555557530466987526376571607928579024298861649154720670844433612505125452058177360972538241277517661343806109966018467003928017429145439110
37926e-01), SC_(3.29344962861476388149406913998441912009230904653412583399999352256824561235741071049429170589583463558327490064123206934737081606018173969087932126027338556221875098517159871251691922634325098784219711062126107609916963680928323227478737529546256658245101678834691028532302311092045323468689356548157944765823909411811533495497374371282141490365239488023630772933241701929407601305723704383237378697819408791569514437882779120717260032221738642842405948248710800015826687135545568410720727074739930280e-01) },
+ { SC_(1.24624252319335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.477931065058641557103723356318454784923466451446287035953959654672398585246187514329553990799987138621188143408713169794304363528040546980963453107319939771945575262148587499424832049587231876689366197895459382329370827442398865852069684880480667291792352030275261671446498550346383056608742632856682019069998497210731179808039305303366412708427535658775172112439486583352125104506770179820235176540940041271858985715446395679518709385044670894851323201873214439953004124591668290749772050698541
28167e-01), SC_(3.18885915744116307991824460697936149035981956507037394874207203343766845897008716157201515632181715607046169386224158869719338499493357779326841073732915200544938143073386213701049092950004898330773411106540232117579844388237617549128045386552657145803158607454717496911937874697588703219813472297898156220846861451173907218251333262291730714466252844502243144054267530253758685787092879456557743676371047799961459103016257328082697210759446844885660824574319820570419954670583966584126272686255168088e-01) },
+ { SC_(1.25251245498657226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.497738565659350079705493445126995265479239683483658186755257816019598438176217323668672039956553859379517456431361041298682911325084626875985531627941004510771206449514758085799610733111843810036868921796510053025789960079406003977050984745304939332042896896660951067013064202496140611529055495893747311401758385174020158698659996946395911697846784676361049343594222008019132332165026877862810674679088958433201084714801440386112497491613876341574174493273686325657061415419197131350414848396113
47573e-01), SC_(3.12937088539966310827617816863542443537540805689998483350331382819275180168620190928606558064685917571580731924251185390060638335515562473056747532029126629589310820045526353157641807788806385485857586135006880770118838965302001129873513923219007500039161812961582202391858173636142000187506046696434678802335539416687869723789979833360079132724807635630965800159606622528573160421322491440022849488963828968641231754471167254476401435600251010890399418114639079564829480566160639228869800176144301207e-01) },
+ { SC_(1.26107549667358398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.524186959566864809418500065416909302397613252327416268385158469368844063830238020813704697546810748045459153531455633980746404288840797975243607757725961928268783269653736665530592943249221471375493067989698634335934111835344033732045078991759386857423392425714424747063147238925641873999658433001443802875918347270036691152508406829585873799680316534334607704423280817706347737591149521157571100002041464345602951397134389469499320033312650574954164545327193411467151687943057196879279118276056
20710e-01), SC_(3.04792761712224384443187440326485521277019541458374687178938884329401562377594129973298941372783852531469542452088127625467352152764900393544352757876910877738043333639268176601041834046867143684929017539126542262643786563076751353073667362561187662421509245109958895360976584080168450328548225498844675255271705276714092191942776847386252873452858675899976559091285901770662612613531069332059711175867315451004429558937196248454798368082613262854234614462702461791856600415426502994212521285961939653e-01) },
+ { SC_(1.27270126342773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.558977026983940197293049629157833397261497444949677746196319296170709976033593041320049676652088087269811854384349885928043807738104084577104814078806653291007513059321325733833224959943141693351677028112477242420846761066637700755722231677373138112812213369167212006929519395885986237383092949425230177783759829397589375595406344967521206639045220864161982056321206569348307066222261089963787501141639767469542390934485426697114328982146101139270759620201411062149725057291153118609149792888047
90829e-01), SC_(2.93699816097887127043847639571997202640909304251711570871621466393972194728942985403745669049952639981112592351372429654141213093184117782687405526804809341776471067929090431550971880375019669575265668215408329474561215692609890091928351019813993747087345436206926066191226700264499898302760789705916368784748646787652939680945907860790073813947944118519002614505565558758391723561571904176502747834651484436309420341412474883573808977804315917279383947293912390846411905449890347664818172102427869171e-01) },
+ { SC_(1.27369403839111328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.561888094073021403825191141615859310610890961335380313889867468127990117669122144325534689919638371352068828608165422459830532339930942775394314467433572629770088270093747632848278950164215642304579174702113057175790218338930321389580399740747030018773372393902150387371061724581291869747414606703942596614155744572856033881995086194947414446196491813497901890722222967313053450371211346000746607672066909376878873075240141641166794645913876613546102591971465822545805507543142227788545129409419
75451e-01), SC_(2.92750680211414746770844834430161658350022817838677528204616418770016411973049638712003593524209894044712330474774636787107110946674545326257267713468777492693895483352299710997078212274344324361670663764821113729265765705273387211601224326658092724978157805173109712835197097971977685009294324466709071461279772808181639695341825295953726444706286165065694230687880410120205268008012484510459176080990941425970128533715782135699234119402304189387675442401836055216754433030476408800736483624398815316e-01) },
+ { SC_(1.30864286422729492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.658341244489687583723731064400445482262314665374359732765395354421527887547576690233652228451682570279516096394624317422647810363386664976651995970240740543752280325591500944525718666048534098637866163730430005236096619671365611913796937468363669927998586535294424575810648280329904004561344629030275118896087358062023966058025087406217223993304441962549922079132434569666830228847517371966889756069951926366749908452832259511841643775901195124247965793862026194586089394512902449312183942552825
24872e-01), SC_(2.59161038834725172326566408046635655484407996683812930425596593331321052560858900104499556422763595724745722744888885012081379301273496392545730800427206859277815623633316107868525096561220315385068440356778513672994616088760741224012707881466960081026623434606955678671397521489157762162852500111882453963438629697190599563321621932651961872959107980463673537799267563006925080070818207097906067384521865616370172042193402833078119193467872189984306913742687629125585377205706386812697845482831875212e-01) },
+ { SC_(1.31513595581054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.674965091578282019125036306429928159862083800872194534897868875111796519684816357512574832968457392950853267661670341192597581012562821048483575852661837375687006279017792638611767880501840457319237248128086118488302956587681044349773474039434620758685781619536444473278775420252939611581755585340047210390581117281074556511025849790067187018060150096357163577617455430715623436874936851808739273415118073857632414036147618724594146723687090601793858630951279297191940611279883566358668348847820
68660e-01), SC_(2.52884370350198689836509793238736044053809213320990655336570043176388019869051847476197344301598145790010542007186953761020434865510582748749159053480789974879901690784775151251388330020872601298672488507661166060231571603598086759786500882133991853156299415642748708141774922447253154306852506112676846419230056649032959277813296664662686618019664034010059955597878723714332427869130132431251976307122761466400368086425708093504776300178852667386689097710596288656596635943810817886346084363546615387e-01) },
+ { SC_(1.31764602661132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.681282183325600228491510628623002900028163820021474065611226349540712523850924995932219394598698658730663371896402149791391613239809033905812098941040493201320061442281219832788551339340811237513984233344175863158675587722658795391655553457830903290198480752762398464260436551371592533746073132043752736793981199554198572490623428369945454087477333853483467369289231980762789066951117546301624102759694122677396396301888450662884585907457548439701821234214216886086573477729430927249234573735374
13777e-01), SC_(2.50455091519863080006567737617454851596080837568745079926261175080989570659578673726466242881105045890267567542084835065570433112497594501436101662253622732503676986129627532303613101872288751267994782026817808674381109734346995384829715512131218462764261510046662595323365526025933703952987521614147369983649867368067869287418530494000899105489059330421493859551233237215950932397638169156132750140846519250994070230478406360849077447064427738507497094901597123294713837766393265188840396610325242108e-01) },
+ { SC_(1.33635473251342773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.726442105572936540735420600864066259863063981240884067117694916201007904207605403760603634031617173872262723326368496416199304649253398039445319292666035074657065420651081131368670460443625963041734544842630298071163559537081475951438042028673313655455022127058656459077732864931843573615499503168635589137150918909540797469528572046503135153550509367691648871557621238776362839083020731999344129725306057737470224458484226083129185114109631719513212360039151128726948630026747067488080902423946
74013e-01), SC_(2.32299891668892105578430805968784557325686629203513649173751412362396164213323697012298385908705298284670606095798077758105179389153786963623253782758621229155164273749408854178705238465846547675503227965043919867632856632606716985862406879880250070563911690782986211180882566400301852287461686831670836491595633263904306560640539575748724784015673555715408431433094224299347067526371844509941381534872980427669628158743417929463652365941992113826691670812353814751524843826719411056502918081890211682e-01) },
+ { SC_(1.35868787765502929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.775892140076146159353591805627718612031660617189653391522658476126944005577788824248253547265595266791313781904633666141572300829086245323536868255529611348478977310923925782202128780393515364594545438806302342246386750414330171597086143283914859937360845639165127543865633845701205664527529598765123513161365952241755058920992311540746145621047310517321561661474223415862134715429611446194987409798067524185256754949025974195957593476058432331730041906429742597058914905245458357110580603226989
24180e-01), SC_(2.10521563399035850846293344058639880547734577421953544992592199451531878600608929560334781406775399358068856520818402473362854370439100435712010515124940674627273883774342975022165663149085933054914512215716969149912131601383737072603210633382998215613080762106302730395977878722923513835555432768182548632737981806045024087070109825978918059855411453037534752326280434726068704208466819871376329820900372129902093122395293491407971401671172806094740549791747150107306999208279058576893941933708045083e-01) },
+ { SC_(1.36104679107666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.780830958056019874545730748039434706217578045246967841030981404490056396382843613580830629340107378318307830633125468360422963356092899257322300602333334514079176865290158771870304167934934276548080307109981480929267319191769887872893262345401980184312885699723688275910929551474199495368659522447504833577981974669996679938297469418331817642034657323301562889725926140040408355007935933640748296070373024157160453631058265268736736160035127476210727431094544936464204809306680810895267558229137
48283e-01), SC_(2.08214931499471487580527212737500656418746457639132995511351210615068938343848506033358245359661394041703442281266292810884445455040891225931387155913258751438141035226449517065251786763225847298217846143225641509156212605618483988613037250889126356687450506812452058374859588919863830693505452777076935690791833854447391737572849335367943607136147722227750905412690739098366592762468180904934634565064553997996536850602898143403118093286692072145247502224184666689326027284268178665916305253016113414e-01) },
+ { SC_(1.37006378173828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.799207806553235743250480322905534429238029143020424499595170322179480519401505810208685366053144353864592038987086047224276312025437130903266448070228749117208845094050450118801948203777400657076117946024265141587817586930269004213980377123892682802352180674483111530139796486788387068741697952206436779901908709336421802254075994633431260983764395811642427260500653494538340120037638776175867774744037261870725215953100169095395694246403109052880099341142050823835263154857781847085370095261951
76275e-01), SC_(1.99387220352411812643706162721391972243201742242193475787958496815486029474907430687983391246649586894127152003306028679128609931296024818616213480432671358196302228903498401651517092937484268824835198862075776807808683194099912324765269446453036769957409467627861694009583964690786001732389779565429776808515515017736450229078368649763370096373452237377053728657912280976882682351106748213592796547048629363878065867407923229520949463360810455413121016679444030724292708102255182692318351645333863659e-01) },
+ { SC_(1.37360334396362304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.806203841923410852808189403906885929969307136052093258657952803531675973186176747892865032066246386470244278104929497621860064686394329315489249219903752877186131801152660586634200541211305100110935004325902339076447523045932954953262631643177131337896877409999961863085420151773153805332249320525817393195100538055879221787545681248015548136286989438530092817759534234764214341902419678084496889598984435628544577005329169109425322086701408233648566475857168508990321741208577534363435604378619
52422e-01), SC_(1.95917488005704498796109337839462311020563464533356224712944059814078278920561867832819886450214797187489939587085888526835962063802556392807082653670784036934320396748454552006182311130900790213674388500137041259099662844726092679222947491447396027724230508542332716957208884897294938245847990852513593101461664259719909071166581138742150607442617905593170491086391650790888740658301124572273285141285519435831995534059396058973595699379902139733254076628925801545908839520914611947748889644366689804e-01) },
+ { SC_(1.37579011917114257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.810464667009299502466687187273363196034226075234862577377521774683905057920225048030787334996223362375695141869457307646578192296201579495051908097054025562129762871799334615854726513030396844881502985247237372836203378898979203455690544494576713064921763333624444699782148521087459682157590451616438065709832344626862980944636453176314495496822359159733432980003680895743585660626239719872542203974007208553777796533586091321285264016809809969391063546874688320442018239377577037112909581406703
26488e-01), SC_(1.93772624933505873954526307542792857908119793419071306140786180506660673347469214081509951677829702334822528190190251019855050074377834646317392219744580866160361489259089532138847887047287371437920827424743971700527942058451956937430528654494731672514873731486172998987543330286127627257355443896756851760672491599793182135160951137115300143519605652789579329580837860650478529356618782397844974277048622432233205547812026760264071970210071830565819625688558008931106124303619620049393235119593562032e-01) },
+ { SC_(1.38131189346313476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.821014739514331136160300580289458828277005297776593996262997918883154721228938482031229951869932499181386561911983487341225980507223714710385057951846822490835617627358667577217140727347828107626575639325280735711557529617371063464059347505011128394069419593258249044670732343026521898133810351758947828230193394026434401696501657610263393758216683337664839027895169715966133191424756018409579034450300842837305152971388039983346960430292783691658018868986443395201461699403277059521089340991849
65051e-01), SC_(1.88352581247039312796004784885792696475588661060726147078352536060782866764818512994083123827030945328076367388613370055013885867405072819276681817228272086206013317353664827033343035360983767879057064569076498155542057096622655089221516370992457224624603085336876933342215313240050182855613227752921675497848476243136725589964476896553566468837178670329761618580278911807843375144698871715377420530960628384366594660855642419370115116659211832265632273031077713314597591180856207916233946464612619948e-01) },
+ { SC_(1.39389514923095703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.843937489846975994942559132285193565004437972381498516394947323036980593903164738546703052059910236871974058403639812984532692518941816371484341035345420730817827349246444397180213216890204178890281312383208094912474768949024589413943255399564114595259125078573696600762792920661057004466650563538744790507227668773881771760298742659852100468423490308120874255597269489284096418947594023872634918896994217865244116656290182482505908279814221675514108172776344432003843992890987273420577549445594
71253e-01), SC_(1.75979961813418330463246015346785922996793666199283524740663794915720273003795539409709892289424553224094002289191965889297876634196707865043091465457965056322032412992884309526153698834410862154379415726686609410706343428724975862198717229665810504104156779671263630038970686942846971450207400214891909970201246410306632949413399102387736446279872852586166870223903033833049605211179096732670493723266210161088674326547975842093333122402384746965183213793318184772815360336300118983377180563926983678e-01) },
+ { SC_(1.40098953247070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.856174355042758790528383514734223841401948680850374838636719892010672256194255711157674822712157704968592925370441507401079741520291498390114722382698748870360329396996250009718502068977021879732754927693905353458074125153532365300107685406825513904838866030194879607104759713983471490619358326496562223497110379527734504819448492816656388721633323035765832180211597265250489564359300171862291813058613787348687208121133089502388528442137798106978710545245480575154330746205605389269750135616646
15709e-01), SC_(1.68991925339569339604661496424208240093498383477146418615565299727998626345325844611994811159257205982575484035326636993024412027870667349093871119983265587745698136494573535119564056284191038785903655082458002571428229328620639699045804331852797555083547720368648689121007274958950735582630052300967992220928569101056869705451681433318191980600098912075548588729718304540582582836247993674752298538944618403645465934491911133294241205561058621342699438071895927728838513098621388908181305166539103073e-01) },
+ { SC_(1.40101575851440429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.856218671549379901613557414565013794276865292704851572248626492549660223621104434959734382005255364632426642774478903489356918932735360999064566382071628251265768433666526179553033744165038414995870788289704362370451633747274309337576067232942881105118773257108200142686399755294004673503288647391512459940941570584788996644109233702708167186889059715140877971418588435958032870669855389141487956774520851902689521236486577064917501881624848146916739986748004248995158509460080806038521455594748
97554e-01), SC_(1.68966076435519353962481075898958477545026123896902065690890676310569504798562202400982815531169410784648901144018478477101528696727403731035179515876213449880962005156426103688847976760828487626389281701587312839145657572681155558686983505422848380769701057226774703457564482651992554580738823901756265324815389555165826073908210955723185833731466146611384227971387719800158982983339977621693099935688345979958646148525722384424484338569211001385904777013357253104499183168338276670653879474853213746e-01) },
+ { SC_(1.41011095046997070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.871178585868207756249656962365649437273615123418661831566504827888963804179148977932791244735153223464836001670820278947618501854307362588768616512476014757784393029620289493507653971637342193924241376505556267087803297127240247378952129692304656459427012719331756726790859793736259027422288173429064064148157509582806978474462193226896494676277724171027712552928329062779969686848522036715206079934349887301782768135728279817954259693411979778627767425158687463002216785807396923703601377163798
80437e-01), SC_(1.59994791349497692096310940926922433291994198883744468744005470409078245893996153539802601598737060687483733389757045235896095957400266180075500992364021539221917108997307230046574125251952304461637030186471062562619523234193692618585774925525419040975961516212188872188853608468781398148788251249659314242448691451141375364682157224189761502490697285106725955016342688708103583146450318454637473677756848148946111691551396903396081866701675441083001752543398185132497315372365608059051895513314949579e-01) },
+ { SC_(1.42533302307128906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.894388557951838869987865812005133290763688406396343763615957869372110162053693938805257184358648063013353012824011837011064792516754692554035085780692171938483649436845081118459549355707765099985331349362831245295398283045018810460707865287001136752735034846804536334036683306431912070484857399654107362463474830192062754078361556711324359085850936333095184915651790926024950426379616965210269149918321962432091060719856653978453199411483556657552099583227756908914574203426511852398441502455963
27947e-01), SC_(1.44950855957173654196257134824365513134133201450079523719697853158105525996193537681649106974620513605006455769791009116959886538550266029282692875824056064287247623191024923923550064333536271085049062725464192365631526069063550184078248236006479591026443959058514786355465785459602357875413912538891346259989738066918341767850367928358981037418135328507988540823626368932440669322691107028465730644797892733370773348508342557416764628129238249741504704236947393363136868043895800163017362575013961290e-01) },
+ { SC_(1.43252611160278320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.904558942122786466822869523616983607504849257620776639559154154252000922041736792616600608571653663162015013323209714118703723673830310679111799251139448160944964413128717969213614076977381226339419159918250886530872650300788915728121827052231388592842670879967540619676906772462190051389264234791205224175157042053045155866653185776488653371898462590002291026960997558250933281930526963270923036227582973193443895701299557735327092251832322224240411533689661114785478088969218573251779825487187
71158e-01), SC_(1.37830046144356675250872410437156137418445970379445568874986063770412578264945685021936472202077012022182697513678356960442192390943674941380077529122281760664567764993131196070130465793335691254056246930897428264833632852315773233778709341455031931560142964240737564638602823711734409767185825071947764997918950296406844128918029320519728667997040516955426962206122258344354400413540432792749979019261016751931226200374985412506207323213643522455191228802651442335019461635933485240885233775534028203e-01) },
+ { SC_(1.43575048446655273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.908951602301219977022884468555814059017600812303848895856455621044217521770219230475310845684503268932277031846554771283004856967025460840836361171188191353711418937570164031296919430322476878883812424239269557965096563597210223877157071661509779845593073650899461563610690682082845764341646459416081038900188603668737032743124138647164726689318812809388211031221614894411824391318797139357046114835566872258695963412386750459568722669152801130639217531913327474007241565430769121167543748747500
54973e-01), SC_(1.34635736090091818094528204085818356101807997017845390670155478403606606771620855953189545331098032529074637876125914631803457218671363025531396769111554517612885738927295369006431968049166339715409645435369564404672125253442906034702151099344922917418994177825002810347017671706373141382337224796583178154615455960082217078332717493653904158690181583515356788176235405991881547549149452753027065371587653125663516719462714534171084475796198006533859917606833628107186105787809101967470779035305450920e-01) },
+ { SC_(1.43626022338867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.909636605681340944009719014989889053195542663610753152819492781158939479532569790433831476066329550457536276727821288468521910339788919702211497468675788864826787473878006429964936405222197361502148764893887521115815254841456614619895837388013016827588722245724251279956995992034505702583615031794712939168210742950534946933780344020256736541962312749879069912445831929138283044079947565260243953894251569620386996752883029313573166317459529404207224329358541980848101198896118128382028543270470
87633e-01), SC_(1.34130620789601643297435177545524001954141391748474759563452684046937170171124919131936400073282912787645653259241880684313416126416211409025645824655684246053734081280628162746192535860988794701161895027084056830536993050641113632462258021194830151178607327486814897660784369677235245490434876385754524750500204601522349690543772219788636263128283700192373357633279535557585911804179534914355347076739942876595712160644569672695775037899587969833017668537631078189945084691339552998027255384326844140e-01) },
+ { SC_(1.43893671035766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.913191095753538270095242914954390929926098118532298211591661591511039011485327560992923753936589808566871462603624062209954701416610613171031676702200984785682487947440031363347412723526949991454469140080319203896059912161951361021626405633021028136272318588601371143753891331333974155277845152310421893229306000819540670689797041625500638987545309205012468699929711656296676994381106455454981704159626582395635152348903455218912469872564662093642848084698850352810158987049587841939746910041500
21440e-01), SC_(1.31477842204409608143481604778289471096989432741883764052857915784986484318032634024067139351793577350976858922540277282623045875976061356613691647950469635616570216317069615463470059393814873032370292336786402935014974684094100738552918070641543653862350399204902298268031885011842932620245754790505398283832018177439959836755940979102516771954166434909998171784510426184975048758424286402781599100148540714546447711769856438806916702480649813828940835784901933444901276957152379932153447509228696137e-01) },
+ { SC_(1.43923854827880859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.913587494156947183753384463185209382459333991702165155501622771174773917203372965300424865386154946593926088531977622941517180337796232600697109763128966287175869017744816900968413764596496229021165313798075438173491384344255836286399370864229806024152566167042694885064185303085173475640856821239115192161198233635160757426206089738530918561056634927453690735480164048177816489834700561486203425428975087685830782185686024159757587205311507875392582036319760551220507620212588478032258155864139
83594e-01), SC_(1.31178618520511210932639613646562667970910211143447525041763259377225077944033963198139901656474403253313311900854623885170093549689579895346253603161951404971637347127491269985682548787839965097189544180076866803717837988248791973444620625374673968739089275753356956276391050058192244847228373681483681343061322393838820468731882412707831450554284369063204798723878265096994905601911657910504170961317716023507473626505888920988030515505601969581368230219763312001217408116589019985350643427759453027e-01) },
+ { SC_(1.43961572647094726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.914081566116757072966646560582230801524851287755746491730212369873201602611459621787625737638672043487733398122106085611006611464970810241848485940289601452357066998807159105629538612002538106957975102580018112131682468913974794447947676830271815093974569426568407688653075671231734915156321868861524154479930815601339637321699550827916336603089026371299697281632443252984954347645363513607774494228592147492232579060731848660306613117323766035549067873435245375079726066051175681023799768989973
87556e-01), SC_(1.30804690297554290504989423846664214343871971288892730248455107330480322598111478527291294656586536354347060079501463191824637278899579789830724823242348033342333742371700916702509134210059650531852817443296827350488198919145626370767974551816464494406170646945206485942489762762056106891367852891043967425985347102892606683294114815073381752131566806564187749932742216915803605939012920924230774615714791230728265624437944193225253025470901610417643068522722728430878240416873384568643829313305535027e-01) },
+ { SC_(1.44733238220214843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.923880039241773131400900279719159185842576282790202194748343384359247444615566648269372188958463153443519594356202329744614134126606253277186055574500204357403532076851958921834915833782405899922654934901750201405612825356560231769317187797056425703038003627700356460092470807964296782515373527345871213745337783692378379730217042393508326474446696420556052964975843224826670847366226740017314711823847385488491450265405953402076843783190434484483759769835620946947637591415232334412979638678071
73230e-01), SC_(1.23150516309867875989569500091859949538209314932271743672937839136536501764869171434751888595099441665884508703820137465595390996452770295560950163144838266096299820229745872851223264952301951583171652940286501789832523596307854150203819900567360148429999324024127583351335571985879527474760460123624195719269010080647337703374150788251690634185963743503086320018503677388753932389411896123706087229183305362380691808334014583261378865654194061555906317934047697173152604178316357472971054644931431007e-01) },
+ { SC_(1.44744920730590820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.924023842238827899322611674253434502469563454595862863703361673525668521716211164585936477058021735281215076462285874462173862617708544944864720791304618400337515690771912351168796494908971287828469263551378844523122888802110334226121524600729114825302881285693930849395279977462974983008624286180776793143385680037243827471313984018699708186750308325829056789607884192334150378316783979970284914767234220573867316739217948120026540455016681798747460430635906116494249328817497478501999996494589
80332e-01), SC_(1.23034579638217625029872282272402437662093252013182327996821295956822978452419259217048913138605637521619464291253863182650817791682056273134695984571528196607840573470807701589977902167891230627949542905867599039057826790021360258199521140849548290900785404111420099350972186162756949436658730757354190824081339428667944721803530652607059601295242664233649552435918280060710052841718723858516493198074231988111624685499136821860174842545366428551676343529394855788994773464430657466696951765655081137e-01) },
+ { SC_(1.45154237747192382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.928976709244105314553084030671956700281664382995455592175470243160395824747030485155729953857372636587755251401798962724926827279047552378379502423030328933203993923405246797631560547557984992005037082588337803009037836454333136202554647519163790906340795876978836760317860339379724126177532018808655922525169011650299483426105259882122516557665368773871337751318432646598940185699110035480540196878187158673633010617415897972318397064035200550950559896446984439135206998767647913715836548978162
60752e-01), SC_(1.18971488487288304308425699210614719866878259676804804262846896571022601257545817282175995659728561527339387857587830788109332577117011986425932901344366978967352649545020809657624889841948708848929261420409010627364470837074847218316673600693253526576654165766705835056357817622597952581949808041989979706804283927703846598812892491431255024889245682296352331155850394323676087358406346137369111543419082047067595620398532071247556766820276593583587556123889897153525352863626314107635487884572998426e-01) },
+ { SC_(1.45330142974853515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.931054117403435059799416920652129547348175559140746502815881140382336780752763940112815318259273235657216768090680491802427690517621925748072686587464641705970148603953740147021725192737335481766328860825956938913514257203431317879884964685797954323171712384831801394222342103727492132065882835342338319083945826542317505756867838757455118090425931299882788419999955240507694415256377388925767788380332778716926595504675165956343438026433796832286317438129376113305193296168274685763418255281320
52336e-01), SC_(1.17224746414922113394680459621138654141515011468565470547501509905431672693738276955358228769564509462137569555299014927161641678112156176912374444048091919642849459540872135016797222796525448414106745029017241368167842038210883973473987358596838846975718240227122399101468532167473154373896203436806908913091121947162452896071564092737961908660984482393247148789843287711178022307994232547371668339453767902590820307947458700379454535785143261333718503831510741892113212862974188905351819040231571308e-01) },
+ { SC_(1.45588922500610351562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.934054397897571412752026013643557795026798487346519781821551300721682764826388263074127916688600257330709990617550333219018867737992273719172225952894207470854277848714385323447977311992234283390131617916775700852654375602960832773408459044659566384183453929998649878610289292901487140503306852706709484550266090087332978373906432732322489157595541467949011323647940273344535056351616348516554418412866772855565549297612241100179928192512840105417479375259423787387736676566795236841397336605612
50454e-01), SC_(1.14654403300175083648655241424713554876591410670899082802706257994408600890374804156744972009245333224858858840058865138728143319116190374735741716940083629338564479621306357085959924901450353848857626798452776676039763227965830495379918013430493486371677347432381790712020223595336542260879737099747022574632060518401383064409905884124848180841992448644395615313940886011062062975865185967646280984788987330078321682531189251440331206378939892631509660362968636990584420084242504975617656278628117103e-01) },
+ { SC_(1.47166442871093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.950904559294046660061548231681440871891400532555223393168065205984908411098673836339775305350186594238760970718581611302037066490020275259404044788956983673903542604624334316754888189409981523292480388041930938070099067738615890819693604777626243537759069966390622652521759679615508730095817339113354208672977600206975408220452663667705300369733896802123754670505855599420923438143795742394137744258902358545314256761184837497020113519713601907218334336415721642655153871553471077112952713527127
43920e-01), SC_(9.89696141156948746533779105739509719701859485070413706167484933115112066336174440361597142496460529005477561627345324008350535949128391226579786599207708363053074301827988346459788334279429737675780235245888898300686596905930790877873637403683928778470682731019204053504784430768910655143803501705308467894729067255148499639765331390047487792750517217890381326189053380138858456505067986074977471820348175139209916889960977991394445595370464003745273811411030937898173471905892363724061478289793119348e-02) },
+ { SC_(1.48118925094604492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.959879715814698498352121927613874338809480327997434031134058417623017372726606632727711260853115090929470804599482515580134352792175833934638116607664026448002349444892516997407863718797368555830384226816031284461436220348781596135202195380752000248984730391951447406787338996012106893075006322181541844300506279476479859521050338683097951510964352142110847706894990685274809586473351175983934010549031206400894302178604608044999942979272493868457267668988147991954493197205786595384202569973082
11025e-01), SC_(8.94872083877310745992995729453189430370374216494843644464203198739023378590658969785214597002302119076433271051158949450602535037208901054605904460051131565768944344714994340047575313236362345896146244898245040780545731961335279415963661509788420847604974741441811091560365159585870007428861114817117469981394171402847618853548699252957873293345224676542413493010857730777156556972874471318434497632251719969283577188808589709859828953081848004422162716626512357272747440738023351312980295536798316922e-02) },
+ { SC_(1.48278236389160156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.961292708384301193000511681011280183817116639750846894640937915627647522537311219728747154878823827511797701524930271186834677270369647085206345421035014856697571462264384880818780809266495546061878463781956000147745843609693909871246033226958956278032221541257770800642278420419017157738943306916373787591319860410129892521858489148400731823059215680814475898773120318779449805323843626104326981588844175342612754442753970155963808683164257335853427424408837140858962224453216244076508119825862
96636e-01), SC_(8.79003741681315821251280686027308782114586877469765715995387548225892541129646634622181193716483073221684877664769071763743258458728042536681305436365814040903460426066931360249824421763839424383563759428429066149167258244393099606620797760427563923085307430292326673397490669016001630596625436022406452453276617767081117940821836317631747493227941287539612890181193545073004560915169680617098938412078376539261936819313380292445951887013297284686257609312633392205252300434267806647195017089621710655e-02) },
+ { SC_(1.48932170867919921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.966827789181358815362759908426057333395230388131672521503216144215955258389282110214908859827587659909513135202687441781583460300348311225976697414146601231316494995951704940009188040899336023185050740233370147672104196746061965222308703514503467226854626693861868991712008200439247737243720123772257495224755479617487429693449872245987253483592459895492144451442332393438495917421006545762049164316127297280234905408290847988205880623433156742623138640977251794288289826665403433687327801050394
54552e-01), SC_(8.13845084031492640613386104575625537797314524719600723400961398682265346258342553800702435865044529994514493269349360241716452021150170976184564475930349320327294213744778471680231255567737036617811154621323506663548592662785646800499829866106486293702489790533055529549635178889628268927391706714202367178496631902276183977618547547514283224465880040875138298723442763757980830113435205370560834162520016704500157651115626101042762031082967251945734212875798186029500136459910061696644610683824984172e-02) },
+ { SC_(1.49110269546508789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.968261428799745238638310459638841096004094326424631620641456626889650360530423115063877036518174421210092052931726164378185552581122517300736323346129689383577363659373189539717977789382451081231888974282611952016537630297172789940092846106099186837983871787769700087413666018359263350836418092060507964113214874061840566872205499945285544652939667409948584303396015202793412787758263106409529512254757135310371103356183282392255331370830815858436119824668610285451041337211323012071136690942081
58152e-01), SC_(7.96093014102787857311853897169714896003178997833084509746261920212282904923245728708338229611953838785802609515963050682205601178649541846223606669995712553087046533525243208438038611435636700879519384389078441175165514979582616566905525683674375742838422423588917802839236707296641241280017877960271241566981191179744385341858916524101345194801390243168621344421220012275921118083354308199733352187061121123492182523906644632947523518443805234926530481306985017526225224799204564632165926385889633624e-02) },
+ { SC_(1.49469184875488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.971054516916378369805669778861914954703106254789843025144687340819783170047123651795723881600948737665458922596841266121717303713344317134029038575312438438550317191419608054642860667059072972215910742596252717881786016266733267547198161547659184228561707610258952215370604950819646341438813657275286375731995545441013931481991855379882519240733210463983972705928995013882800726947534801501966483620621952857903902733997479952457783997139796708547966242147849527673837959020136058926669972639553
30095e-01), SC_(7.60310344978606994311454252807960986535803469428379193529425796476644344334413001865738243975566508261589698713562091901145249736705485695273728137391377751615494502695150924195446763383201607951069471691560757133118887684442353070862022248337360915742210326532477359739395822627983312298986859616214217003217070111399151039551118513567199164797534425187953687276545896053419230138261452230491054544837629498576689887971671483487696900902095055042924520918068327882892863731988941436799798706418513466e-02) }
+ }};
+//#undef SC_
+

Modified: trunk/libs/multiprecision/test/test_acos.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_acos.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_acos.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -90,7 +94,11 @@
       }
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 20);
+#ifdef TEST_CPP_BIN_FLOAT
+ BOOST_TEST(max_err < 120);
+#else
+ BOOST_TEST(max_err < 60);
+#endif
    BOOST_TEST(asin(T(0)) == 0);
 }
 
@@ -130,6 +138,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Added: trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,28 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+#include "libs/multiprecision/test/test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<(D / 2 > std::numeric_limits<long double>::digits10 ? D / 2 : D)> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::cpp_bin_float_50>();
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<21> > >();
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<1000, boost::multiprecision::digit_base_10, std::allocator<void> > > >();
+ //test<boost::multiprecision::cpp_bin_float_quad>();
+ return boost::report_errors();
+}
+

Added: trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+#include "libs/multiprecision/test/test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<(D / 2 > std::numeric_limits<long double>::digits10 ? D / 2 : D)> > type;
+};
+
+int main()
+{
+ //test<boost::multiprecision::cpp_bin_float_50>();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<1000, boost::multiprecision::digit_base_10, std::allocator<void> > > >();
+ //test<boost::multiprecision::cpp_bin_float_quad>();
+ return boost::report_errors();
+}
+

Added: trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+#include "libs/multiprecision/test/test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<(D / 2 > std::numeric_limits<long double>::digits10 ? D / 2 : D)> > type;
+};
+
+int main()
+{
+ //test<boost::multiprecision::cpp_bin_float_50>();
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<1000, boost::multiprecision::digit_base_10, std::allocator<void> > > >();
+ test<boost::multiprecision::cpp_bin_float_quad>();
+ return boost::report_errors();
+}
+

Modified: trunk/libs/multiprecision/test/test_asin.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_asin.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_asin.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -129,6 +133,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_atan.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_atan.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_atan.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 #ifdef BOOST_MSVC
 #pragma warning(disable:4127)
@@ -283,6 +287,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_cos.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_cos.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_cos.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -296,6 +300,19 @@
 #else
    BOOST_TEST(fabs(cos(half_pi)) < std::numeric_limits<T>::epsilon());
 #endif
+
+#include "sincos.ipp"
+ max_err = 0;
+ for(unsigned k = 0; k < sincos.size(); k++)
+ {
+ T val = cos(sincos[k][0]);
+ T e = relative_error(val, sincos[k][2]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 20);
 }
 
 
@@ -334,6 +351,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_cosh.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_cosh.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_cosh.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -121,12 +125,18 @@
       T e = relative_error(val, T(data[k]));
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
+ std::cout << x * x << std::endl;
          max_err = err;
+ }
       val = boost::multiprecision::cosh(-x * x);
       e = relative_error(val, T(data[k]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
+ std::cout << x * x << std::endl;
          max_err = err;
+ }
    }
    std::cout << "Max error was: " << max_err << std::endl;
    BOOST_TEST(max_err < 2000);
@@ -168,6 +178,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Added: trunk/libs/multiprecision/test/test_cpp_bin_float.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/test_cpp_bin_float.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,219 @@
+// Copyright John Maddock 2013.
+
+// 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)
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include "libs/multiprecision/test/test.hpp"
+#include <iostream>
+#include <iomanip>
+
+template <class T>
+T generate_random()
+{
+ typedef int e_type;
+ static boost::random::mt19937 gen;
+ T val = gen();
+ T prev_val = -1;
+ while(val != prev_val)
+ {
+ val *= (gen.max)();
+ prev_val = val;
+ val += gen();
+ }
+ e_type e;
+ val = frexp(val, &e);
+
+ static boost::random::uniform_int_distribution<e_type> ui(-20, 20);
+ return ldexp(val, ui(gen));
+}
+
+
+using namespace boost::multiprecision;
+#ifdef TEST_MPFR
+typedef number<mpfr_float_backend<35> > good_type;
+#else
+typedef double good_type;
+#endif
+typedef number<cpp_bin_float<std::numeric_limits<good_type>::digits, digit_base_2>, et_off> test_type;
+
+void test_special_cases()
+{
+ test_type max_val = (std::numeric_limits<test_type>::max)();
+ test_type min_val = (std::numeric_limits<test_type>::min)();
+ test_type eps = std::numeric_limits<test_type>::epsilon();
+ test_type inf_val = (std::numeric_limits<test_type>::infinity)();
+ test_type nan_val = (std::numeric_limits<test_type>::quiet_NaN)();
+
+ BOOST_CHECK((boost::math::isnormal)(max_val));
+ BOOST_CHECK((boost::math::isnormal)(-max_val));
+ BOOST_CHECK((boost::math::isnormal)(min_val));
+ BOOST_CHECK((boost::math::isnormal)(-min_val));
+ BOOST_CHECK((boost::math::isinf)(inf_val));
+ BOOST_CHECK((boost::math::isinf)(-inf_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val));
+ BOOST_CHECK((boost::math::isnan)(-nan_val));
+
+ if(std::numeric_limits<test_type>::has_denorm)
+ min_val = std::numeric_limits<test_type>::denorm_min();
+
+ BOOST_CHECK(test_type(1) + eps != test_type(1));
+ BOOST_CHECK(test_type(1) + eps / 2 == test_type(1));
+
+ // Overflow:
+ BOOST_CHECK_EQUAL(max_val + max_val * eps, inf_val);
+ BOOST_CHECK_EQUAL(-max_val - max_val * eps, -inf_val);
+ BOOST_CHECK_EQUAL(max_val * 2, inf_val);
+ BOOST_CHECK_EQUAL(max_val * -2, -inf_val);
+ BOOST_CHECK_EQUAL(max_val / 0.5, inf_val);
+ BOOST_CHECK_EQUAL(max_val / -0.5, -inf_val);
+ // Underflow:
+ BOOST_CHECK_EQUAL(min_val * 2 - 1.5 * min_val, 0);
+ BOOST_CHECK_EQUAL(-min_val * 2 + 1.5 * min_val, 0);
+ BOOST_CHECK_EQUAL(min_val / 2, 0);
+ BOOST_CHECK_EQUAL(min_val * 0.5, 0);
+ BOOST_CHECK_EQUAL(min_val - min_val, 0);
+ BOOST_CHECK_EQUAL(max_val - max_val, 0);
+ BOOST_CHECK_EQUAL(-min_val + min_val, 0);
+ BOOST_CHECK_EQUAL(-max_val + max_val, 0);
+ // Things involving zero:
+ BOOST_CHECK_EQUAL(max_val + 0, max_val);
+ BOOST_CHECK_EQUAL(max_val - 0, max_val);
+ BOOST_CHECK_EQUAL(0 + max_val, max_val);
+ BOOST_CHECK_EQUAL(0 - max_val, -max_val);
+ BOOST_CHECK_EQUAL(max_val * 0, 0);
+ BOOST_CHECK_EQUAL(0 * max_val, 0);
+ BOOST_CHECK_EQUAL(max_val / 0, inf_val);
+ BOOST_CHECK_EQUAL(0 / max_val, 0);
+ BOOST_CHECK_EQUAL(-max_val / 0, -inf_val);
+ BOOST_CHECK_EQUAL(0 / -max_val, 0);
+ // Things involving infinity:
+ BOOST_CHECK_EQUAL(inf_val + 2, inf_val);
+ BOOST_CHECK_EQUAL(inf_val + inf_val, inf_val);
+ BOOST_CHECK_EQUAL(-inf_val - 2, -inf_val);
+ BOOST_CHECK_EQUAL(inf_val - 2, inf_val);
+ BOOST_CHECK_EQUAL(-inf_val + 2, -inf_val);
+ BOOST_CHECK((boost::math::isnan)(inf_val - inf_val));
+ BOOST_CHECK_EQUAL(inf_val * 2, inf_val);
+ BOOST_CHECK_EQUAL(-inf_val * 2, -inf_val);
+ BOOST_CHECK((boost::math::isnan)(inf_val * 0));
+ BOOST_CHECK((boost::math::isnan)(-inf_val * 0));
+ BOOST_CHECK_EQUAL(inf_val / 2, inf_val);
+ BOOST_CHECK_EQUAL(-inf_val / 2, -inf_val);
+ BOOST_CHECK_EQUAL(inf_val / 0, inf_val);
+ BOOST_CHECK_EQUAL(-inf_val / 0, -inf_val);
+ BOOST_CHECK((boost::math::isnan)(inf_val / inf_val));
+ BOOST_CHECK((boost::math::isnan)(-inf_val / inf_val));
+ // Things involving nan:
+ BOOST_CHECK((boost::math::isnan)(nan_val + 2));
+ BOOST_CHECK((boost::math::isnan)(nan_val - 2));
+ BOOST_CHECK((boost::math::isnan)(nan_val + 0));
+ BOOST_CHECK((boost::math::isnan)(nan_val - 0));
+ BOOST_CHECK((boost::math::isnan)(nan_val + inf_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val - inf_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val + nan_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val - nan_val));
+ BOOST_CHECK((boost::math::isnan)(2 + nan_val));
+ BOOST_CHECK((boost::math::isnan)(2 - nan_val));
+ BOOST_CHECK((boost::math::isnan)(0 - nan_val));
+ BOOST_CHECK((boost::math::isnan)(0 - nan_val));
+ BOOST_CHECK((boost::math::isnan)(inf_val + nan_val));
+ BOOST_CHECK((boost::math::isnan)(inf_val - nan_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val * 2));
+ BOOST_CHECK((boost::math::isnan)(nan_val / 2));
+ BOOST_CHECK((boost::math::isnan)(nan_val * 0));
+ BOOST_CHECK((boost::math::isnan)(nan_val / 0));
+ BOOST_CHECK((boost::math::isnan)(nan_val * inf_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val / inf_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val * nan_val));
+ BOOST_CHECK((boost::math::isnan)(nan_val / nan_val));
+ BOOST_CHECK((boost::math::isnan)(2 * nan_val));
+ BOOST_CHECK((boost::math::isnan)(2 / nan_val));
+ BOOST_CHECK((boost::math::isnan)(0 / nan_val));
+ BOOST_CHECK((boost::math::isnan)(0 / nan_val));
+ BOOST_CHECK((boost::math::isnan)(inf_val * nan_val));
+ BOOST_CHECK((boost::math::isnan)(inf_val / nan_val));
+}
+
+int main()
+{
+ test_special_cases();
+ unsigned error_count = 0;
+ for(unsigned i = 0; i < 100000; ++i)
+ {
+ good_type a = generate_random<good_type>();
+ good_type b = generate_random<good_type>();
+ test_type ta(a);
+ test_type tb(b);
+
+ BOOST_CHECK_EQUAL(test_type(a * b), ta * tb);
+ BOOST_CHECK_EQUAL(test_type(-a * b), -ta * tb);
+ BOOST_CHECK_EQUAL(test_type(a * -b), ta * -tb);
+ BOOST_CHECK_EQUAL(test_type(-a * -b), -ta * -tb);
+
+ BOOST_CHECK_EQUAL(test_type(a + b), ta + tb);
+ BOOST_CHECK_EQUAL(test_type(-a + b), -ta + tb);
+ BOOST_CHECK_EQUAL(test_type(a + -b), ta + -tb);
+ BOOST_CHECK_EQUAL(test_type(-a + -b), -ta + -tb);
+
+ BOOST_CHECK_EQUAL(test_type(a - b), ta - tb);
+ BOOST_CHECK_EQUAL(test_type(-a - b), -ta - tb);
+ BOOST_CHECK_EQUAL(test_type(a - -b), ta - -tb);
+ BOOST_CHECK_EQUAL(test_type(-a - -b), -ta - -tb);
+
+ BOOST_CHECK_EQUAL(test_type(a / b), ta / tb);
+ BOOST_CHECK_EQUAL(test_type(-a / b), -ta / tb);
+ BOOST_CHECK_EQUAL(test_type(a / -b), ta / -tb);
+ BOOST_CHECK_EQUAL(test_type(-a / -b), -ta / -tb);
+
+ BOOST_CHECK_EQUAL(test_type(sqrt(a)), sqrt(ta));
+ BOOST_CHECK_EQUAL(test_type(floor(a)), floor(ta));
+ BOOST_CHECK_EQUAL(test_type(floor(-a)), floor(-ta));
+ BOOST_CHECK_EQUAL(test_type(ceil(a)), ceil(ta));
+ BOOST_CHECK_EQUAL(test_type(ceil(-a)), ceil(-ta));
+
+ static boost::random::mt19937 i_gen;
+
+ int si = i_gen();
+ BOOST_CHECK_EQUAL(test_type(a * si), ta * si);
+ BOOST_CHECK_EQUAL(test_type(-a * si), -ta * si);
+ BOOST_CHECK_EQUAL(test_type(-a * -si), -ta * -si);
+ BOOST_CHECK_EQUAL(test_type(a * -si), ta * -si);
+ unsigned ui = std::abs(si);
+ BOOST_CHECK_EQUAL(test_type(a * ui), ta * ui);
+ BOOST_CHECK_EQUAL(test_type(-a * ui), -ta * ui);
+
+ // Divide:
+ BOOST_CHECK_EQUAL(test_type(a / si), ta / si);
+ BOOST_CHECK_EQUAL(test_type(-a / si), -ta / si);
+ BOOST_CHECK_EQUAL(test_type(-a / -si), -ta / -si);
+ BOOST_CHECK_EQUAL(test_type(a / -si), ta / -si);
+ BOOST_CHECK_EQUAL(test_type(a / ui), ta / ui);
+ BOOST_CHECK_EQUAL(test_type(-a / ui), -ta / ui);
+ // Error reporting:
+ if(boost::detail::test_errors() != error_count)
+ {
+ error_count = boost::detail::test_errors();
+ std::cout << std::setprecision(std::numeric_limits<test_type>::max_digits10) << std::scientific;
+ std::cout << "a (mpfr) = " << a << std::endl;
+ std::cout << "a (test) = " << ta << std::endl;
+ std::cout << "b (mpfr) = " << b << std::endl;
+ std::cout << "b (test) = " << tb << std::endl;
+ std::cout << "si = " << si << std::endl;
+ std::cout << "ui = " << ui << std::endl;
+ }
+ }
+ return boost::report_errors();
+}
+

Added: trunk/libs/multiprecision/test/test_cpp_bin_float_io.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/libs/multiprecision/test/test_cpp_bin_float_io.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -0,0 +1,258 @@
+// Copyright John Maddock 2013.
+
+// 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)
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/chrono.hpp>
+#include "test.hpp"
+#include <boost/array.hpp>
+#include <iostream>
+#include <iomanip>
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4127)
+#endif
+
+template <class Clock>
+struct stopwatch
+{
+ typedef typename Clock::duration duration;
+ stopwatch()
+ {
+ m_start = Clock::now();
+ }
+ duration elapsed()
+ {
+ return Clock::now() - m_start;
+ }
+ void reset()
+ {
+ m_start = Clock::now();
+ }
+
+private:
+ typename Clock::time_point m_start;
+};
+
+
+void print_flags(std::ios_base::fmtflags f)
+{
+ std::cout << "Formatting flags were: ";
+ if(f & std::ios_base::scientific)
+ std::cout << "scientific ";
+ if(f & std::ios_base::fixed)
+ std::cout << "fixed ";
+ if(f & std::ios_base::showpoint)
+ std::cout << "showpoint ";
+ if(f & std::ios_base::showpos)
+ std::cout << "showpos ";
+ std::cout << std::endl;
+}
+
+
+template <class T>
+void test()
+{
+ typedef T mp_t;
+ boost::array<std::ios_base::fmtflags, 9> f =
+ {{
+ std::ios_base::fmtflags(0), std::ios_base::showpoint, std::ios_base::showpos, std::ios_base::scientific, std::ios_base::scientific|std::ios_base::showpos,
+ std::ios_base::scientific|std::ios_base::showpoint, std::ios_base::fixed, std::ios_base::fixed|std::ios_base::showpoint,
+ std::ios_base::fixed|std::ios_base::showpos
+ }};
+
+ boost::array<boost::array<const char*, 13 * 9>, 40> string_data = {{
+#include "libs/multiprecision/test/string_data.ipp"
+ }};
+
+ double num = 123456789.0;
+ double denom = 1;
+ double val = num;
+ for(unsigned j = 0; j < 40; ++j)
+ {
+ unsigned col = 0;
+ for(unsigned prec = 1; prec < 14; ++prec)
+ {
+ for(unsigned i = 0; i < f.size(); ++i, ++col)
+ {
+ std::stringstream ss;
+ ss.precision(prec);
+ ss.flags(f[i]);
+ ss << mp_t(val);
+ const char* expect = string_data[j][col];
+ if(ss.str() != expect)
+ {
+ std::cout << std::setprecision(20) << "Testing value " << val << std::endl;
+ print_flags(f[i]);
+ std::cout << "Precision is: " << prec << std::endl;
+ std::cout << "Got: " << ss.str() << std::endl;
+ std::cout << "Expected: " << expect << std::endl;
+ ++boost::detail::test_errors();
+ mp_t(val).str(prec, f[i]); // for debugging
+ }
+ }
+ }
+ num = -num;
+ if(j & 1)
+ denom *= 8;
+ val = num / denom;
+ }
+
+ boost::array<const char*, 13 * 9> zeros =
+ {{ "0", "0.", "+0", "0.0e+00", "+0.0e+00", "0.0e+00", "0.0", "0.0", "+0.0", "0", "0.0", "+0", "0.00e+00", "+0.00e+00", "0.00e+00", "0.00", "0.00", "+0.00", "0", "0.00", "+0", "0.000e+00", "+0.000e+00", "0.000e+00", "0.000", "0.000", "+0.000", "0", "0.000", "+0", "0.0000e+00", "+0.0000e+00", "0.0000e+00", "0.0000", "0.0000", "+0.0000", "0", "0.0000", "+0", "0.00000e+00", "+0.00000e+00", "0.00000e+00", "0.00000", "0.00000", "+0.00000", "0", "0.00000", "+0", "0.000000e+00", "+0.000000e+00", "0.000000e+00", "0.000000", "0.000000", "+0.000000", "0", "0.000000", "+0", "0.0000000e+00", "+0.0000000e+00", "0.0000000e+00", "0.0000000", "0.0000000", "+0.0000000", "0", "0.0000000", "+0", "0.00000000e+00", "+0.00000000e+00", "0.00000000e+00", "0.00000000", "0.00000000", "+0.00000000", "0", "0.00000000", "+0", "0.000000000e+00", "+0.000000000e+00", "0.000000000e+00", "0.000000000", "0.000000000", "+0.000000000", "0", "0.000000000", "+0", "0.0000000000e+00", "+0.0000000000e+00", "0.0000000000e+00", "0.0000000000",
"0.0000000000", "+0.0000000000", "0", "0.0000000000", "+0", "0.00000000000e+00", "+0.00000000000e+00", "0.00000000000e+00", "0.00000000000", "0.00000000000", "+0.00000000000", "0", "0.00000000000", "+0", "0.000000000000e+00", "+0.000000000000e+00", "0.000000000000e+00", "0.000000000000", "0.000000000000", "+0.000000000000", "0", "0.000000000000", "+0", "0.0000000000000e+00", "+0.0000000000000e+00", "0.0000000000000e+00", "0.0000000000000", "0.0000000000000", "+0.0000000000000" }};
+
+ unsigned col = 0;
+ val = 0;
+ for(unsigned prec = 1; prec < 14; ++prec)
+ {
+ for(unsigned i = 0; i < f.size(); ++i, ++col)
+ {
+ std::stringstream ss;
+ ss.precision(prec);
+ ss.flags(f[i]);
+ ss << mp_t(val);
+ const char* expect = zeros[col];
+ if(ss.str() != expect)
+ {
+ std::cout << std::setprecision(20) << "Testing value " << val << std::endl;
+ print_flags(f[i]);
+ std::cout << "Precision is: " << prec << std::endl;
+ std::cout << "Got: " << ss.str() << std::endl;
+ std::cout << "Expected: " << expect << std::endl;
+ ++boost::detail::test_errors();
+ mp_t(val).str(prec, f[i]); // for debugging
+ }
+ }
+ }
+
+ if(std::numeric_limits<mp_t>::has_infinity)
+ {
+ T val = std::numeric_limits<T>::infinity();
+ BOOST_CHECK_EQUAL(val.str(), "inf");
+ BOOST_CHECK_EQUAL(val.str(0, std::ios_base::showpos), "+inf");
+ val = -val;
+ BOOST_CHECK_EQUAL(val.str(), "-inf");
+ BOOST_CHECK_EQUAL(val.str(0, std::ios_base::showpos), "-inf");
+
+ val = static_cast<T>("inf");
+ BOOST_CHECK_EQUAL(val, std::numeric_limits<T>::infinity());
+ val = static_cast<T>("+inf");
+ BOOST_CHECK_EQUAL(val, std::numeric_limits<T>::infinity());
+ val = static_cast<T>("-inf");
+ BOOST_CHECK_EQUAL(val, -std::numeric_limits<T>::infinity());
+ }
+ if(std::numeric_limits<mp_t>::has_quiet_NaN)
+ {
+ T val = std::numeric_limits<T>::quiet_NaN();
+ BOOST_CHECK_EQUAL(val.str(), "nan");
+ val = static_cast<T>("nan");
+ BOOST_CHECK((boost::math::isnan)(val));
+ }
+ //
+ // Min and max values:
+ //
+ T t((std::numeric_limits<T>::max)().str(std::numeric_limits<T>::max_digits10, std::ios_base::scientific));
+ BOOST_CHECK_EQUAL(t, (std::numeric_limits<T>::max)());
+ t = T((std::numeric_limits<T>::min)().str(std::numeric_limits<T>::max_digits10, std::ios_base::scientific));
+ BOOST_CHECK_EQUAL(t, (std::numeric_limits<T>::min)());
+ t = T((std::numeric_limits<T>::lowest)().str(std::numeric_limits<T>::max_digits10, std::ios_base::scientific));
+ BOOST_CHECK_EQUAL(t, (std::numeric_limits<T>::lowest)());
+}
+
+template <class T>
+T generate_random()
+{
+ typedef typename T::backend_type::exponent_type e_type;
+ static boost::random::mt19937 gen;
+ T val = gen();
+ T prev_val = -1;
+ while(val != prev_val)
+ {
+ val *= (gen.max)();
+ prev_val = val;
+ val += gen();
+ }
+ e_type e;
+ val = frexp(val, &e);
+
+ static boost::random::uniform_int_distribution<e_type> ui(0, std::numeric_limits<T>::max_exponent);
+ return ldexp(val, ui(gen));
+}
+
+template <class T>
+void do_round_trip(const T& val, std::ios_base::fmtflags f)
+{
+ std::stringstream ss;
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ ss << std::setprecision(std::numeric_limits<T>::max_digits10);
+#else
+ ss << std::setprecision(max_digits10_proxy<T>::value);
+#endif
+ ss.flags(f);
+ ss << val;
+ T new_val = static_cast<T>(ss.str());
+ BOOST_CHECK_EQUAL(new_val, val);
+ new_val = static_cast<T>(val.str(0, f));
+ BOOST_CHECK_EQUAL(new_val, val);
+}
+
+template <class T>
+void do_round_trip(const T& val)
+{
+ do_round_trip(val, std::ios_base::fmtflags(0));
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::scientific));
+ if((fabs(val) > 1) && (fabs(val) < 1e100))
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::fixed));
+}
+
+template <class T>
+void test_round_trip()
+{
+ std::cout << "Testing type " << typeid(T).name() << std::endl;
+ std::cout << "digits = " << std::numeric_limits<T>::digits << std::endl;
+ std::cout << "digits10 = " << std::numeric_limits<T>::digits10 << std::endl;
+ std::cout << "max_digits10 = " << std::numeric_limits<T>::max_digits10 << std::endl;
+
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ while(boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 200)
+ {
+ T val = generate_random<T>();
+ do_round_trip(val);
+ do_round_trip(T(-val));
+ do_round_trip(T(1/val));
+ do_round_trip(T(-1/val));
+ }
+
+ std::cout << "Execution time = " << boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() << "s" << std::endl;
+}
+
+#if !defined(TEST1) && !defined(TEST2)
+# define TEST1
+# define TEST2
+#endif
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST1
+ test<number<cpp_bin_float<113, digit_base_2> > >();
+ test_round_trip<number<cpp_bin_float<113, digit_base_2> > >();
+#endif
+#ifdef TEST2
+ test<number<cpp_bin_float<53, digit_base_2> > >();
+ test_round_trip<number<cpp_bin_float<53, digit_base_2> > >();
+#endif
+ return boost::report_errors();
+}
+

Modified: trunk/libs/multiprecision/test/test_exp.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_exp.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_exp.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -18,13 +18,14 @@
 
 #if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) \
       && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) \
- && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+ && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -53,6 +54,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -136,6 +140,8 @@
    std::cout << "Max error was: " << max_err << std::endl;
 #if defined(BOOST_INTEL) && defined(TEST_FLOAT128)
    BOOST_TEST(max_err < 40000);
+#elif defined(TEST_CPP_BIN_FLOAT)
+ BOOST_TEST(max_err < 6000);
 #else
    BOOST_TEST(max_err < 5000);
 #endif
@@ -173,7 +179,7 @@
       }
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 10);
+ BOOST_TEST(max_err < 20);
 
    BOOST_TEST(exp(T(0)) == 1);
 }
@@ -217,6 +223,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_fpclassify.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_fpclassify.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_fpclassify.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -14,13 +14,14 @@
 #include <boost/math/special_functions/fpclassify.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -49,6 +50,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 #ifdef _MSC_VER
 #pragma warning(disable: 4127) // conditional expression is constant
@@ -330,6 +334,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_log.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_log.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_log.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFR_50
 # define TEST_MPFI_50
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -202,6 +206,13 @@
    BOOST_TEST(max_err < 10);
 #endif
    BOOST_TEST(log(T(1)) == 0);
+ //
+ // Some tricky special cases:
+ //
+ BOOST_CHECK((boost::math::isfinite)(log((std::numeric_limits<T>::max)())));
+ BOOST_CHECK((boost::math::isfinite)(log((std::numeric_limits<T>::min)())));
+ BOOST_CHECK((boost::math::isfinite)(log10((std::numeric_limits<T>::max)())));
+ BOOST_CHECK((boost::math::isfinite)(log10((std::numeric_limits<T>::min)())));
 }
 
 
@@ -243,6 +254,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_numeric_limits.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_numeric_limits.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_numeric_limits.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -11,7 +11,7 @@
 
 #if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && \
    !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ) && \
- !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT) && !defined(TEST_MPFI_50) &&!defined(TEST_FLOAT128)
+ !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT) && !defined(TEST_MPFI_50) &&!defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPF
 # define TEST_BACKEND
@@ -24,6 +24,7 @@
 # define TEST_CPP_INT
 # define TEST_MPFI_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -58,6 +59,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 #ifdef BOOST_MSVC
 #pragma warning(disable:4127)
@@ -126,6 +130,21 @@
    BOOST_TEST((boost::math::isnormal)(n));
    BOOST_TEST(!(boost::math::isinf)(n));
    BOOST_TEST(!(boost::math::isnan)(n));
+
+ if(std::numeric_limits<Number>::round_style == std::round_to_nearest)
+ {
+ BOOST_CHECK_EQUAL(std::numeric_limits<Number>::round_error(), 0.5);
+ }
+ else if(std::numeric_limits<Number>::round_style != std::round_indeterminate)
+ {
+ // Round error is 1.0:
+ BOOST_CHECK_EQUAL(std::numeric_limits<Number>::round_error(), 1);
+ }
+ else
+ {
+ // Round error is presumably somewhere between 0.5 and 1:
+ BOOST_CHECK((std::numeric_limits<Number>::round_error() <= 1) && (std::numeric_limits<Number>::round_error() >= 0.5));
+ }
 }
 
 template <class Number>
@@ -261,6 +280,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_pow.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_pow.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_pow.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 //# define TEST_MPF
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFR_50
 # define TEST_MPFI_50
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -834,6 +838,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_round.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_round.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_round.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -15,13 +15,16 @@
 #include <boost/random/mersenne_twister.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT)\
+ && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)\
+ && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -47,6 +50,9 @@
 #ifdef TEST_CPP_DEC_FLOAT
 #include <boost/multiprecision/cpp_dec_float.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
@@ -434,6 +440,10 @@
    test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
 #endif
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+ test<boost::multiprecision::cpp_bin_float_100>();
+#endif
 #ifdef TEST_BACKEND
    test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
 #endif

Modified: trunk/libs/multiprecision/test/test_sin.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_sin.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_sin.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -282,6 +286,20 @@
    }
    std::cout << "Max error was: " << max_err << std::endl;
    BOOST_TEST(max_err < 20);
+
+#include "sincos.ipp"
+ max_err = 0;
+ for(unsigned k = 0; k < sincos.size(); k++)
+ {
+ T val = sin(sincos[k][0]);
+ T e = relative_error(val, sincos[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 20);
+
 }
 
 
@@ -323,6 +341,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_sinh.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_sinh.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_sinh.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -247,6 +251,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_sqrt.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_sqrt.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_sqrt.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -179,6 +183,11 @@
 #else
    BOOST_TEST(max_err < 20);
 #endif
+ //
+ // Some tricky special cases:
+ //
+ BOOST_CHECK((boost::math::isfinite)(sqrt((std::numeric_limits<T>::max)())));
+ BOOST_CHECK((boost::math::isfinite)(sqrt((std::numeric_limits<T>::min)())));
 }
 
 
@@ -223,6 +232,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_tan.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_tan.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_tan.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_MPFR_50
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -620,6 +624,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 

Modified: trunk/libs/multiprecision/test/test_tanh.cpp
==============================================================================
--- trunk/libs/multiprecision/test/test_tanh.cpp Thu Nov 21 13:57:41 2013 (r86780)
+++ trunk/libs/multiprecision/test/test_tanh.cpp 2013-11-21 14:05:42 EST (Thu, 21 Nov 2013) (r86781)
@@ -16,13 +16,14 @@
 #include <boost/array.hpp>
 #include "test.hpp"
 
-#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+#if !defined(TEST_MPF_50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128) && !defined(TEST_CPP_BIN_FLOAT)
 # define TEST_MPF_50
 # define TEST_MPFR_50
 # define TEST_MPFI_50
 # define TEST_BACKEND
 # define TEST_CPP_DEC_FLOAT
 # define TEST_FLOAT128
+# define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
 #pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
@@ -51,6 +52,9 @@
 #ifdef TEST_FLOAT128
 #include <boost/multiprecision/float128.hpp>
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
 
 template <class T>
 void test()
@@ -163,6 +167,9 @@
 #ifdef TEST_FLOAT128
    test<boost::multiprecision::float128>();
 #endif
+#ifdef TEST_CPP_BIN_FLOAT
+ test<boost::multiprecision::cpp_bin_float_50>();
+#endif
    return boost::report_errors();
 }
 


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